diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 6c28594a9..ddd41d76e 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -8,6 +8,7 @@ Changelog * Snippets are now ordered alphabetically * Removed the "More" section from the admin menu * Added pagination to page listings in admin + * Support for setting a subpage_types property on page models, to define which page types are allowed as subpages * Fix: Animated GIFs are now coalesced before resizing * Fix: Wand backend clones images before modifying them * Fix: Admin breadcrumb now positioned correctly on mobile diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index d7222307d..a3f9c7221 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -28,6 +28,7 @@ Contributors * Ben Margolis * Tom Talbot * Jeffrey Hearn +* Robert Clark Translators =========== diff --git a/docs/contributing.rst b/docs/contributing.rst index feb3b96f8..f5eb168b2 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -17,6 +17,26 @@ Coding guidelines * PEP8. We ask that all Python contributions adhere to the `PEP8 `_ style guide, apart from the restriction on line length (E501). The `pep8 tool `_ makes it easy to check your code, e.g. ``pep8 --ignore=E501 your_file.py``. * Tests. Wagtail has a suite of tests, which we are committed to improving and expanding. We run continuous integration at `travis-ci.org/torchbox/wagtail `_ to ensure that no commits or pull requests introduce test failures. If your contributions add functionality to Wagtail, please include the additional tests to cover it; if your contributions alter existing functionality, please update the relevant tests accordingly. +Styleguide +~~~~~~~~~~ + +Developers working on the Wagtail UI or creating new UI components may wish to test their work against our Styleguide, which is provided as the contrib module "wagtailstyleguide". + +To install the styleguide module on your site, add it to the list of ``INSTALLED_APPS`` in your settings: + +.. code-block:: python + + INSTALLED_APPS = ( + ... + 'wagtail.contrib.wagtailstyleguide', + ... + ) + +At present the styleguide is static: new UI components must be added to it manually, and there are no hooks into it for other modules to use. We hope to support hooks in the future. + +The styleguide doesn't currently provide examples of all the core interface components; notably the Page, Document, Image and Snippet chooser interfaces are not currently represented. + + Translations ~~~~~~~~~~~~ diff --git a/docs/gettingstarted.rst b/docs/gettingstarted.rst index 458de387b..de635256c 100644 --- a/docs/gettingstarted.rst +++ b/docs/gettingstarted.rst @@ -65,7 +65,7 @@ Wagtail instance available as the basis for your new site: - Install `Vagrant `_ 1.1+ - Clone the demonstration site, create the Vagrant box and initialise Wagtail:: - git clone git@github.com:torchbox/wagtaildemo.git + git clone https://github.com/torchbox/wagtaildemo.git cd wagtaildemo vagrant up vagrant ssh diff --git a/docs/wagtail_search.rst b/docs/wagtail_search.rst index 642a5e741..3d8ea26b2 100644 --- a/docs/wagtail_search.rst +++ b/docs/wagtail_search.rst @@ -224,10 +224,13 @@ Prerequisites are the Elasticsearch service itself and, via pip, the `elasticuti .. code-block:: guess - pip install elasticutils pyelasticsearch + pip install elasticutils==0.8.2 pyelasticsearch .. note:: - The dependency on pyelasticsearch is scheduled to be replaced by a dependency on `elasticsearch-py`_. + ElasticUtils 0.9+ is not supported. + +.. note:: + The dependency on elasticutils and pyelasticsearch is scheduled to be replaced by a dependency on `elasticsearch-py`_. The backend is configured in settings: diff --git a/runtests.py b/runtests.py index 6fd37ebeb..96653b40d 100755 --- a/runtests.py +++ b/runtests.py @@ -84,6 +84,7 @@ if not settings.configured: 'wagtail.wagtailsearch', 'wagtail.wagtailredirects', 'wagtail.wagtailforms', + 'wagtail.contrib.wagtailstyleguide', 'wagtail.tests', ], @@ -101,7 +102,9 @@ if not settings.configured: ), COMPRESS_ENABLED=False, # disable compression so that we can run tests on the content of the compress tag WAGTAILSEARCH_BACKENDS=WAGTAILSEARCH_BACKENDS, - WAGTAIL_SITE_NAME='Test Site' + WAGTAIL_SITE_NAME='Test Site', + LOGIN_REDIRECT_URL='wagtailadmin_home', + LOGIN_URL='wagtailadmin_login', ) diff --git a/wagtail/contrib/wagtailstyleguide/__init__.py b/wagtail/contrib/wagtailstyleguide/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/wagtail/contrib/wagtailstyleguide/models.py b/wagtail/contrib/wagtailstyleguide/models.py new file mode 100644 index 000000000..e69de29bb diff --git a/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html new file mode 100644 index 000000000..e7bd88606 --- /dev/null +++ b/wagtail/contrib/wagtailstyleguide/templates/wagtailstyleguide/base.html @@ -0,0 +1,398 @@ +{% extends "wagtailadmin/base.html" %} +{% load wagtailadmin_tags %} +{% load compress i18n %} +{% load gravatar %} + +{% block extra_css %} + {% compress css %} + + {% endcompress %} +{% endblock %} + +{% block titletag %}{% trans 'Styleguide' %}{% endblock %} +{% block bodyclass %}styleguide{% endblock %} + +{% block content %} + {% trans "Styleguide" as title_trans %} + {% include "wagtailadmin/shared/header.html" with title=title_trans %} + +
+

Contents

+ + +
+

Colour palette

+ +
    +
  • color-teal
  • +
  • color-teal-darker
  • +
  • color-teal-dark
  • +
  • color-red
  • +
  • color-orange
  • +
  • color-green
  • +
+
    +
  • color-grey-1
  • +
  • color-grey-1-1
  • +
  • color-grey-2
  • +
  • color-grey-3
  • +
  • color-grey-4
  • +
  • color-grey-5
  • +
+
+ +
+

Typography

+

This is an h1

+

This is an h2

+

This is an h3

+

This is an h4

+
This is an h5
+

This is a paragraph

+ +
    +
  • These are
  • +
  • items in an
  • +
  • unordered list
  • +
+ +
    +
  1. These are
  2. +
  3. items in an
  4. +
  5. ordered list
  6. +
+ + This is an example of code + +
+ +
+

Listings

+ +

table listing

+ + + + + + + + + + + + + + + + + + + + +
Heading 1Heading 2Heading 3
+

TD with title class

+
Regular listing TDRegular listing TD
+

TD with title class

+
Regular listing TDRegular listing TD
+ +

ul listing

+
    +
  • List item
  • +
  • List item
  • +
  • List item
  • +
+ +

Listings used for choosing a list item

+ + + + + + + + + + + + + + + + + + + + +
Heading 1Heading 2Heading 3
+

TD with title class

+
Regular listing TDRegular listing TD
+

TD with title class

+
Regular listing TDRegular listing TD
+
+ +
+

Buttons

+ +
button
+ +
button-secondary
+ +
yes
+ +
no / serious
+ +
bicolor with icon
+ +
button-small
+ +
bicolo button-small
+ +
mixed 1
+ +
mixed 2
+ +

Buttons must have interaction possible (i.e be an input or button element) to get a suitable hover cursor

+ + + + +
+ + + + + +
+

Forms

+ +
+
    + {% for field in example_form %} + {% if field.name == 'file' %} + {% include "wagtailimages/images/_file_field.html" %} + {% elif field.name == 'date' %} + {% include "wagtailadmin/shared/field_as_li.html" with input_classes="iconfield icon-date" %} + {% else %} + {% include "wagtailadmin/shared/field_as_li.html" %} + {% endif %} + {% endfor %} +
  • {% trans "Delete image" %}
  • +
+
+ +

TODO: Date picker

+

TODO: Time picker

+

TODO: Datetime picker

+

TODO: Rich text input

+

TODO: Page chooser

+

TODO: Image chooser

+

TODO: Document chooser

+

TODO: Snippet chooser

+
+ +
+

Page editor

+
+ +
+

Tabs

+ + + +

Tabs are currently only used following headers, where they often appear merged with the bottom of the header:

+ + {% include "wagtailadmin/shared/header.html" with title=title_trans merged=1 %} + + +

Tabs can also indicate errors:

+ + {% include "wagtailadmin/shared/header.html" with title=title_trans merged=1 %} + +
+ + + +
+

Misc formatters

+

Avatar icons

+ +

Gravatar set

+

Gravatar not set

+ +

Status tags

+
Primary tag
+ +
Secondary tag
+
+ +
+

Icons

+ +
    +
  • wagtail
  • +
  • wagtail-inverse
  • +
  • cogs
  • +
  • doc-empty-inverse
  • +
  • doc-empty
  • +
  • edit
  • +
  • arrow-up
  • +
  • arrow-down
  • + +
  • cross
  • +
  • folder-open-1
  • +
  • folder-inverse
  • +
  • mail
  • +
  • arrows-up-down
  • +
  • locked
  • +
  • unlocked
  • +
  • arrow-right
  • +
  • doc-full / file-text-alt
  • +
  • image / picture
  • +
  • doc-full-inverse
  • +
  • folder
  • +
  • plus
  • +
  • tag
  • +
  • folder-open-inverse
  • +
  • cog
  • +
  • tick
  • +
  • user
  • +
  • arrow-left
  • +
  • tick-inverse
  • +
  • plus-inverse
  • +
  • snippet
  • +
  • bold
  • +
  • italic
  • +
  • undo
  • +
  • repeat
  • +
  • list-ol
  • +
  • list-ul
  • + +
  • radio-full
  • +
  • radio-empty
  • +
  • arrow-up-big
  • +
  • arrow-down-big
  • +
  • group
  • +
  • media
  • +
  • horizontalrule
  • +
  • password
  • +
  • download
  • +
  • order
  • +
  • grip
  • +
  • home
  • +
  • order-down
  • +
  • order-up
  • +
  • bin
  • +
  • spinner
    spinner
  • +
  • pick
  • +
  • redirect
  • +
  • view
  • +
  • collapse-up
  • +
  • collapse-down
  • +
  • help
  • +
  • warning
  • +
  • success
  • +
  • date
  • +
  • form
  • +
+ +
+
+ +{% endblock %} + +{% block extra_js %} + +{% endblock %} \ No newline at end of file diff --git a/wagtail/contrib/wagtailstyleguide/tests.py b/wagtail/contrib/wagtailstyleguide/tests.py new file mode 100644 index 000000000..6a1c43183 --- /dev/null +++ b/wagtail/contrib/wagtailstyleguide/tests.py @@ -0,0 +1,15 @@ +from django.test import TestCase +from django.core.urlresolvers import reverse + +from wagtail.tests.utils import WagtailTestUtils + + +class TestStyleGuide(TestCase, WagtailTestUtils): + def setUp(self): + self.login(); + + def test_styleguide(self): + response = self.client.get(reverse('wagtailstyleguide')) + + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailstyleguide/base.html') diff --git a/wagtail/contrib/wagtailstyleguide/views.py b/wagtail/contrib/wagtailstyleguide/views.py new file mode 100644 index 000000000..52c5433a1 --- /dev/null +++ b/wagtail/contrib/wagtailstyleguide/views.py @@ -0,0 +1,43 @@ +from django import forms +from django.db import models +from django.shortcuts import render +from django.utils.translation import ugettext as _ +from django.contrib import messages +from django.contrib.auth.decorators import permission_required + +from wagtail.wagtailadmin.edit_handlers import PageChooserPanel +from wagtail.wagtailimages.edit_handlers import ImageChooserPanel +from wagtail.wagtaildocs.edit_handlers import DocumentChooserPanel + +from wagtail.wagtailadmin.forms import SearchForm +from wagtail.wagtailcore.fields import RichTextField + + +CHOICES = ( + ('choice1', 'choice 1'), + ('choice2', 'choice 2'), +) + +class ExampleForm(forms.Form): + text = forms.CharField(required=True, help_text="help text") + url = forms.URLField(required=True) + email = forms.EmailField(max_length=254) + date = forms.DateField() + select = forms.ChoiceField(choices=CHOICES) + boolean = forms.BooleanField(required=False) + +@permission_required('wagtailadmin.access_admin') +def index(request): + + form = SearchForm(placeholder=_("Search something")) + + example_form = ExampleForm() + + messages.success(request, _("Success message")) + messages.warning(request, _("Warning message")) + messages.error(request, _("Error message")) + + return render(request, 'wagtailstyleguide/base.html', { + 'search_form': form, + 'example_form': example_form, + }) diff --git a/wagtail/contrib/wagtailstyleguide/wagtail_hooks.py b/wagtail/contrib/wagtailstyleguide/wagtail_hooks.py new file mode 100644 index 000000000..ae2989be9 --- /dev/null +++ b/wagtail/contrib/wagtailstyleguide/wagtail_hooks.py @@ -0,0 +1,26 @@ +from django.conf import settings +from django.conf.urls import include, url +from django.core import urlresolvers +from django.utils.html import format_html, format_html_join +from django.utils.translation import ugettext_lazy as _ + +from wagtail.wagtailadmin import hooks +from wagtail.wagtailadmin.menu import MenuItem + +from wagtail.wagtailimages import urls + +from . import views + + +def register_admin_urls(): + return [ + url(r'^styleguide/$', views.index, name='wagtailstyleguide'), + ] +hooks.register('register_admin_urls', register_admin_urls) + + +def construct_main_menu(request, menu_items): + menu_items.append( + MenuItem(_('Styleguide'), urlresolvers.reverse('wagtailstyleguide'), classnames='icon icon-image', order=1000) + ) +hooks.register('construct_main_menu', construct_main_menu) diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index e061a4bfe..f798129dc 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -294,3 +294,16 @@ class ZuluSnippet(models.Model): def __unicode__(self): return self.text + + +class StandardIndex(Page): + pass + +class StandardChild(Page): + pass + +class BusinessIndex(Page): + subpage_types = ['tests.BusinessChild'] + +class BusinessChild(Page): + subpage_types = [] diff --git a/wagtail/tests/utils.py b/wagtail/tests/utils.py index 6590e6dcc..0b13e5932 100644 --- a/wagtail/tests/utils.py +++ b/wagtail/tests/utils.py @@ -1,4 +1,7 @@ +from django.test import TestCase from django.contrib.auth.models import User +from django.utils.six.moves.urllib.parse import urlparse, ParseResult +from django.http import QueryDict # We need to make sure that we're using the same unittest library that Django uses internally # Otherwise, we get issues with the "SkipTest" and "ExpectedFailure" exceptions being recognised as errors @@ -12,11 +15,30 @@ except ImportError: import unittest -def login(client): - # Create a user - user = User.objects.create_superuser(username='test', email='test@email.com', password='password') +class WagtailTestUtils(object): + def login(self): + # Create a user + user = User.objects.create_superuser(username='test', email='test@email.com', password='password') - # Login - client.login(username='test', password='password') + # Login + self.client.login(username='test', password='password') - return user + return user + + # From: https://github.com/django/django/blob/255449c1ee61c14778658caae8c430fa4d76afd6/django/contrib/auth/tests/test_views.py#L70-L85 + def assertURLEqual(self, url, expected, parse_qs=False): + """ + Given two URLs, make sure all their components (the ones given by + urlparse) are equal, only comparing components that are present in both + URLs. + If `parse_qs` is True, then the querystrings are parsed with QueryDict. + This is useful if you don't want the order of parameters to matter. + Otherwise, the query strings are compared as-is. + """ + fields = ParseResult._fields + + for attr, x, y in zip(fields, urlparse(url), urlparse(expected)): + if parse_qs and attr == 'query': + x, y = QueryDict(x), QueryDict(y) + if x and y and x != y: + self.fail("%r != %r (%s doesn't match)" % (url, expected, attr)) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index 39f38d499..81ebbf137 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -1,6 +1,4 @@ import copy -import re -import datetime from taggit.forms import TagWidget from modelcluster.forms import ClusterForm, ClusterFormMetaclass @@ -9,17 +7,13 @@ from django.template.loader import render_to_string from django.template.defaultfilters import addslashes from django.utils.safestring import mark_safe from django import forms -from django.db import models from django.forms.models import fields_for_model from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ( ObjectDoesNotExist, ImproperlyConfigured, - ValidationError ) from django.core.urlresolvers import reverse -from django.conf import settings -from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy from wagtail.wagtailcore.models import Page @@ -27,144 +21,13 @@ from wagtail.wagtailcore.util import camelcase_to_underscore from wagtail.wagtailcore.fields import RichTextArea -class FriendlyDateInput(forms.DateInput): - """ - A custom DateInput widget that formats dates as "05 Oct 2013" - and adds class="friendly_date" to be picked up by jquery datepicker. - """ - def __init__(self, attrs=None): - default_attrs = {'class': 'friendly_date'} - if attrs: - default_attrs.update(attrs) - - super(FriendlyDateInput, self).__init__(attrs=default_attrs, - format='%d %b %Y') - - -class FriendlyTimeInput(forms.TimeInput): - """ - A custom TimeInput widget that formats dates as "5.30pm" - and adds class="friendly_time" to be picked up by jquery timepicker. - """ - def __init__(self, attrs=None): - default_attrs = {'class': 'friendly_time'} - if attrs: - default_attrs.update(attrs) - - super(FriendlyTimeInput, self).__init__(attrs=default_attrs, - format='%I.%M%p') - - -class FriendlyTimeField(forms.CharField): - def to_python(self, time_string): - # Check if the string is blank - if not time_string: - return None - - # Look for time in the string - expr = re.compile("^(?P\d+)(?:(?:.|:)(?P\d+))?(?Pam|pm)") - match = expr.match(time_string.lower()) - if match: - # Pull out values from string - hour_string, minute_string, am_pm = match.groups() - - # Convert hours and minutes to integers - hour = int(hour_string) - if minute_string: - minute = int(minute_string) - else: - minute = 0 - - # Create python time - if am_pm == "pm" and hour < 12: - hour += 12 - - if am_pm == "am" and hour >= 12: - hour -= 12 - - return datetime.time(hour=hour, minute=minute) - else: - raise ValidationError(_("Please type a valid time")) - - -class LocalizedDateInput(forms.DateInput): - """ - A custom DateInput widget that formats localized dates - and adds class="friendly_date" to be picked up by jquery datepicker. - """ - def __init__(self, attrs=None): - default_attrs = {'class': 'localized_date', 'localize': True} - if attrs: - default_attrs.update(attrs) - - super(LocalizedDateInput, self).__init__(attrs=default_attrs) - - -class LocalizedTimeInput(forms.TimeInput): - """ - A custom TimeInput widget that formats dates as "5.30pm" - and adds class="friendly_time" to be picked up by jquery timepicker. - """ - def __init__(self, attrs=None): - default_attrs = {'class': 'localized_time'} - if attrs: - default_attrs.update(attrs) - # Just use 24-hour format - super(LocalizedTimeInput, self).__init__(attrs=default_attrs, - format='%H:%M') - - -class LocalizedTimeField(forms.CharField): - def to_python(self, time_string): - # Check if the string is blank - if not time_string: - return None - - # Look for time in the string - expr = re.compile("^(?P\d+)(?:(?:.|:)(?P\d+))?") - match = expr.match(time_string.lower()) - if match: - # Pull out values from string - hour_string, minute_string = match.groups() - - # Convert hours and minutes to integers - hour = int(hour_string) - if minute_string: - minute = int(minute_string) - else: - minute = 0 - if hour >= 24 or hour < 0 or minute >= 60 or minute < 0: - raise ValidationError(_("Please type a valid time")) - - return datetime.time(hour=hour, minute=minute) - else: - raise ValidationError(_("Please type a valid time")) - - -if hasattr(settings, 'USE_L10N') and settings.USE_L10N is True: - FORM_FIELD_OVERRIDES = { - models.DateField: {'widget': LocalizedDateInput}, - models.TimeField: {'widget': LocalizedTimeInput, - 'form_class': LocalizedTimeField}, - } -else: # Fall back to friendly date/time - FORM_FIELD_OVERRIDES = { - models.DateField: {'widget': FriendlyDateInput}, - models.TimeField: {'widget': FriendlyTimeInput, - 'form_class': FriendlyTimeField}, - } +FORM_FIELD_OVERRIDES = {} WIDGET_JS = { - FriendlyDateInput: (lambda id: "initFriendlyDateChooser(fixPrefix('%s'));" - % id), - FriendlyTimeInput: (lambda id: "initFriendlyTimeChooser(fixPrefix('%s'));" - % id), - LocalizedDateInput: (lambda id: "initLocalizedDateChooser(fixPrefix('%s'));" - % id), - LocalizedTimeInput: (lambda id: "initLocalizedTimeChooser(fixPrefix('%s'));" - % id), - RichTextArea: (lambda id: "makeRichTextEditable(fixPrefix('%s'));" - % id), + forms.DateInput: (lambda id: "initDateChooser(fixPrefix('%s'));" % id), + forms.TimeInput: (lambda id: "initTimeChooser(fixPrefix('%s'));" % id), + forms.DateTimeInput: (lambda id: "initDateTimeChooser(fixPrefix('%s'));" % id), + RichTextArea: (lambda id: "makeRichTextEditable(fixPrefix('%s'));" % id), TagWidget: ( lambda id: "initTagField(fixPrefix('%s'), '%s');" % ( id, addslashes(reverse('wagtailadmin_tag_autocomplete')) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/modal-workflow.js b/wagtail/wagtailadmin/static/wagtailadmin/js/modal-workflow.js index 9aa90f857..bba601468 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/modal-workflow.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/modal-workflow.js @@ -16,9 +16,12 @@ function ModalWorkflow(opts) { /* remove any previous modals before continuing (closing doesn't remove them from the dom) */ $('body > .modal').remove(); + // set default contents of container var container = $(''); + + // add container to body and hide it, so content can be added to it before display $('body').append(container); - container.modal(); + container.modal('hide'); self.body = container.find('.modal-body'); @@ -49,15 +52,19 @@ function ModalWorkflow(opts) { self.loadResponseText = function(responseText) { var response = eval('(' + responseText + ')'); + self.loadBody(response); }; - self.loadBody = function(body) { - if (body.html) { - self.body.html(body.html); + self.loadBody = function(response) { + if (response.html) { + // if the response is html + self.body.html(response.html); + container.modal('show'); } - if (body.onload) { - body.onload(self); + if (response.onload) { + // if the response is a function + response.onload(self); } }; diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js index 4e8e1b02d..eacb8f86d 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js @@ -53,57 +53,56 @@ function insertRichTextDeleteControl(elem) { }); } -function initDateChoosers(context) { - $('input.friendly_date', context).datepicker({ - dateFormat: 'd M yy', constrainInput: false, /* showOn: 'button', */ firstDay: 1 - }); - - if(window.overrideDateInputFormat && window.overrideDateInputFormat !='') { - $('input.localized_date', context).datepicker({ - dateFormat: window.overrideDateInputFormat, constrainInput: false, /* showOn: 'button', */ firstDay: 1 +function initDateChooser(id) { + if (window.dateTimePickerTranslations) { + $('#' + id).datetimepicker({ + timepicker: false, + format: 'Y-m-d', + i18n: { + lang: window.dateTimePickerTranslations + }, + lang: 'lang' }); } else { - $('input.localized_date', context).datepicker({ - constrainInput: false, /* showOn: 'button', */ firstDay: 1 + $('#' + id).datetimepicker({ + timepicker: false, + format: 'Y-m-d', }); } +} -} -function initFriendlyDateChooser(id) { - $('#' + id).datepicker({ - dateFormat: 'd M yy', constrainInput: false, /* showOn: 'button', */ firstDay: 1 - }); -} -function initLocalizedDateChooser(id) { - if(window.overrideDateInputFormat && window.overrideDateInputFormat !='') { - $('#' + id).datepicker({ - dateFormat: window.overrideDateInputFormat, constrainInput: false, /* showOn: 'button', */ firstDay: 1 +function initTimeChooser(id) { + if (window.dateTimePickerTranslations) { + $('#' + id).datetimepicker({ + datepicker: false, + format: 'H:i', + i18n: { + lang: window.dateTimePickerTranslations + }, + lang: 'lang' }); } else { - $('#' + id).datepicker({ - constrainInput: false, /* showOn: 'button', */ firstDay: 1 + $('#' + id).datetimepicker({ + datepicker: false, + format: 'H:i', }); } - } -function initTimeChoosers(context) { - $('input.friendly_time', context).timepicker({ - timeFormat: 'g.ia' - }); - $('input.localized_time', context).timepicker({ - timeFormat: 'H:i', maxTime: '23:59' - }); -} -function initFriendlyTimeChooser(id) { - $('#' + id).timepicker({ - timeFormat: 'g.ia' - }); -} -function initLocalizedTimeChooser(id) { - $('#' + id).timepicker({ - timeFormat: 'H:i', maxTime: '23:59' - }); +function initDateTimeChooser(id) { + if (window.dateTimePickerTranslations) { + $('#' + id).datetimepicker({ + format: 'Y-m-d H:i', + i18n: { + lang: window.dateTimePickerTranslations + }, + language: 'lang' + }); + } else { + $('#' + id).datetimepicker({ + format: 'Y-m-d H:i', + }); + } } function initTagField(id, autocompleteUrl) { @@ -320,8 +319,6 @@ function initCollapsibleBlocks(){ } $(function() { - initDateChoosers(); - initTimeChoosers(); initSlugAutoPopulate(); initSlugCleaning(); initErrorDetection(); @@ -332,7 +329,9 @@ $(function() { }); /* Set up behaviour of preview button */ - $('.action-preview').click(function() { + $('.action-preview').click(function(e) { + e.preventDefault(); + var previewWindow = window.open($(this).data('placeholder'), $(this).data('windowname')); $.ajax({ @@ -341,9 +340,18 @@ $(function() { data: $('#page-edit-form').serialize(), success: function(data, textStatus, request) { if (request.getResponseHeader('X-Wagtail-Preview') == 'ok') { - previewWindow.document.open(); - previewWindow.document.write(data); - previewWindow.document.close(); + var pdoc = previewWindow.document; + var frame = pdoc.getElementById('preview-frame'); + + frame = frame.contentWindow || frame.contentDocument.document || frame.contentDocument; + frame.document.open(); + frame.document.write(data); + frame.document.close(); + + var hideTimeout = setTimeout(function(){ + pdoc.getElementById('loading-spinner-wrapper').className += 'remove'; + clearTimeout(hideTimeout); + }, 50) // just enough to give effect without adding discernible slowness } else { previewWindow.close(); document.open(); @@ -357,11 +365,11 @@ $(function() { error output rather than giving a 'friendly' error message so that developers can debug template errors. (On a production site, we'd typically be serving a friendly custom 500 page anyhow.) */ + previewWindow.document.open(); previewWindow.document.write(xhr.responseText); previewWindow.document.close(); } }); - return false; }); }); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/bootstrap-transition.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/bootstrap-transition.js new file mode 100644 index 000000000..36141c4fc --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/bootstrap-transition.js @@ -0,0 +1,65 @@ +/* ======================================================================== + * Bootstrap: transition.js v3.1.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function () { 'use strict'; + + (function (o_o) { + typeof define == 'function' && define.amd ? define(['jquery'], o_o) : + typeof exports == 'object' ? o_o(require('jquery')) : o_o(jQuery) + })(function ($) { + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + + }) + +}(); \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-af.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-af.js deleted file mode 100644 index 0922ef7a1..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-af.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Afrikaans initialisation for the jQuery UI date picker plugin. */ -/* Written by Renier Pretorius. */ -jQuery(function($){ - $.datepicker.regional['af'] = { - closeText: 'Selekteer', - prevText: 'Vorige', - nextText: 'Volgende', - currentText: 'Vandag', - monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', - 'Julie','Augustus','September','Oktober','November','Desember'], - monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], - dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], - dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], - dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['af']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ar-DZ.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ar-DZ.js deleted file mode 100644 index 7b175af40..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ar-DZ.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ -/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ - -jQuery(function($){ - $.datepicker.regional['ar-DZ'] = { - closeText: 'إغلاق', - prevText: '<السابق', - nextText: 'التالي>', - currentText: 'اليوم', - monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', - 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], - monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], - dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - weekHeader: 'أسبوع', - dateFormat: 'dd/mm/yy', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ar-DZ']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ar.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ar.js deleted file mode 100644 index cef0f08fd..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ar.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Arabic Translation for jQuery UI date picker plugin. */ -/* Khaled Alhourani -- me@khaledalhourani.com */ -/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ -jQuery(function($){ - $.datepicker.regional['ar'] = { - closeText: 'إغلاق', - prevText: '<السابق', - nextText: 'التالي>', - currentText: 'اليوم', - monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران', - 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], - monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], - dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'], - weekHeader: 'أسبوع', - dateFormat: 'dd/mm/yy', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ar']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-az.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-az.js deleted file mode 100644 index a133a9eb2..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-az.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Jamil Najafov (necefov33@gmail.com). */ -jQuery(function($) { - $.datepicker.regional['az'] = { - closeText: 'Bağla', - prevText: '<Geri', - nextText: 'İrəli>', - currentText: 'Bugün', - monthNames: ['Yanvar','Fevral','Mart','Aprel','May','İyun', - 'İyul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], - monthNamesShort: ['Yan','Fev','Mar','Apr','May','İyun', - 'İyul','Avq','Sen','Okt','Noy','Dek'], - dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], - dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], - dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], - weekHeader: 'Hf', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['az']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-be.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-be.js deleted file mode 100644 index 6ea12f725..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-be.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Belarusian initialisation for the jQuery UI date picker plugin. */ -/* Written by Pavel Selitskas */ -jQuery(function($){ - $.datepicker.regional['be'] = { - closeText: 'Зачыніць', - prevText: '←Папяр.', - nextText: 'Наст.→', - currentText: 'Сёньня', - monthNames: ['Студзень','Люты','Сакавік','Красавік','Травень','Чэрвень', - 'Ліпень','Жнівень','Верасень','Кастрычнік','Лістапад','Сьнежань'], - monthNamesShort: ['Сту','Лют','Сак','Кра','Тра','Чэр', - 'Ліп','Жні','Вер','Кас','Ліс','Сьн'], - dayNames: ['нядзеля','панядзелак','аўторак','серада','чацьвер','пятніца','субота'], - dayNamesShort: ['ндз','пнд','аўт','срд','чцв','птн','сбт'], - dayNamesMin: ['Нд','Пн','Аў','Ср','Чц','Пт','Сб'], - weekHeader: 'Тд', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['be']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-bg.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-bg.js deleted file mode 100644 index 86ab88582..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-bg.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Bulgarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Stoyan Kyosev (http://svest.org). */ -jQuery(function($){ - $.datepicker.regional['bg'] = { - closeText: 'затвори', - prevText: '<назад', - nextText: 'напред>', - nextBigText: '>>', - currentText: 'днес', - monthNames: ['Януари','Февруари','Март','Април','Май','Юни', - 'Юли','Август','Септември','Октомври','Ноември','Декември'], - monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', - 'Юли','Авг','Сеп','Окт','Нов','Дек'], - dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], - dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], - dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], - weekHeader: 'Wk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['bg']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-bs.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-bs.js deleted file mode 100644 index f08870ffe..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-bs.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Bosnian i18n for the jQuery UI date picker plugin. */ -/* Written by Kenan Konjo. */ -jQuery(function($){ - $.datepicker.regional['bs'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Januar','Februar','Mart','April','Maj','Juni', - 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Wk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['bs']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ca.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ca.js deleted file mode 100644 index a10b549c2..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ca.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */ -/* Writers: (joan.leon@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ca'] = { - closeText: 'Tanca', - prevText: 'Anterior', - nextText: 'Següent', - currentText: 'Avui', - monthNames: ['gener','febrer','març','abril','maig','juny', - 'juliol','agost','setembre','octubre','novembre','desembre'], - monthNamesShort: ['gen','feb','març','abr','maig','juny', - 'jul','ag','set','oct','nov','des'], - dayNames: ['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'], - dayNamesShort: ['dg','dl','dt','dc','dj','dv','ds'], - dayNamesMin: ['dg','dl','dt','dc','dj','dv','ds'], - weekHeader: 'Set', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ca']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-cs.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-cs.js deleted file mode 100644 index b96b1a51c..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-cs.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Czech initialisation for the jQuery UI date picker plugin. */ -/* Written by Tomas Muller (tomas@tomas-muller.net). */ -jQuery(function($){ - $.datepicker.regional['cs'] = { - closeText: 'Zavřít', - prevText: '<Dříve', - nextText: 'Později>', - currentText: 'Nyní', - monthNames: ['leden','únor','březen','duben','květen','červen', - 'červenec','srpen','září','říjen','listopad','prosinec'], - monthNamesShort: ['led','úno','bře','dub','kvě','čer', - 'čvc','srp','zář','říj','lis','pro'], - dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], - dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], - dayNamesMin: ['ne','po','út','st','čt','pá','so'], - weekHeader: 'Týd', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['cs']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-cy-GB.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-cy-GB.js deleted file mode 100644 index cf3a38e6c..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-cy-GB.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Welsh/UK initialisation for the jQuery UI date picker plugin. */ -/* Written by William Griffiths. */ -jQuery(function($){ - $.datepicker.regional['cy-GB'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin', - 'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'], - monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh', - 'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'], - dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'], - dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'], - dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'], - weekHeader: 'Wy', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['cy-GB']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-da.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-da.js deleted file mode 100644 index 7e42948b3..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-da.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Danish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jan Christensen ( deletestuff@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['da'] = { - closeText: 'Luk', - prevText: '<Forrige', - nextText: 'Næste>', - currentText: 'Idag', - monthNames: ['Januar','Februar','Marts','April','Maj','Juni', - 'Juli','August','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], - dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], - dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - weekHeader: 'Uge', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['da']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-de.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-de.js deleted file mode 100644 index abe75c4e4..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-de.js +++ /dev/null @@ -1,23 +0,0 @@ -/* German initialisation for the jQuery UI date picker plugin. */ -/* Written by Milian Wolff (mail@milianw.de). */ -jQuery(function($){ - $.datepicker.regional['de'] = { - closeText: 'Schließen', - prevText: '<Zurück', - nextText: 'Vor>', - currentText: 'Heute', - monthNames: ['Januar','Februar','März','April','Mai','Juni', - 'Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dez'], - dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], - dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], - dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], - weekHeader: 'KW', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['de']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-el.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-el.js deleted file mode 100644 index 1ac47561a..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-el.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Greek (el) initialisation for the jQuery UI date picker plugin. */ -/* Written by Alex Cicovic (http://www.alexcicovic.com) */ -jQuery(function($){ - $.datepicker.regional['el'] = { - closeText: 'Κλείσιμο', - prevText: 'Προηγούμενος', - nextText: 'Επόμενος', - currentText: 'Τρέχων Μήνας', - monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', - 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], - monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', - 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], - dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], - dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], - dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], - weekHeader: 'Εβδ', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['el']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-AU.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-AU.js deleted file mode 100644 index c1a1020a1..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-AU.js +++ /dev/null @@ -1,23 +0,0 @@ -/* English/Australia initialisation for the jQuery UI date picker plugin. */ -/* Based on the en-GB initialisation. */ -jQuery(function($){ - $.datepicker.regional['en-AU'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-AU']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-GB.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-GB.js deleted file mode 100644 index 16a096e75..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-GB.js +++ /dev/null @@ -1,23 +0,0 @@ -/* English/UK initialisation for the jQuery UI date picker plugin. */ -/* Written by Stuart. */ -jQuery(function($){ - $.datepicker.regional['en-GB'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-GB']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-NZ.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-NZ.js deleted file mode 100644 index 7819df052..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-en-NZ.js +++ /dev/null @@ -1,23 +0,0 @@ -/* English/New Zealand initialisation for the jQuery UI date picker plugin. */ -/* Based on the en-GB initialisation. */ -jQuery(function($){ - $.datepicker.regional['en-NZ'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-NZ']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-eo.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-eo.js deleted file mode 100644 index 39e44fc57..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-eo.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Esperanto initialisation for the jQuery UI date picker plugin. */ -/* Written by Olivier M. (olivierweb@ifrance.com). */ -jQuery(function($){ - $.datepicker.regional['eo'] = { - closeText: 'Fermi', - prevText: '<Anta', - nextText: 'Sekv>', - currentText: 'Nuna', - monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', - 'Julio','Aŭgusto','Septembro','Oktobro','Novembro','Decembro'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aŭg','Sep','Okt','Nov','Dec'], - dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Ĵaŭ','Ven','Sab'], - dayNamesMin: ['Di','Lu','Ma','Me','Ĵa','Ve','Sa'], - weekHeader: 'Sb', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['eo']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-es.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-es.js deleted file mode 100644 index 97a2d6ead..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-es.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ -/* Traducido por Vester (xvester@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['es'] = { - closeText: 'Cerrar', - prevText: '<Ant', - nextText: 'Sig>', - currentText: 'Hoy', - monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', - 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], - monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', - 'Jul','Ago','Sep','Oct','Nov','Dic'], - dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], - dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], - dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['es']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-et.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-et.js deleted file mode 100644 index 62cbea8fa..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-et.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Estonian initialisation for the jQuery UI date picker plugin. */ -/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ -jQuery(function($){ - $.datepicker.regional['et'] = { - closeText: 'Sulge', - prevText: 'Eelnev', - nextText: 'Järgnev', - currentText: 'Täna', - monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', - 'Juuli','August','September','Oktoober','November','Detsember'], - monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', - 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], - dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], - dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], - dayNamesMin: ['P','E','T','K','N','R','L'], - weekHeader: 'näd', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['et']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-eu.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-eu.js deleted file mode 100644 index a71db2c72..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-eu.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ -/* Karrikas-ek itzulia (karrikas@karrikas.com) */ -jQuery(function($){ - $.datepicker.regional['eu'] = { - closeText: 'Egina', - prevText: '<Aur', - nextText: 'Hur>', - currentText: 'Gaur', - monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina', - 'uztaila','abuztua','iraila','urria','azaroa','abendua'], - monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.', - 'uzt.','abu.','ira.','urr.','aza.','abe.'], - dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'], - dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'], - dayNamesMin: ['ig','al','ar','az','og','ol','lr'], - weekHeader: 'As', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['eu']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fa.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fa.js deleted file mode 100644 index bb957f6d8..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fa.js +++ /dev/null @@ -1,59 +0,0 @@ -/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ -/* Javad Mowlanezhad -- jmowla@gmail.com */ -/* Jalali calendar should supported soon! (Its implemented but I have to test it) */ -jQuery(function($) { - $.datepicker.regional['fa'] = { - closeText: 'بستن', - prevText: '<قبلی', - nextText: 'بعدی>', - currentText: 'امروز', - monthNames: [ - 'فروردين', - 'ارديبهشت', - 'خرداد', - 'تير', - 'مرداد', - 'شهريور', - 'مهر', - 'آبان', - 'آذر', - 'دی', - 'بهمن', - 'اسفند' - ], - monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], - dayNames: [ - 'يکشنبه', - 'دوشنبه', - 'سه‌شنبه', - 'چهارشنبه', - 'پنجشنبه', - 'جمعه', - 'شنبه' - ], - dayNamesShort: [ - 'ی', - 'د', - 'س', - 'چ', - 'پ', - 'ج', - 'ش' - ], - dayNamesMin: [ - 'ی', - 'د', - 'س', - 'چ', - 'پ', - 'ج', - 'ش' - ], - weekHeader: 'هف', - dateFormat: 'yy/mm/dd', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fa']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fi.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fi.js deleted file mode 100644 index bd6d99498..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fi.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Finnish initialisation for the jQuery UI date picker plugin. */ -/* Written by Harri Kilpiö (harrikilpio@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['fi'] = { - closeText: 'Sulje', - prevText: '«Edellinen', - nextText: 'Seuraava»', - currentText: 'Tänään', - monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', - 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], - monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', - 'Heinä','Elo','Syys','Loka','Marras','Joulu'], - dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'], - dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], - dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], - weekHeader: 'Vk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fi']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fo.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fo.js deleted file mode 100644 index cb0e3def7..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fo.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Faroese initialisation for the jQuery UI date picker plugin */ -/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ -jQuery(function($){ - $.datepicker.regional['fo'] = { - closeText: 'Lat aftur', - prevText: '<Fyrra', - nextText: 'Næsta>', - currentText: 'Í dag', - monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', - 'Juli','August','September','Oktober','November','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', - 'Jul','Aug','Sep','Okt','Nov','Des'], - dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], - dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], - dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], - weekHeader: 'Vk', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fo']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr-CA.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr-CA.js deleted file mode 100644 index e20822185..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr-CA.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Canadian-French initialisation for the jQuery UI date picker plugin. */ -jQuery(function ($) { - $.datepicker.regional['fr-CA'] = { - closeText: 'Fermer', - prevText: 'Précédent', - nextText: 'Suivant', - currentText: 'Aujourd\'hui', - monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', - 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'], - monthNamesShort: ['janv.', 'févr.', 'mars', 'avril', 'mai', 'juin', - 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'], - dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'], - dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'], - dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'], - weekHeader: 'Sem.', - dateFormat: 'yy-mm-dd', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: '' - }; - $.datepicker.setDefaults($.datepicker.regional['fr-CA']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr-CH.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr-CH.js deleted file mode 100644 index e574537b0..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr-CH.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Swiss-French initialisation for the jQuery UI date picker plugin. */ -/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ -jQuery(function($){ - $.datepicker.regional['fr-CH'] = { - closeText: 'Fermer', - prevText: '<Préc', - nextText: 'Suiv>', - currentText: 'Courant', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', - 'Jul','Aoû','Sep','Oct','Nov','Déc'], - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], - dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fr-CH']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr.js deleted file mode 100644 index 934afd1d0..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-fr.js +++ /dev/null @@ -1,25 +0,0 @@ -/* French initialisation for the jQuery UI date picker plugin. */ -/* Written by Keith Wood (kbwood{at}iinet.com.au), - Stéphane Nahmani (sholby@sholby.net), - Stéphane Raimbault */ -jQuery(function($){ - $.datepicker.regional['fr'] = { - closeText: 'Fermer', - prevText: 'Précédent', - nextText: 'Suivant', - currentText: 'Aujourd\'hui', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', - 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], - dayNamesMin: ['D','L','M','M','J','V','S'], - weekHeader: 'Sem.', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fr']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-gl.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-gl.js deleted file mode 100644 index 59b989a6d..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-gl.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Galician localization for 'UI date picker' jQuery extension. */ -/* Translated by Jorge Barreiro . */ -jQuery(function($){ - $.datepicker.regional['gl'] = { - closeText: 'Pechar', - prevText: '<Ant', - nextText: 'Seg>', - currentText: 'Hoxe', - monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', - 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], - monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', - 'Xul','Ago','Set','Out','Nov','Dec'], - dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], - dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], - dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['gl']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-he.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-he.js deleted file mode 100644 index b9e8deec5..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-he.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Hebrew initialisation for the UI Datepicker extension. */ -/* Written by Amir Hardon (ahardon at gmail dot com). */ -jQuery(function($){ - $.datepicker.regional['he'] = { - closeText: 'סגור', - prevText: '<הקודם', - nextText: 'הבא>', - currentText: 'היום', - monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', - 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], - monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני', - 'יולי','אוג','ספט','אוק','נוב','דצמ'], - dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], - dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], - dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['he']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hi.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hi.js deleted file mode 100644 index 6c563b997..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hi.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Hindi initialisation for the jQuery UI date picker plugin. */ -/* Written by Michael Dawart. */ -jQuery(function($){ - $.datepicker.regional['hi'] = { - closeText: 'बंद', - prevText: 'पिछला', - nextText: 'अगला', - currentText: 'आज', - monthNames: ['जनवरी ','फरवरी','मार्च','अप्रेल','मई','जून', - 'जूलाई','अगस्त ','सितम्बर','अक्टूबर','नवम्बर','दिसम्बर'], - monthNamesShort: ['जन', 'फर', 'मार्च', 'अप्रेल', 'मई', 'जून', - 'जूलाई', 'अग', 'सित', 'अक्ट', 'नव', 'दि'], - dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'], - dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'], - dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'], - weekHeader: 'हफ्ता', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hi']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hr.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hr.js deleted file mode 100644 index 2fe37b64b..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hr.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Croatian i18n for the jQuery UI date picker plugin. */ -/* Written by Vjekoslav Nesek. */ -jQuery(function($){ - $.datepicker.regional['hr'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', - 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], - monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', - 'Srp','Kol','Ruj','Lis','Stu','Pro'], - dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Tje', - dateFormat: 'dd.mm.yy.', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hr']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hu.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hu.js deleted file mode 100644 index b28c268c1..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hu.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Hungarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ -jQuery(function($){ - $.datepicker.regional['hu'] = { - closeText: 'bezár', - prevText: 'vissza', - nextText: 'előre', - currentText: 'ma', - monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', - 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], - monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', - 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], - dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], - dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], - dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], - weekHeader: 'Hét', - dateFormat: 'yy.mm.dd.', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hu']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hy.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hy.js deleted file mode 100644 index 6d4eca555..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-hy.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ -jQuery(function($){ - $.datepicker.regional['hy'] = { - closeText: 'Փակել', - prevText: '<Նախ.', - nextText: 'Հաջ.>', - currentText: 'Այսօր', - monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', - 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], - monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', - 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Դեկ'], - dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','հինգշաբթի','ուրբաթ','շաբաթ'], - dayNamesShort: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], - dayNamesMin: ['կիր','երկ','երք','չրք','հնգ','ուրբ','շբթ'], - weekHeader: 'ՇԲՏ', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hy']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-id.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-id.js deleted file mode 100644 index 6327fa60c..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-id.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Indonesian initialisation for the jQuery UI date picker plugin. */ -/* Written by Deden Fathurahman (dedenf@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['id'] = { - closeText: 'Tutup', - prevText: '<mundur', - nextText: 'maju>', - currentText: 'hari ini', - monthNames: ['Januari','Februari','Maret','April','Mei','Juni', - 'Juli','Agustus','September','Oktober','Nopember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', - 'Jul','Agus','Sep','Okt','Nop','Des'], - dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], - dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], - dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], - weekHeader: 'Mg', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['id']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-is.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-is.js deleted file mode 100644 index 925341a7a..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-is.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Icelandic initialisation for the jQuery UI date picker plugin. */ -/* Written by Haukur H. Thorsson (haukur@eskill.is). */ -jQuery(function($){ - $.datepicker.regional['is'] = { - closeText: 'Loka', - prevText: '< Fyrri', - nextText: 'Næsti >', - currentText: 'Í dag', - monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', - 'Júlí','Ágúst','September','Október','Nóvember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', - 'Júl','Ágú','Sep','Okt','Nóv','Des'], - dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], - dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], - dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], - weekHeader: 'Vika', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['is']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-it.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-it.js deleted file mode 100644 index a01f043f8..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-it.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Italian initialisation for the jQuery UI date picker plugin. */ -/* Written by Antonello Pasella (antonello.pasella@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['it'] = { - closeText: 'Chiudi', - prevText: '<Prec', - nextText: 'Succ>', - currentText: 'Oggi', - monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', - 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], - monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', - 'Lug','Ago','Set','Ott','Nov','Dic'], - dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], - dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], - dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['it']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ja.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ja.js deleted file mode 100644 index 4d0b63c77..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ja.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Japanese initialisation for the jQuery UI date picker plugin. */ -/* Written by Kentaro SATO (kentaro@ranvis.com). */ -jQuery(function($){ - $.datepicker.regional['ja'] = { - closeText: '閉じる', - prevText: '<前', - nextText: '次>', - currentText: '今日', - monthNames: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - monthNamesShort: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], - dayNamesShort: ['日','月','火','水','木','金','土'], - dayNamesMin: ['日','月','火','水','木','金','土'], - weekHeader: '週', - dateFormat: 'yy/mm/dd', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: '年'}; - $.datepicker.setDefaults($.datepicker.regional['ja']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ka.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ka.js deleted file mode 100644 index c10658d79..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ka.js +++ /dev/null @@ -1,21 +0,0 @@ -/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Lado Lomidze (lado.lomidze@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ka'] = { - closeText: 'დახურვა', - prevText: '< წინა', - nextText: 'შემდეგი >', - currentText: 'დღეს', - monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი', 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'], - monthNamesShort: ['იან','თებ','მარ','აპრ','მაი','ივნ', 'ივლ','აგვ','სექ','ოქტ','ნოე','დეკ'], - dayNames: ['კვირა','ორშაბათი','სამშაბათი','ოთხშაბათი','ხუთშაბათი','პარასკევი','შაბათი'], - dayNamesShort: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'], - dayNamesMin: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'], - weekHeader: 'კვირა', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ka']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-kk.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-kk.js deleted file mode 100644 index dcd6a65df..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-kk.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['kk'] = { - closeText: 'Жабу', - prevText: '<Алдыңғы', - nextText: 'Келесі>', - currentText: 'Бүгін', - monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', - 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], - monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', - 'Шіл','Там','Қыр','Қаз','Қар','Жел'], - dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], - dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], - dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], - weekHeader: 'Не', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['kk']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-km.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-km.js deleted file mode 100644 index f9c4e3a02..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-km.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Khmer initialisation for the jQuery calendar extension. */ -/* Written by Chandara Om (chandara.teacher@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['km'] = { - closeText: 'ធ្វើ​រួច', - prevText: 'មុន', - nextText: 'បន្ទាប់', - currentText: 'ថ្ងៃ​នេះ', - monthNames: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា', - 'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'], - monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា', - 'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'], - dayNames: ['អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍'], - dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'], - dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'], - weekHeader: 'សប្ដាហ៍', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['km']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ko.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ko.js deleted file mode 100644 index af36f3d6b..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ko.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Korean initialisation for the jQuery calendar extension. */ -/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */ -jQuery(function($){ - $.datepicker.regional['ko'] = { - closeText: '닫기', - prevText: '이전달', - nextText: '다음달', - currentText: '오늘', - monthNames: ['1월','2월','3월','4월','5월','6월', - '7월','8월','9월','10월','11월','12월'], - monthNamesShort: ['1월','2월','3월','4월','5월','6월', - '7월','8월','9월','10월','11월','12월'], - dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'], - dayNamesShort: ['일','월','화','수','목','금','토'], - dayNamesMin: ['일','월','화','수','목','금','토'], - weekHeader: 'Wk', - dateFormat: 'yy-mm-dd', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: '년'}; - $.datepicker.setDefaults($.datepicker.regional['ko']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ky.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ky.js deleted file mode 100644 index d4466b12e..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ky.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Sergey Kartashov (ebishkek@yandex.ru). */ -jQuery(function($){ - $.datepicker.regional['ky'] = { - closeText: 'Жабуу', - prevText: '<Мур', - nextText: 'Кий>', - currentText: 'Бүгүн', - monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', - 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', - 'Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['жекшемби', 'дүйшөмбү', 'шейшемби', 'шаршемби', 'бейшемби', 'жума', 'ишемби'], - dayNamesShort: ['жек', 'дүй', 'шей', 'шар', 'бей', 'жум', 'ише'], - dayNamesMin: ['Жк','Дш','Шш','Шр','Бш','Жм','Иш'], - weekHeader: 'Жум', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: '' - }; - $.datepicker.setDefaults($.datepicker.regional['ky']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lb.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lb.js deleted file mode 100644 index 87c79d594..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lb.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Luxembourgish initialisation for the jQuery UI date picker plugin. */ -/* Written by Michel Weimerskirch */ -jQuery(function($){ - $.datepicker.regional['lb'] = { - closeText: 'Fäerdeg', - prevText: 'Zréck', - nextText: 'Weider', - currentText: 'Haut', - monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni', - 'Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun', - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'], - dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'], - dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'], - dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'], - weekHeader: 'W', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lb']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lt.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lt.js deleted file mode 100644 index 1afaaac5d..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lt.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* @author Arturas Paleicikas */ -jQuery(function($){ - $.datepicker.regional['lt'] = { - closeText: 'Uždaryti', - prevText: '<Atgal', - nextText: 'Pirmyn>', - currentText: 'Šiandien', - monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', - 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'], - monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', - 'Lie','Rugp','Rugs','Spa','Lap','Gru'], - dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','šeštadienis'], - dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'], - dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Še'], - weekHeader: 'Wk', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lt']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lv.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lv.js deleted file mode 100644 index 28cc102fc..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-lv.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* @author Arturas Paleicikas */ -jQuery(function($){ - $.datepicker.regional['lv'] = { - closeText: 'Aizvērt', - prevText: 'Iepr', - nextText: 'Nāka', - currentText: 'Šodien', - monthNames: ['Janvāris','Februāris','Marts','Aprīlis','Maijs','Jūnijs', - 'Jūlijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','Jūn', - 'Jūl','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'], - dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], - dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], - weekHeader: 'Nav', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lv']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-mk.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-mk.js deleted file mode 100644 index 028532551..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-mk.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Macedonian i18n for the jQuery UI date picker plugin. */ -/* Written by Stojce Slavkovski. */ -jQuery(function($){ - $.datepicker.regional['mk'] = { - closeText: 'Затвори', - prevText: '<', - nextText: '>', - currentText: 'Денес', - monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни', - 'Јули','Август','Септември','Октомври','Ноември','Декември'], - monthNamesShort: ['Јан','Фев','Мар','Апр','Мај','Јун', - 'Јул','Авг','Сеп','Окт','Ное','Дек'], - dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'], - dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'], - dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'], - weekHeader: 'Сед', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['mk']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ml.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ml.js deleted file mode 100644 index 9b8f460db..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ml.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Saji Nediyanchath (saji89@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ml'] = { - closeText: 'ശരി', - prevText: 'മുന്നത്തെ', - nextText: 'അടുത്തത് ', - currentText: 'ഇന്ന്', - monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', - 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], - monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', - 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'ഡിസ'], - dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], - dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], - dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','ശ'], - weekHeader: 'ആ', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ml']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ms.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ms.js deleted file mode 100644 index e70de7299..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ms.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Malaysian initialisation for the jQuery UI date picker plugin. */ -/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ -jQuery(function($){ - $.datepicker.regional['ms'] = { - closeText: 'Tutup', - prevText: '<Sebelum', - nextText: 'Selepas>', - currentText: 'hari ini', - monthNames: ['Januari','Februari','Mac','April','Mei','Jun', - 'Julai','Ogos','September','Oktober','November','Disember'], - monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', - 'Jul','Ogo','Sep','Okt','Nov','Dis'], - dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], - dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], - dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], - weekHeader: 'Mg', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ms']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nb.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nb.js deleted file mode 100644 index 845a5052d..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nb.js +++ /dev/null @@ -1,22 +0,0 @@ -/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */ -/* Written by Bjørn Johansen (post@bjornjohansen.no). */ -jQuery(function($){ - $.datepicker.regional['nb'] = { - closeText: 'Lukk', - prevText: '«Forrige', - nextText: 'Neste»', - currentText: 'I dag', - monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], - monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], - dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], - dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], - dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], - weekHeader: 'Uke', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: '' - }; - $.datepicker.setDefaults($.datepicker.regional['nb']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nl-BE.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nl-BE.js deleted file mode 100644 index 7b3cdf425..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nl-BE.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */ -/* David De Sloovere @DavidDeSloovere */ -jQuery(function($){ - $.datepicker.regional['nl-BE'] = { - closeText: 'Sluiten', - prevText: '←', - nextText: '→', - currentText: 'Vandaag', - monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', - 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], - monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', - 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], - dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], - dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], - dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['nl-BE']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nl.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nl.js deleted file mode 100644 index 203f16069..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nl.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Mathias Bynens */ -jQuery(function($){ - $.datepicker.regional.nl = { - closeText: 'Sluiten', - prevText: '←', - nextText: '→', - currentText: 'Vandaag', - monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', - 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], - monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', - 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], - dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], - dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], - dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], - weekHeader: 'Wk', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional.nl); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nn.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nn.js deleted file mode 100644 index b55245ee6..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-nn.js +++ /dev/null @@ -1,22 +0,0 @@ -/* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */ -/* Written by Bjørn Johansen (post@bjornjohansen.no). */ -jQuery(function($){ - $.datepicker.regional['nn'] = { - closeText: 'Lukk', - prevText: '«Førre', - nextText: 'Neste»', - currentText: 'I dag', - monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], - monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], - dayNamesShort: ['sun','mån','tys','ons','tor','fre','lau'], - dayNames: ['sundag','måndag','tysdag','onsdag','torsdag','fredag','laurdag'], - dayNamesMin: ['su','må','ty','on','to','fr','la'], - weekHeader: 'Veke', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: '' - }; - $.datepicker.setDefaults($.datepicker.regional['nn']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-no.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-no.js deleted file mode 100644 index d36e430be..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-no.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Norwegian initialisation for the jQuery UI date picker plugin. */ -/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ - -jQuery(function($){ - $.datepicker.regional['no'] = { - closeText: 'Lukk', - prevText: '«Forrige', - nextText: 'Neste»', - currentText: 'I dag', - monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], - monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], - dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], - dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], - dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], - weekHeader: 'Uke', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: '' - }; - $.datepicker.setDefaults($.datepicker.regional['no']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pl.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pl.js deleted file mode 100644 index 0ffc515b9..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pl.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Polish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pl'] = { - closeText: 'Zamknij', - prevText: '<Poprzedni', - nextText: 'Następny>', - currentText: 'Dziś', - monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', - 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], - monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', - 'Lip','Sie','Wrz','Pa','Lis','Gru'], - dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], - dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], - dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], - weekHeader: 'Tydz', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pl']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pt-BR.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pt-BR.js deleted file mode 100644 index 521967ec3..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pt-BR.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Brazilian initialisation for the jQuery UI date picker plugin. */ -/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pt-BR'] = { - closeText: 'Fechar', - prevText: '<Anterior', - nextText: 'Próximo>', - currentText: 'Hoje', - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', - 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pt-BR']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pt.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pt.js deleted file mode 100644 index 999f20e3e..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-pt.js +++ /dev/null @@ -1,22 +0,0 @@ -/* Portuguese initialisation for the jQuery UI date picker plugin. */ -jQuery(function($){ - $.datepicker.regional['pt'] = { - closeText: 'Fechar', - prevText: '<Anterior', - nextText: 'Seguinte', - currentText: 'Hoje', - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', - 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - weekHeader: 'Sem', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pt']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-rm.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-rm.js deleted file mode 100644 index 22ed21685..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-rm.js +++ /dev/null @@ -1,21 +0,0 @@ -/* Romansh initialisation for the jQuery UI date picker plugin. */ -/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ -jQuery(function($){ - $.datepicker.regional['rm'] = { - closeText: 'Serrar', - prevText: '<Suandant', - nextText: 'Precedent>', - currentText: 'Actual', - monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], - monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], - dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], - dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], - dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], - weekHeader: 'emna', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['rm']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ro.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ro.js deleted file mode 100644 index a988270d7..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ro.js +++ /dev/null @@ -1,26 +0,0 @@ -/* Romanian initialisation for the jQuery UI date picker plugin. - * - * Written by Edmond L. (ll_edmond@walla.com) - * and Ionut G. Stan (ionut.g.stan@gmail.com) - */ -jQuery(function($){ - $.datepicker.regional['ro'] = { - closeText: 'Închide', - prevText: '« Luna precedentă', - nextText: 'Luna următoare »', - currentText: 'Azi', - monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', - 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], - monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', - 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], - dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], - dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], - weekHeader: 'Săpt', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ro']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ru.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ru.js deleted file mode 100644 index a51971405..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ru.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Andrew Stromnov (stromnov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ru'] = { - closeText: 'Закрыть', - prevText: '<Пред', - nextText: 'След>', - currentText: 'Сегодня', - monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', - 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', - 'Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], - dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], - dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], - weekHeader: 'Нед', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ru']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sk.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sk.js deleted file mode 100644 index 0cb76c4e8..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sk.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Slovak initialisation for the jQuery UI date picker plugin. */ -/* Written by Vojtech Rinik (vojto@hmm.sk). */ -jQuery(function($){ - $.datepicker.regional['sk'] = { - closeText: 'Zavrieť', - prevText: '<Predchádzajúci', - nextText: 'Nasledujúci>', - currentText: 'Dnes', - monthNames: ['január','február','marec','apríl','máj','jún', - 'júl','august','september','október','november','december'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', - 'Júl','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['nedeľa','pondelok','utorok','streda','štvrtok','piatok','sobota'], - dayNamesShort: ['Ned','Pon','Uto','Str','Štv','Pia','Sob'], - dayNamesMin: ['Ne','Po','Ut','St','Št','Pia','So'], - weekHeader: 'Ty', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sk']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sl.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sl.js deleted file mode 100644 index 048a47af7..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sl.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Slovenian initialisation for the jQuery UI date picker plugin. */ -/* Written by Jaka Jancar (jaka@kubje.org). */ -/* c = č, s = š z = ž C = Č S = Š Z = Ž */ -jQuery(function($){ - $.datepicker.regional['sl'] = { - closeText: 'Zapri', - prevText: '<Prejšnji', - nextText: 'Naslednji>', - currentText: 'Trenutni', - monthNames: ['Januar','Februar','Marec','April','Maj','Junij', - 'Julij','Avgust','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Avg','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], - dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], - dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], - weekHeader: 'Teden', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sl']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sq.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sq.js deleted file mode 100644 index d6086a789..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sq.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Albanian initialisation for the jQuery UI date picker plugin. */ -/* Written by Flakron Bytyqi (flakron@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['sq'] = { - closeText: 'mbylle', - prevText: '<mbrapa', - nextText: 'Përpara>', - currentText: 'sot', - monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', - 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], - monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', - 'Kor','Gus','Sht','Tet','Nën','Dhj'], - dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], - dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], - dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], - weekHeader: 'Ja', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sq']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sr-SR.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sr-SR.js deleted file mode 100644 index 810d21daa..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sr-SR.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Serbian i18n for the jQuery UI date picker plugin. */ -/* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr-SR'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Januar','Februar','Mart','April','Maj','Jun', - 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Avg','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Sed', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sr-SR']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sr.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sr.js deleted file mode 100644 index 1349a26cf..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sr.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Serbian i18n for the jQuery UI date picker plugin. */ -/* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr'] = { - closeText: 'Затвори', - prevText: '<', - nextText: '>', - currentText: 'Данас', - monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', - 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], - monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', - 'Јул','Авг','Сеп','Окт','Нов','Дец'], - dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], - dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], - dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], - weekHeader: 'Сед', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sr']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sv.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sv.js deleted file mode 100644 index cbb5ad135..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-sv.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Swedish initialisation for the jQuery UI date picker plugin. */ -/* Written by Anders Ekdahl ( anders@nomadiz.se). */ -jQuery(function($){ - $.datepicker.regional['sv'] = { - closeText: 'Stäng', - prevText: '«Förra', - nextText: 'Nästa»', - currentText: 'Idag', - monthNames: ['Januari','Februari','Mars','April','Maj','Juni', - 'Juli','Augusti','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'], - dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], - dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'], - weekHeader: 'Ve', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sv']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ta.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ta.js deleted file mode 100644 index 40431ed8e..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-ta.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by S A Sureshkumar (saskumar@live.com). */ -jQuery(function($){ - $.datepicker.regional['ta'] = { - closeText: 'மூடு', - prevText: 'முன்னையது', - nextText: 'அடுத்தது', - currentText: 'இன்று', - monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', - 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], - monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', - 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], - dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], - dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], - dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], - weekHeader: 'Не', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ta']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-th.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-th.js deleted file mode 100644 index aecfd27cc..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-th.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Thai initialisation for the jQuery UI date picker plugin. */ -/* Written by pipo (pipo@sixhead.com). */ -jQuery(function($){ - $.datepicker.regional['th'] = { - closeText: 'ปิด', - prevText: '« ย้อน', - nextText: 'ถัดไป »', - currentText: 'วันนี้', - monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', - 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], - monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', - 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], - dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], - dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['th']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-tj.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-tj.js deleted file mode 100644 index 9a20e4d37..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-tj.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Abdurahmon Saidov (saidovab@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['tj'] = { - closeText: 'Идома', - prevText: '<Қафо', - nextText: 'Пеш>', - currentText: 'Имрӯз', - monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн', - 'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', - 'Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'], - dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'], - dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'], - weekHeader: 'Хф', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['tj']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-tr.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-tr.js deleted file mode 100644 index 75b583a77..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-tr.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Turkish initialisation for the jQuery UI date picker plugin. */ -/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ -jQuery(function($){ - $.datepicker.regional['tr'] = { - closeText: 'kapat', - prevText: '<geri', - nextText: 'ileri>', - currentText: 'bugün', - monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', - 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], - monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', - 'Tem','Ağu','Eyl','Eki','Kas','Ara'], - dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], - dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - weekHeader: 'Hf', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['tr']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-uk.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-uk.js deleted file mode 100644 index 2bdc82ff7..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-uk.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ -/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['uk'] = { - closeText: 'Закрити', - prevText: '<', - nextText: '>', - currentText: 'Сьогодні', - monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', - 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], - monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', - 'Лип','Сер','Вер','Жов','Лис','Гру'], - dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], - dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], - dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], - weekHeader: 'Тиж', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['uk']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-vi.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-vi.js deleted file mode 100644 index b49e7eb13..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-vi.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Vietnamese initialisation for the jQuery UI date picker plugin. */ -/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ -jQuery(function($){ - $.datepicker.regional['vi'] = { - closeText: 'Đóng', - prevText: '<Trước', - nextText: 'Tiếp>', - currentText: 'Hôm nay', - monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', - 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], - monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', - 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], - dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], - dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], - dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], - weekHeader: 'Tu', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['vi']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-CN.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-CN.js deleted file mode 100644 index d337e4a99..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-CN.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Cloudream (cloudream@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-CN'] = { - closeText: '关闭', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: '年'}; - $.datepicker.setDefaults($.datepicker.regional['zh-CN']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-HK.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-HK.js deleted file mode 100644 index ef6f4e715..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-HK.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by SCCY (samuelcychan@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-HK'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'dd-mm-yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: '年'}; - $.datepicker.setDefaults($.datepicker.regional['zh-HK']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-TW.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-TW.js deleted file mode 100644 index b9105ea50..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-zh-TW.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Ressol (ressol@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-TW'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'yy/mm/dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: '年'}; - $.datepicker.setDefaults($.datepicker.regional['zh-TW']); -}); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.datetimepicker.js b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.datetimepicker.js new file mode 100644 index 000000000..cf7b92495 --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/js/vendor/jquery.datetimepicker.js @@ -0,0 +1,1363 @@ +/** + * @preserve jQuery DateTimePicker plugin v2.2.8 + * @homepage http://xdsoft.net/jqplugins/datetimepicker/ + * (c) 2014, Chupurnov Valeriy. + */ +(function( $ ) { + 'use strict'; + var default_options = { + i18n:{ + bg:{ // Bulgarian + months:[ + "Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември" + ], + dayOfWeek:[ + "Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" + ] + }, + fa:{ // Persian/Farsi + months:[ + 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند' + ], + dayOfWeek:[ + 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه' + ] + }, + ru:{ // Russian + months:[ + 'Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь' + ], + dayOfWeek:[ + "Вск", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" + ] + }, + en:{ // English + months: [ + "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" + ], + dayOfWeek: [ + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + ] + }, + el:{ // Ελληνικά + months: [ + "Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος" + ], + dayOfWeek: [ + "Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ" + ] + }, + de:{ // German + months:[ + 'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember' + ], + dayOfWeek:[ + "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" + ] + }, + nl:{ // Dutch + months:[ + "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december" + ], + dayOfWeek:[ + "zo", "ma", "di", "wo", "do", "vr", "za" + ] + }, + tr:{ // Turkish + months:[ + "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" + ], + dayOfWeek:[ + "Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts" + ] + }, + fr:{ //French + months:[ + "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" + ], + dayOfWeek:[ + "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam" + ] + }, + es:{ // Spanish + months: [ + "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" + ], + dayOfWeek: [ + "Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb" + ] + }, + th:{ // Thai + months:[ + 'มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน','กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม' + ], + dayOfWeek:[ + 'อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.' + ] + }, + pl:{ // Polish + months: [ + "styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień" + ], + dayOfWeek: [ + "nd", "pn", "wt", "śr", "cz", "pt", "sb" + ] + }, + pt:{ // Portuguese + months: [ + "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" + ], + dayOfWeek: [ + "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab" + ] + }, + ch:{ // Simplified Chinese + months: [ + "一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月" + ], + dayOfWeek: [ + "日", "一","二","三","四","五","六" + ] + }, + se:{ // Swedish + months: [ + "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September","Oktober", "November", "December" + ], + dayOfWeek: [ + "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör" + ] + }, + kr:{ // Korean + months: [ + "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월" + ], + dayOfWeek: [ + "일", "월", "화", "수", "목", "금", "토" + ] + }, + it:{ // Italian + months: [ + "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" + ], + dayOfWeek: [ + "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab" + ] + }, + da:{ // Dansk + months: [ + "January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Søn", "Man", "Tir", "ons", "Tor", "Fre", "lør" + ] + }, + ja:{ // Japanese + months: [ + "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" + ], + dayOfWeek: [ + "日", "月", "火", "水", "木", "金", "土" + ] + }, + vi:{ // Vietnamese + months: [ + "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12" + ], + dayOfWeek: [ + "CN", "T2", "T3", "T4", "T5", "T6", "T7" + ] + }, + sl:{ // Slovenščina + months: [ + "Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December" + ], + dayOfWeek: [ + "Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob" + ] + } + }, + value:'', + lang:'en', + + format: 'Y/m/d H:i', + formatTime: 'H:i', + formatDate: 'Y/m/d', + + startDate: false, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05', + + step:60, + monthChangeSpinner:true, + closeOnDateSelect:false, + closeOnWithoutClick:true, + + timepicker:true, + datepicker:true, + + minDate:false, + maxDate:false, + minTime:false, + maxTime:false, + + allowTimes:[], + opened:false, + initTime:true, + inline:false, + + onSelectDate:function() {}, + onSelectTime:function() {}, + onChangeMonth:function() {}, + onChangeDateTime:function() {}, + onShow:function() {}, + onClose:function() {}, + onGenerate:function() {}, + + withoutCopyright:true, + + inverseButton:false, + hours12:false, + next: 'xdsoft_next', + prev : 'xdsoft_prev', + dayOfWeekStart:0, + + timeHeightInTimePicker:25, + timepickerScrollbar:true, + + todayButton:true, // 2.1.0 + defaultSelect:true, // 2.1.0 + + scrollMonth:true, + scrollTime:true, + scrollInput:true, + + lazyInit:false, + + mask:false, + validateOnBlur:true, + allowBlank:true, + + yearStart:1950, + yearEnd:2050, + + style:'', + id:'', + + fixed: false, + + roundTime:'round', // ceil, floor + className:'', + + weekends : [], + yearOffset:0 + }; + + // fix for ie8 + if ( !Array.prototype.indexOf ) { + Array.prototype.indexOf = function(obj, start) { + for (var i = (start || 0), j = this.length; i < j; i++) { + if (this[i] === obj) { return i; } + } + return -1; + } + }; + + Date.prototype.countDaysInMonth = function(){ + return new Date(this.getFullYear(), this.getMonth()+1, 0).getDate(); + }; + + $.fn.xdsoftScroller = function( _percent ) { + return this.each(function() { + var timeboxparent = $(this); + if( !$(this).hasClass('xdsoft_scroller_box') ) { + var pointerEventToXY = function( e ) { + var out = {x:0, y:0}; + if( e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel' ) { + var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; + out.x = touch.pageX; + out.y = touch.pageY; + }else if (e.type == 'mousedown' || e.type == 'mouseup' || e.type == 'mousemove' || e.type == 'mouseover'|| e.type=='mouseout' || e.type=='mouseenter' || e.type=='mouseleave') { + out.x = e.pageX; + out.y = e.pageY; + } + return out; + }, + move = 0, + timebox = timeboxparent.children().eq(0), + parentHeight = timeboxparent[0].clientHeight, + height = timebox[0].offsetHeight, + scrollbar = $('
'), + scroller = $('
'), + maximumOffset = 100, + start = false; + + scrollbar.append(scroller); + + timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar); + scroller.on('mousedown.xdsoft_scroller',function ( event ) { + if( !parentHeight ) + timeboxparent.trigger('resize_scroll.xdsoft_scroller',[_percent]); + var pageY = event.pageY, + top = parseInt(scroller.css('margin-top')), + h1 = scrollbar[0].offsetHeight; + $(document.body).addClass('xdsoft_noselect'); + $([document.body,window]).on('mouseup.xdsoft_scroller',function arguments_callee() { + $([document.body,window]).off('mouseup.xdsoft_scroller',arguments_callee) + .off('mousemove.xdsoft_scroller',move) + .removeClass('xdsoft_noselect'); + }); + $(document.body).on('mousemove.xdsoft_scroller',move = function(event) { + var offset = event.pageY-pageY+top; + if( offset<0 ) + offset = 0; + if( offset+scroller[0].offsetHeight>h1 ) + offset = h1-scroller[0].offsetHeight; + timeboxparent.trigger('scroll_element.xdsoft_scroller',[maximumOffset?offset/maximumOffset:0]); + }); + }); + + timeboxparent + .on('scroll_element.xdsoft_scroller',function( event,percent ) { + if( !parentHeight ) + timeboxparent.trigger('resize_scroll.xdsoft_scroller',[percent,true]); + percent = percent>1?1:(percent<0||isNaN(percent))?0:percent; + scroller.css('margin-top',maximumOffset*percent); + timebox.css('marginTop',-parseInt((height-parentHeight)*percent)) + }) + .on('resize_scroll.xdsoft_scroller',function( event,_percent,noTriggerScroll ) { + parentHeight = timeboxparent[0].clientHeight; + height = timebox[0].offsetHeight; + var percent = parentHeight/height, + sh = percent*scrollbar[0].offsetHeight; + if( percent>1 ) + scroller.hide(); + else{ + scroller.show(); + scroller.css('height',parseInt(sh>10?sh:10)); + maximumOffset = scrollbar[0].offsetHeight-scroller[0].offsetHeight; + if( noTriggerScroll!==true ) + timeboxparent.trigger('scroll_element.xdsoft_scroller',[_percent?_percent:Math.abs(parseInt(timebox.css('marginTop')))/(height-parentHeight)]); + } + }); + timeboxparent.mousewheel&&timeboxparent.mousewheel(function(event, delta, deltaX, deltaY) { + var top = Math.abs(parseInt(timebox.css('marginTop'))); + timeboxparent.trigger('scroll_element.xdsoft_scroller',[(top-delta*20)/(height-parentHeight)]); + event.stopPropagation(); + return false; + }); + timeboxparent.on('touchstart',function( event ) { + start = pointerEventToXY(event); + }); + timeboxparent.on('touchmove',function( event ) { + if( start ) { + var coord = pointerEventToXY(event), top = Math.abs(parseInt(timebox.css('marginTop'))); + timeboxparent.trigger('scroll_element.xdsoft_scroller',[(top-(coord.y-start.y))/(height-parentHeight)]); + event.stopPropagation(); + event.preventDefault(); + }; + }); + timeboxparent.on('touchend touchcancel',function( event ) { + start = false; + }); + } + timeboxparent.trigger('resize_scroll.xdsoft_scroller',[_percent]); + }); + }; + $.fn.datetimepicker = function( opt ) { + var KEY0 = 48, + KEY9 = 57, + _KEY0 = 96, + _KEY9 = 105, + CTRLKEY = 17, + DEL = 46, + ENTER = 13, + ESC = 27, + BACKSPACE = 8, + ARROWLEFT = 37, + ARROWUP = 38, + ARROWRIGHT = 39, + ARROWDOWN = 40, + TAB = 9, + F5 = 116, + AKEY = 65, + CKEY = 67, + VKEY = 86, + ZKEY = 90, + YKEY = 89, + ctrlDown = false, + options = ($.isPlainObject(opt)||!opt)?$.extend(true,{},default_options,opt):$.extend({},default_options), + + lazyInitTimer = 0, + + lazyInit = function( input ){ + input + .on('open.xdsoft focusin.xdsoft mousedown.xdsoft',function initOnActionCallback(event) { + if( input.is(':disabled')||input.is(':hidden')||!input.is(':visible')||input.data( 'xdsoft_datetimepicker') ) + return; + + clearTimeout(lazyInitTimer); + + lazyInitTimer = setTimeout(function() { + + if( !input.data( 'xdsoft_datetimepicker') ) + createDateTimePicker(input); + + input + .off('open.xdsoft focusin.xdsoft mousedown.xdsoft',initOnActionCallback) + .trigger('open.xdsoft'); + },100); + + }); + }, + + createDateTimePicker = function( input ) { + + var datetimepicker = $('
'), + xdsoft_copyright = $(''), + datepicker = $('
'), + mounth_picker = $('
'), + calendar = $('
'), + timepicker = $('
'), + timeboxparent = timepicker.find('.xdsoft_time_box').eq(0), + timebox = $('
'), + scrollbar = $('
'), + scroller = $('
'), + monthselect =$('
'), + yearselect =$('
'); + + //constructor lego + mounth_picker + .find('.xdsoft_month span') + .after(monthselect); + mounth_picker + .find('.xdsoft_year span') + .after(yearselect); + + mounth_picker + .find('.xdsoft_month,.xdsoft_year') + .on('mousedown.xdsoft',function(event) { + mounth_picker + .find('.xdsoft_select') + .hide(); + + var select = $(this).find('.xdsoft_select').eq(0), + val = 0, + top = 0; + + if( _xdsoft_datetime.currentTime ) + val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month')?'getMonth':'getFullYear'](); + + select.show(); + + for(var items = select.find('div.xdsoft_option'),i = 0;i6 ) + options.dayOfWeekStart = 0; + else + options.dayOfWeekStart = parseInt(options.dayOfWeekStart); + + if( !options.timepickerScrollbar ) + scrollbar.hide(); + + if( options.minDate && /^-(.*)$/.test(options.minDate) ){ + options.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat( options.formatDate ); + } + + if( options.maxDate && /^\+(.*)$/.test(options.maxDate) ) { + options.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat( options.formatDate ); + } + + mounth_picker + .find('.xdsoft_today_button') + .css('visibility',!options.todayButton?'hidden':'visible'); + + if( options.mask ) { + var e, + getCaretPos = function ( input ) { + try{ + if ( document.selection && document.selection.createRange ) { + var range = document.selection.createRange(); + return range.getBookmark().charCodeAt(2) - 2; + }else + if ( input.setSelectionRange ) + return input.selectionStart; + }catch(e) { + return 0; + } + }, + setCaretPos = function ( node,pos ) { + var node = (typeof node == "string" || node instanceof String) ? document.getElementById(node) : node; + if(!node) { + return false; + }else if(node.createTextRange) { + var textRange = node.createTextRange(); + textRange.collapse(true); + textRange.moveEnd(pos); + textRange.moveStart(pos); + textRange.select(); + return true; + }else if(node.setSelectionRange) { + node.setSelectionRange(pos,pos); + return true; + } + return false; + }, + isValidValue = function ( mask,value ) { + var reg = mask + .replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g,'\\$1') + .replace(/_/g,'{digit+}') + .replace(/([0-9]{1})/g,'{digit$1}') + .replace(/\{digit([0-9]{1})\}/g,'[0-$1_]{1}') + .replace(/\{digit[\+]\}/g,'[0-9_]{1}'); + return RegExp(reg).test(value); + }; + input.off('keydown.xdsoft'); + switch(true) { + case ( options.mask===true ): + + options.mask = options.format + .replace(/Y/g,'9999') + .replace(/F/g,'9999') + .replace(/m/g,'19') + .replace(/d/g,'39') + .replace(/H/g,'29') + .replace(/i/g,'59') + .replace(/s/g,'59'); + + case ( $.type(options.mask) == 'string' ): + + if( !isValidValue( options.mask,input.val() ) ) + input.val(options.mask.replace(/[0-9]/g,'_')); + + input.on('keydown.xdsoft',function( event ) { + var val = this.value, + key = event.which; + + switch(true) { + case (( key>=KEY0&&key<=KEY9 )||( key>=_KEY0&&key<=_KEY9 ))||(key==BACKSPACE||key==DEL): + var pos = getCaretPos(this), + digit = ( key!=BACKSPACE&&key!=DEL )?String.fromCharCode((_KEY0 <= key && key <= _KEY9)? key-KEY0 : key):'_'; + + if( (key==BACKSPACE||key==DEL)&&pos ) { + pos--; + digit='_'; + } + + while( /[^0-9_]/.test(options.mask.substr(pos,1))&&pos0 ) + pos+=( key==BACKSPACE||key==DEL )?-1:1; + + val = val.substr(0,pos)+digit+val.substr(pos+1); + if( $.trim(val)=='' ){ + val = options.mask.replace(/[0-9]/g,'_'); + }else{ + if( pos==options.mask.length ) + break; + } + + pos+=(key==BACKSPACE||key==DEL)?0:1; + while( /[^0-9_]/.test(options.mask.substr(pos,1))&&pos0 ) + pos+=(key==BACKSPACE||key==DEL)?-1:1; + + if( isValidValue( options.mask,val ) ) { + this.value = val; + setCaretPos(this,pos); + }else if( $.trim(val)=='' ) + this.value = options.mask.replace(/[0-9]/g,'_'); + else{ + input.trigger('error_input.xdsoft'); + } + break; + case ( !!~([AKEY,CKEY,VKEY,ZKEY,YKEY].indexOf(key))&&ctrlDown ): + case !!~([ESC,ARROWUP,ARROWDOWN,ARROWLEFT,ARROWRIGHT,F5,CTRLKEY,TAB,ENTER].indexOf(key)): + return true; + } + event.preventDefault(); + return false; + }); + break; + } + } + if( options.validateOnBlur ) { + input + .off('blur.xdsoft') + .on('blur.xdsoft', function() { + if( options.allowBlank && !$.trim($(this).val()).length ) { + $(this).val(null); + datetimepicker.data('xdsoft_datetime').empty(); + }else if( !Date.parseDate( $(this).val(), options.format ) ) { + $(this).val((_xdsoft_datetime.now()).dateFormat( options.format )); + datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val()); + } + else{ + datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val()); + } + datetimepicker.trigger('changedatetime.xdsoft'); + }); + } + options.dayOfWeekStartPrev = (options.dayOfWeekStart==0)?6:options.dayOfWeekStart-1; + + datetimepicker + .trigger('xchange.xdsoft') + .trigger('afterOpen.xdsoft') + }; + + datetimepicker + .data('options',options) + .on('mousedown.xdsoft',function( event ) { + event.stopPropagation(); + event.preventDefault(); + yearselect.hide(); + monthselect.hide(); + return false; + }); + + var scroll_element = timepicker.find('.xdsoft_time_box'); + scroll_element.append(timebox); + scroll_element.xdsoftScroller(); + + datetimepicker.on('afterOpen.xdsoft',function() { + scroll_element.xdsoftScroller(); + }); + + datetimepicker + .append(datepicker) + .append(timepicker); + + if( options.withoutCopyright!==true ) + datetimepicker + .append(xdsoft_copyright); + + datepicker + .append(mounth_picker) + .append(calendar); + + $('body').append(datetimepicker); + + var _xdsoft_datetime = new function() { + var _this = this; + _this.now = function() { + var d = new Date(); + if( options.yearOffset ) + d.setFullYear(d.getFullYear()+options.yearOffset); + return d; + }; + + _this.currentTime = this.now(); + _this.isValidDate = function (d) { + if ( Object.prototype.toString.call(d) !== "[object Date]" ) + return false; + return !isNaN(d.getTime()); + }; + + _this.setCurrentTime = function( dTime) { + _this.currentTime = (typeof dTime == 'string')? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime: _this.now(); + datetimepicker.trigger('xchange.xdsoft'); + }; + + _this.empty = function() { + _this.currentTime = null; + }; + + _this.getCurrentTime = function( dTime) { + return _this.currentTime; + }; + + _this.nextMonth = function() { + var month = _this.currentTime.getMonth()+1; + if( month==12 ) { + _this.currentTime.setFullYear(_this.currentTime.getFullYear()+1); + month = 0; + } + _this.currentTime.setDate( + Math.min( + Date.daysInMonth[month], + _this.currentTime.getDate() + ) + ); + _this.currentTime.setMonth(month); + options.onChangeMonth&&options.onChangeMonth.call&&options.onChangeMonth.call(datetimepicker,_xdsoft_datetime.currentTime,datetimepicker.data('input')); + datetimepicker.trigger('xchange.xdsoft'); + return month; + }; + + _this.prevMonth = function() { + var month = _this.currentTime.getMonth()-1; + if( month==-1 ) { + _this.currentTime.setFullYear(_this.currentTime.getFullYear()-1); + month = 11; + } + _this.currentTime.setDate( + Math.min( + Date.daysInMonth[month], + _this.currentTime.getDate() + ) + ); + _this.currentTime.setMonth(month); + options.onChangeMonth&&options.onChangeMonth.call&&options.onChangeMonth.call(datetimepicker,_xdsoft_datetime.currentTime,datetimepicker.data('input')); + datetimepicker.trigger('xchange.xdsoft'); + return month; + }; + + _this.strToDateTime = function( sDateTime ) { + var tmpDate = [],timeOffset,currentTime; + + if( ( tmpDate = /^(\+|\-)(.*)$/.exec(sDateTime) ) && ( tmpDate[2]=Date.parseDate(tmpDate[2], options.formatDate) ) ) { + timeOffset = tmpDate[2].getTime()-(tmpDate[2].getTimezoneOffset())*60000; + currentTime = new Date((_xdsoft_datetime.now()).getTime()+parseInt(tmpDate[1]+'1')*timeOffset); + }else + currentTime = sDateTime?Date.parseDate(sDateTime, options.format):_this.now(); + + if( !_this.isValidDate(currentTime) ) + currentTime = _this.now(); + + return currentTime; + }; + + _this.strtodate = function( sDate ) { + var currentTime = sDate?Date.parseDate(sDate, options.formatDate):_this.now(); + if( !_this.isValidDate(currentTime) ) + currentTime = _this.now(); + return currentTime; + }; + + _this.strtotime = function( sTime ) { + var currentTime = sTime?Date.parseDate(sTime, options.formatTime):_this.now(); + if( !_this.isValidDate(currentTime) ) + currentTime = _this.now(); + return currentTime; + }; + + _this.str = function() { + return _this.currentTime.dateFormat(options.format); + }; + }; + mounth_picker + .find('.xdsoft_today_button') + .on('mousedown.xdsoft',function() { + datetimepicker.data('changed',true); + _xdsoft_datetime.setCurrentTime(0); + datetimepicker.trigger('afterOpen.xdsoft'); + }).on('dblclick.xdsoft',function(){ + input.val( _xdsoft_datetime.str() ); + datetimepicker.trigger('close.xdsoft'); + }); + mounth_picker + .find('.xdsoft_prev,.xdsoft_next') + .on('mousedown.xdsoft',function() { + var $this = $(this), + timer = 0, + stop = false; + + (function arguments_callee1(v) { + var month = _xdsoft_datetime.currentTime.getMonth(); + if( $this.hasClass( options.next ) ) { + _xdsoft_datetime.nextMonth(); + }else if( $this.hasClass( options.prev ) ) { + _xdsoft_datetime.prevMonth(); + } + if (options.monthChangeSpinner) { + !stop&&(timer = setTimeout(arguments_callee1,v?v:100)); + } + })(500); + + $([document.body,window]).on('mouseup.xdsoft',function arguments_callee2() { + clearTimeout(timer); + stop = true; + $([document.body,window]).off('mouseup.xdsoft',arguments_callee2); + }); + }); + + timepicker + .find('.xdsoft_prev,.xdsoft_next') + .on('mousedown.xdsoft',function() { + var $this = $(this), + timer = 0, + stop = false, + period = 110; + (function arguments_callee4(v) { + var pheight = timeboxparent[0].clientHeight, + height = timebox[0].offsetHeight, + top = Math.abs(parseInt(timebox.css('marginTop'))); + if( $this.hasClass(options.next) && (height-pheight)- options.timeHeightInTimePicker>=top ) { + timebox.css('marginTop','-'+(top+options.timeHeightInTimePicker)+'px') + }else if( $this.hasClass(options.prev) && top-options.timeHeightInTimePicker>=0 ) { + timebox.css('marginTop','-'+(top-options.timeHeightInTimePicker)+'px') + } + timeboxparent.trigger('scroll_element.xdsoft_scroller',[Math.abs(parseInt(timebox.css('marginTop'))/(height-pheight))]); + period= ( period>10 )?10:period-10; + !stop&&(timer = setTimeout(arguments_callee4,v?v:period)); + })(500); + $([document.body,window]).on('mouseup.xdsoft',function arguments_callee5() { + clearTimeout(timer); + stop = true; + $([document.body,window]) + .off('mouseup.xdsoft',arguments_callee5); + }); + }); + + var xchangeTimer = 0; + // base handler - generating a calendar and timepicker + datetimepicker + .on('xchange.xdsoft',function( event ) { + clearTimeout(xchangeTimer); + xchangeTimer = setTimeout(function(){ + var table = '', + start = new Date(_xdsoft_datetime.currentTime.getFullYear(),_xdsoft_datetime.currentTime.getMonth(),1, 12, 0, 0), + i = 0, + today = _xdsoft_datetime.now(); + + while( start.getDay()!=options.dayOfWeekStart ) + start.setDate(start.getDate()-1); + + //generate calendar + table+=''; + + // days + for(var j = 0; j<7; j++) { + table+=''; + } + + table+=''; + table+=''; + var maxDate = false, minDate = false; + + if( options.maxDate!==false ) { + maxDate = _xdsoft_datetime.strtodate(options.maxDate); + maxDate = new Date(maxDate.getFullYear(),maxDate.getMonth(),maxDate.getDate(),23,59,59,999); + } + + if( options.minDate!==false ) { + minDate = _xdsoft_datetime.strtodate(options.minDate); + minDate = new Date(minDate.getFullYear(),minDate.getMonth(),minDate.getDate()); + } + + var d,y,m,classes = []; + + while( i<_xdsoft_datetime.currentTime.countDaysInMonth()||start.getDay()!=options.dayOfWeekStart||_xdsoft_datetime.currentTime.getMonth()==start.getMonth() ) { + classes = []; + i++; + + d = start.getDate(); y = start.getFullYear(); m = start.getMonth(); + + classes.push('xdsoft_date'); + + if( ( maxDate!==false && start > maxDate )||( minDate!==false && start < minDate ) ){ + classes.push('xdsoft_disabled'); + } + + if( _xdsoft_datetime.currentTime.getMonth()!=m ){ + classes.push('xdsoft_other_month'); + } + + if( (options.defaultSelect||datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat( options.formatDate )==start.dateFormat( options.formatDate ) ) { + classes.push('xdsoft_current'); + } + + if( today.dateFormat( options.formatDate )==start.dateFormat( options.formatDate ) ) { + classes.push('xdsoft_today'); + } + + if( start.getDay()==0||start.getDay()==6||~options.weekends.indexOf(start.dateFormat( options.formatDate )) ) { + classes.push('xdsoft_weekend'); + } + + if(options.beforeShowDay && typeof options.beforeShowDay == 'function') + { + classes.push(options.beforeShowDay(start)) + } + + table+=''; + + if( start.getDay()==options.dayOfWeekStartPrev ) { + table+=''; + } + + start.setDate(d+1); + } + table+='
'+options.i18n[options.lang].dayOfWeek[(j+options.dayOfWeekStart)>6?0:j+options.dayOfWeekStart]+'
'+ + '
'+d+'
'+ + '
'; + + calendar.html(table); + + mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]); + mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear()); + + // generate timebox + var time = '', + h = '', + m ='', + line_time = function line_time( h,m ) { + var now = _xdsoft_datetime.now(); + now.setHours(h); + h = parseInt(now.getHours()); + now.setMinutes(m); + m = parseInt(now.getMinutes()); + + classes = []; + if( (options.maxTime!==false&&_xdsoft_datetime.strtotime(options.maxTime).getTime()now.getTime())) + classes.push('xdsoft_disabled'); + if( (options.initTime||options.defaultSelect||datetimepicker.data('changed')) && parseInt(_xdsoft_datetime.currentTime.getHours())==parseInt(h)&&(options.step>59||Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes()/options.step)*options.step==parseInt(m))) { + if( options.defaultSelect||datetimepicker.data('changed')) { + classes.push('xdsoft_current'); + } else if( options.initTime ) { + classes.push('xdsoft_init_time'); + } + } + if( parseInt(today.getHours())==parseInt(h)&&parseInt(today.getMinutes())==parseInt(m)) + classes.push('xdsoft_today'); + time+= '
'+now.dateFormat(options.formatTime)+'
'; + }; + + if( !options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length ) { + for( var i=0,j=0;i<(options.hours12?12:24);i++ ) { + for( j=0;j<60;j+=options.step ) { + h = (i<10?'0':'')+i; + m = (j<10?'0':'')+j; + line_time( h,m ); + } + } + }else{ + for( var i=0;i'+i+''; + } + yearselect.children().eq(0) + .html(opt); + + for( i = 0,opt = '';i<= 11;i++ ) { + opt+='
'+options.i18n[options.lang].months[i]+'
'; + } + monthselect.children().eq(0).html(opt); + $(datetimepicker) + .trigger('generate.xdsoft'); + },10); + event.stopPropagation(); + }) + .on('afterOpen.xdsoft',function() { + if( options.timepicker ) { + var classType; + if( timebox.find('.xdsoft_current').length ) { + classType = '.xdsoft_current'; + } else if( timebox.find('.xdsoft_init_time').length ) { + classType = '.xdsoft_init_time'; + } + + if( classType ) { + var pheight = timeboxparent[0].clientHeight, + height = timebox[0].offsetHeight, + top = timebox.find(classType).index()*options.timeHeightInTimePicker+1; + if( (height-pheight)1||(options.closeOnDateSelect===true||( options.closeOnDateSelect===0&&!options.timepicker )))&&!options.inline ) { + datetimepicker.trigger('close.xdsoft'); + } + + if( options.onSelectDate && options.onSelectDate.call ) { + options.onSelectDate.call(datetimepicker,_xdsoft_datetime.currentTime,datetimepicker.data('input')); + } + + datetimepicker.data('changed',true); + datetimepicker.trigger('xchange.xdsoft'); + datetimepicker.trigger('changedatetime.xdsoft'); + setTimeout(function(){ + timerclick = 0; + },200); + }); + + timebox + .on('click.xdsoft', 'div', function (xdevent) { + xdevent.stopPropagation(); // NAJ: Prevents closing of Pop-ups, Modals and Flyouts + var $this = $(this), + currentTime = _xdsoft_datetime.currentTime; + if( $this.hasClass('xdsoft_disabled') ) + return false; + currentTime.setHours($this.data('hour')); + currentTime.setMinutes($this.data('minute')); + datetimepicker.trigger('select.xdsoft',[currentTime]); + + datetimepicker.data('input').val( _xdsoft_datetime.str() ); + + !options.inline&&datetimepicker.trigger('close.xdsoft'); + + if( options.onSelectTime&&options.onSelectTime.call ) { + options.onSelectTime.call(datetimepicker,_xdsoft_datetime.currentTime,datetimepicker.data('input')); + } + datetimepicker.data('changed',true); + datetimepicker.trigger('xchange.xdsoft'); + datetimepicker.trigger('changedatetime.xdsoft'); + }); + + datetimepicker.mousewheel&&datepicker.mousewheel(function(event, delta, deltaX, deltaY) { + if( !options.scrollMonth ) + return true; + if( delta<0 ) + _xdsoft_datetime.nextMonth(); + else + _xdsoft_datetime.prevMonth(); + return false; + }); + + datetimepicker.mousewheel&&timeboxparent.unmousewheel().mousewheel(function(event, delta, deltaX, deltaY) { + if( !options.scrollTime ) + return true; + var pheight = timeboxparent[0].clientHeight, + height = timebox[0].offsetHeight, + top = Math.abs(parseInt(timebox.css('marginTop'))), + fl = true; + if( delta<0 && (height-pheight)-options.timeHeightInTimePicker>=top ) { + timebox.css('marginTop','-'+(top+options.timeHeightInTimePicker)+'px'); + fl = false; + }else if( delta>0&&top-options.timeHeightInTimePicker>=0 ) { + timebox.css('marginTop','-'+(top-options.timeHeightInTimePicker)+'px'); + fl = false; + } + timeboxparent.trigger('scroll_element.xdsoft_scroller',[Math.abs(parseInt(timebox.css('marginTop'))/(height-pheight))]); + event.stopPropagation(); + return fl; + }); + + var triggerAfterOpen = false; + datetimepicker + .on('changedatetime.xdsoft',function() { + if( options.onChangeDateTime&&options.onChangeDateTime.call ) { + var $input = datetimepicker.data('input'); + options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input); + $input.trigger('change'); + } + }) + .on('generate.xdsoft',function() { + if( options.onGenerate&&options.onGenerate.call ) + options.onGenerate.call(datetimepicker,_xdsoft_datetime.currentTime,datetimepicker.data('input')); + if( triggerAfterOpen ){ + datetimepicker.trigger('afterOpen.xdsoft'); + triggerAfterOpen = false; + } + }) + .on( 'click.xdsoft', function( xdevent ) + { + xdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap + }); + + var current_time_index = 0; + input.mousewheel&&input.mousewheel(function( event, delta, deltaX, deltaY ) { + if( !options.scrollInput ) + return true; + if( !options.datepicker && options.timepicker ) { + current_time_index = timebox.find('.xdsoft_current').length?timebox.find('.xdsoft_current').eq(0).index():0; + if( current_time_index+delta>=0&¤t_time_index+delta$(window).height()+$(window).scrollTop() ) + top = offset.top-datetimepicker[0].offsetHeight+1; + if (top < 0) + top = 0; + if( left+datetimepicker[0].offsetWidth>$(window).width() ) + left = offset.left-datetimepicker[0].offsetWidth+datetimepicker.data('input')[0].offsetWidth; + } + datetimepicker.css({ + left:left, + top:top, + position: position + }); + }; + datetimepicker + .on('open.xdsoft', function() { + var onShow = true; + if( options.onShow&&options.onShow.call) { + onShow = options.onShow.call(datetimepicker,_xdsoft_datetime.currentTime,datetimepicker.data('input')); + } + if( onShow!==false ) { + datetimepicker.show(); + setPos(); + $(window) + .off('resize.xdsoft',setPos) + .on('resize.xdsoft',setPos); + + if( options.closeOnWithoutClick ) { + $([document.body,window]).on('mousedown.xdsoft',function arguments_callee6() { + datetimepicker.trigger('close.xdsoft'); + $([document.body,window]).off('mousedown.xdsoft',arguments_callee6); + }); + } + } + }) + .on('close.xdsoft', function( event ) { + var onClose = true; + if( options.onClose&&options.onClose.call ) { + onClose=options.onClose.call(datetimepicker,_xdsoft_datetime.currentTime,datetimepicker.data('input')); + } + if( onClose!==false&&!options.opened&&!options.inline ) { + datetimepicker.hide(); + } + event.stopPropagation(); + }) + .data('input',input); + + var timer = 0, + timer1 = 0; + + datetimepicker.data('xdsoft_datetime',_xdsoft_datetime); + datetimepicker.setOptions(options); + + function getCurrentValue(){ + var ct = options.value?options.value:(input&&input.val&&input.val())?input.val():''; + + if( ct && _xdsoft_datetime.isValidDate(ct = Date.parseDate(ct, options.format)) ) { + datetimepicker.data('changed',true); + }else + ct = ''; + + if( !ct && options.startDate!==false ){ + ct = _xdsoft_datetime.strToDateTime(options.startDate); + } + + return ct?ct:0; + } + + _xdsoft_datetime.setCurrentTime( getCurrentValue() ); + + input + .data( 'xdsoft_datetimepicker',datetimepicker ) + .on('open.xdsoft focusin.xdsoft mousedown.xdsoft',function(event) { + if( input.is(':disabled')||input.is(':hidden')||!input.is(':visible') ) + return; + clearTimeout(timer); + timer = setTimeout(function() { + if( input.is(':disabled')||input.is(':hidden')||!input.is(':visible') ) + return; + + triggerAfterOpen = true; + _xdsoft_datetime.setCurrentTime(getCurrentValue()); + + datetimepicker.trigger('open.xdsoft'); + },100); + }) + .on('keydown.xdsoft',function( event ) { + var val = this.value, + key = event.which; + switch(true) { + case !!~([ENTER].indexOf(key)): + var elementSelector = $("input:visible,textarea:visible"); + datetimepicker.trigger('close.xdsoft'); + elementSelector.eq(elementSelector.index(this) + 1).focus(); + return false; + case !!~[TAB].indexOf(key): + datetimepicker.trigger('close.xdsoft'); + return true; + } + }); + }, + destroyDateTimePicker = function( input ) { + var datetimepicker = input.data('xdsoft_datetimepicker'); + if( datetimepicker ) { + datetimepicker.data('xdsoft_datetime',null); + datetimepicker.remove(); + input + .data( 'xdsoft_datetimepicker',null ) + .off( 'open.xdsoft focusin.xdsoft focusout.xdsoft mousedown.xdsoft blur.xdsoft keydown.xdsoft' ); + $(window).off('resize.xdsoft'); + $([window,document.body]).off('mousedown.xdsoft'); + input.unmousewheel&&input.unmousewheel(); + } + }; + $(document) + .off('keydown.xdsoftctrl keyup.xdsoftctrl') + .on('keydown.xdsoftctrl',function(e) { + if ( e.keyCode == CTRLKEY ) + ctrlDown = true; + }) + .on('keyup.xdsoftctrl',function(e) { + if ( e.keyCode == CTRLKEY ) + ctrlDown = false; + }); + return this.each(function() { + var datetimepicker; + if( datetimepicker = $(this).data('xdsoft_datetimepicker') ) { + if( $.type(opt) === 'string' ) { + switch(opt) { + case 'show': + $(this).select().focus(); + datetimepicker.trigger( 'open.xdsoft' ); + break; + case 'hide': + datetimepicker.trigger('close.xdsoft'); + break; + case 'destroy': + destroyDateTimePicker($(this)); + break; + case 'reset': + this.value = this.defaultValue; + if(!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) + datetimepicker.data('changed',false); + datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value); + break; + } + }else{ + datetimepicker + .setOptions(opt); + } + return 0; + }else + if( ($.type(opt) !== 'string') ){ + if( !options.lazyInit||options.open||options.inline ){ + createDateTimePicker($(this)); + }else + lazyInit($(this)); + } + }); + }; + $.fn.datetimepicker.defaults = default_options; +})( jQuery ); + +/* + * Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net) + * + * Licensed under the MIT License (LICENSE.txt). + * + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.1.3 + * + * Requires: 1.2.2+ + */ +(function(factory) {if(typeof define==='function'&&define.amd) {define(['jquery'],factory)}else if(typeof exports==='object') {module.exports=factory}else{factory(jQuery)}}(function($) {var toFix=['wheel','mousewheel','DOMMouseScroll','MozMousePixelScroll'];var toBind='onwheel'in document||document.documentMode>=9?['wheel']:['mousewheel','DomMouseScroll','MozMousePixelScroll'];var lowestDelta,lowestDeltaXY;if($.event.fixHooks) {for(var i=toFix.length;i;) {$.event.fixHooks[toFix[--i]]=$.event.mouseHooks}}$.event.special.mousewheel={setup:function() {if(this.addEventListener) {for(var i=toBind.length;i;) {this.addEventListener(toBind[--i],handler,false)}}else{this.onmousewheel=handler}},teardown:function() {if(this.removeEventListener) {for(var i=toBind.length;i;) {this.removeEventListener(toBind[--i],handler,false)}}else{this.onmousewheel=null}}};$.fn.extend({mousewheel:function(fn) {return fn?this.bind("mousewheel",fn):this.trigger("mousewheel")},unmousewheel:function(fn) {return this.unbind("mousewheel",fn)}});function handler(event) {var orgEvent=event||window.event,args=[].slice.call(arguments,1),delta=0,deltaX=0,deltaY=0,absDelta=0,absDeltaXY=0,fn;event=$.event.fix(orgEvent);event.type="mousewheel";if(orgEvent.wheelDelta) {delta=orgEvent.wheelDelta}if(orgEvent.detail) {delta=orgEvent.detail*-1}if(orgEvent.deltaY) {deltaY=orgEvent.deltaY*-1;delta=deltaY}if(orgEvent.deltaX) {deltaX=orgEvent.deltaX;delta=deltaX*-1}if(orgEvent.wheelDeltaY!==undefined) {deltaY=orgEvent.wheelDeltaY}if(orgEvent.wheelDeltaX!==undefined) {deltaX=orgEvent.wheelDeltaX*-1}absDelta=Math.abs(delta);if(!lowestDelta||absDelta0?'floor':'ceil';delta=Math[fn](delta/lowestDelta);deltaX=Math[fn](deltaX/lowestDeltaXY);deltaY=Math[fn](deltaY/lowestDeltaXY);args.unshift(event,delta,deltaX,deltaY);return($.event.dispatch||$.event.handle).apply(this,args)}})); + + +// Parse and Format Library +//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/ +/* + * Copyright (C) 2004 Baron Schwartz + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, version 2.1. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + */ +Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(b){if(b=="unixtime"){return parseInt(this.getTime()/1000);}if(Date.formatFunctions[b]==null){Date.createNewFormat(b);}var a=Date.formatFunctions[b];return this[a]();};Date.createNewFormat=function(format){var funcName="format"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code="Date.prototype."+funcName+" = function() {return ";var special=false;var ch="";for(var i=0;i 0) {";var regex="";var special=false;var ch="";for(var i=0;i 0 && z > 0){\nvar doyDate = new Date(y,0);\ndoyDate.setDate(z);\nm = doyDate.getMonth();\nd = doyDate.getDate();\n}";code+="if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n{return new Date(y, m, d, h, i, s);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n{return new Date(y, m, d, h, i);}\nelse if (y > 0 && m >= 0 && d > 0 && h >= 0)\n{return new Date(y, m, d, h);}\nelse if (y > 0 && m >= 0 && d > 0)\n{return new Date(y, m, d);}\nelse if (y > 0 && m >= 0)\n{return new Date(y, m);}\nelse if (y > 0)\n{return new Date(y);}\n}return null;}";Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$");eval(code);};Date.formatCodeToRegex=function(b,a){switch(b){case"D":return{g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case"j":case"d":return{g:1,c:"d = parseInt(results["+a+"], 10);\n",s:"(\\d{1,2})"};case"l":return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case"S":return{g:0,c:null,s:"(?:st|nd|rd|th)"};case"w":return{g:0,c:null,s:"\\d"};case"z":return{g:1,c:"z = parseInt(results["+a+"], 10);\n",s:"(\\d{1,3})"};case"W":return{g:0,c:null,s:"(?:\\d{2})"};case"F":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+a+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case"M":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+a+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case"n":case"m":return{g:1,c:"m = parseInt(results["+a+"], 10) - 1;\n",s:"(\\d{1,2})"};case"t":return{g:0,c:null,s:"\\d{1,2}"};case"L":return{g:0,c:null,s:"(?:1|0)"};case"Y":return{g:1,c:"y = parseInt(results["+a+"], 10);\n",s:"(\\d{4})"};case"y":return{g:1,c:"var ty = parseInt(results["+a+"], 10);\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case"a":return{g:1,c:"if (results["+a+"] == 'am') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case"A":return{g:1,c:"if (results["+a+"] == 'AM') {\nif (h == 12) { h = 0; }\n} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case"g":case"G":case"h":case"H":return{g:1,c:"h = parseInt(results["+a+"], 10);\n",s:"(\\d{1,2})"};case"i":return{g:1,c:"i = parseInt(results["+a+"], 10);\n",s:"(\\d{2})"};case"s":return{g:1,c:"s = parseInt(results["+a+"], 10);\n",s:"(\\d{2})"};case"O":return{g:0,c:null,s:"[+-]\\d{4}"};case"T":return{g:0,c:null,s:"[A-Z]{3}"};case"Z":return{g:0,c:null,s:"[+-]\\d{1,5}"};default:return{g:0,c:null,s:String.escape(b)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+String.leftPad(Math.abs(this.getTimezoneOffset())%60,2,"0");};Date.prototype.getDayOfYear=function(){var a=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var b=0;b0){for(var b in a.disableTimeRanges)a.disableTimeRanges[b]=[r(a.disableTimeRanges[b][0]),r(a.disableTimeRanges[b][1])];a.disableTimeRanges=a.disableTimeRanges.sort(function(a,b){return a[0]-b[0]})}return a}function c(b){var c=b.data("timepicker-settings"),d=b.data("timepicker-list");d&&d.length&&(d.remove(),b.data("timepicker-list",!1)),d=a("
    ",{"class":"ui-timepicker-list"});var e=a("
    ",{"class":"ui-timepicker-wrapper",tabindex:-1});e.css({display:"none",position:"absolute"}).append(d),c.className&&e.addClass(c.className),null===c.minTime&&null===c.durationTime||!c.showDuration||e.addClass("ui-timepicker-with-duration");var g=c.minTime;"function"==typeof c.durationTime?g=r(c.durationTime()):null!==c.durationTime&&(g=c.durationTime);var i=null!==c.minTime?c.minTime:0,j=null!==c.maxTime?c.maxTime:i+u-1;i>=j&&(j+=u),j===u-1&&-1!==c.timeFormat.indexOf("H")&&(j=u);for(var k=c.disableTimeRanges,l=0,m=k.length,n=i;j>=n;n+=60*c.step){var s=n,t=a("
  • ");if(t.data("time",s),t.text(q(s,c.timeFormat)),(null!==c.minTime||null!==c.durationTime)&&c.showDuration){var v=a("");v.addClass("ui-timepicker-duration"),v.text(" ("+p(n-g)+")"),t.append(v)}m>l&&(s>=k[l][1]&&(l+=1),k[l]&&s>=k[l][0]&&sb.outerHeight()||0>e)&&b.scrollTop(b.scrollTop()+d.position().top-d.outerHeight()),d.addClass("ui-timepicker-selected")}}}function i(){if(""!==this.value){var b=a(this),c=b.data("timepicker-list");if(!c||!c.is(":visible")){var d=r(this.value);if(null===d)return b.trigger("timeFormatError"),void 0;var e=b.data("timepicker-settings"),f=!1;if(null!==e.minTime&&de.maxTime&&(f=!0),a.each(e.disableTimeRanges,function(){return d>=this[0]&&d=30*e.step?d+=60*e.step-g:d-=g}var h=q(d,e.timeFormat);f?k(b,h,"error")&&b.trigger("timeRangeError"):k(b,h)}}}function j(a){return a.is("input")?a.val():a.data("ui-timepicker-value")}function k(a,b,c){return a.is("input")&&a.val(b),a.data("ui-timepicker-value")!=b?(a.data("ui-timepicker-value",b),"select"==c?a.trigger("selectTime").trigger("changeTime").trigger("change"):"error"!=c&&a.trigger("changeTime"),!0):(a.trigger("selectTime"),!1)}function l(b){var c=a(this),d=c.data("timepicker-list");if(!d||!d.is(":visible")){if(40!=b.keyCode)return m(b,c);f(c)||c.focus()}switch(b.keyCode){case 13:return o(c)&&x.hide.apply(this),b.preventDefault(),!1;case 38:var e=d.find(".ui-timepicker-selected");return e.length?e.is(":first-child")||(e.removeClass("ui-timepicker-selected"),e.prev().addClass("ui-timepicker-selected"),e.prev().position().top0?(e=a(c),!1):void 0}),e.addClass("ui-timepicker-selected")),!1;case 40:return e=d.find(".ui-timepicker-selected"),0===e.length?(d.find("li").each(function(b,c){return a(c).position().top>0?(e=a(c),!1):void 0}),e.addClass("ui-timepicker-selected")):e.is(":last-child")||(e.removeClass("ui-timepicker-selected"),e.next().addClass("ui-timepicker-selected"),e.next().position().top+2*e.outerHeight()>d.outerHeight()&&d.scrollTop(d.scrollTop()+e.outerHeight())),!1;case 27:d.find("li").removeClass("ui-timepicker-selected"),x.hide();break;case 9:x.hide();break;default:return m(b,c)}}function m(a,b){return!b.data("timepicker-settings").disableTextInput||a.ctrlKey||a.altKey||a.metaKey||2!=a.keyCode&&8!=a.keyCode&&a.keyCode<46}function n(b){var c=a(this),d=c.data("timepicker-list");if(!d||!d.is(":visible"))return!0;switch(b.keyCode){case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:case 104:case 105:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 65:case 77:case 80:case 186:case 8:case 46:h(c,d);break;default:return}}function o(a){var b=a.data("timepicker-settings"),c=a.data("timepicker-list"),d=null,e=c.find(".ui-timepicker-selected");if(e.hasClass("ui-timepicker-disabled"))return!1;if(e.length?d=e.data("time"):j(a)&&(d=r(j(a)),h(a,c)),null!==d){var f=q(d,b.timeFormat);k(a,f,"select")}return!0}function p(a){var b,c=Math.round(a/60);if(Math.abs(c)<60)b=[c,w.mins];else if(60==c)b=["1",w.hr];else{var d=(c/60).toFixed(1);"."!=w.decimal&&(d=d.replace(".",w.decimal)),b=[d,w.hrs]}return b.join(" ")}function q(a,b){if(null!==a){for(var c,d,e=new Date(t.valueOf()+1e3*a),f="",g=0;g11?"pm":"am";break;case"A":f+=e.getHours()>11?"PM":"AM";break;case"g":c=e.getHours()%12,f+=0===c?"12":c;break;case"G":f+=e.getHours();break;case"h":c=e.getHours()%12,0!==c&&10>c&&(c="0"+c),f+=0===c?"12":c;break;case"H":c=e.getHours(),a===u&&(c=24),f+=c>9?c:"0"+c;break;case"i":var h=e.getMinutes();f+=h>9?h:"0"+h;break;case"s":a=e.getSeconds(),f+=a>9?a:"0"+a;break;default:f+=d}return f}}function r(a){if(""===a)return null;if(!a||a+0==a)return a;"object"==typeof a&&(a=a.getHours()+":"+s(a.getMinutes())+":"+s(a.getSeconds())),a=a.toLowerCase(),new Date(0);var b;if(-1===a.indexOf(":")?(b=a.match(/^([0-9]):?([0-5][0-9])?:?([0-5][0-9])?\s*([pa]?)m?$/),b||(b=a.match(/^([0-2][0-9]):?([0-5][0-9])?:?([0-5][0-9])?\s*([pa]?)m?$/))):b=a.match(/^(\d{1,2})(?::([0-5][0-9]))?(?::([0-5][0-9]))?\s*([pa]?)m?$/),!b)return null;var c,d=parseInt(1*b[1],10);c=b[4]?12==d?"p"==b[4]?12:0:d+("p"==b[4]?12:0):d;var e=1*b[2]||0,f=1*b[3]||0;return 3600*c+60*e+f}function s(a){return("0"+a).slice(-2)}var t=d(),u=86400,v={className:null,minTime:null,maxTime:null,durationTime:null,step:30,showDuration:!1,timeFormat:"g:ia",scrollDefaultNow:!1,scrollDefaultTime:!1,selectOnBlur:!1,disableTouchKeyboard:!0,forceRoundTime:!1,appendTo:"body",disableTimeRanges:[],closeOnWindowScroll:!1,disableTextInput:!1},w={decimal:".",mins:"mins",hr:"hr",hrs:"hrs"},x={init:function(c){return this.each(function(){var d=a(this);if("SELECT"==d[0].tagName){for(var e={type:"text",value:d.val()},f=d[0].attributes,g=0;g",e);d.replaceWith(h),d=h}var j=a.extend({},v);c&&(j=a.extend(j,c)),j.lang&&(w=a.extend(w,j.lang)),j=b(j),d.data("timepicker-settings",j),d.prop("autocomplete","off"),d.on("click.timepicker focus.timepicker",x.show),d.on("change.timepicker",i),d.on("keydown.timepicker",l),d.on("keyup.timepicker",n),d.addClass("ui-timepicker-input"),i.call(d.get(0))})},show:function(){var b=a(this),d=b.data("timepicker-settings");f(b)&&b.blur();var h=b.data("timepicker-list");if(!b.prop("readonly")&&(h&&0!==h.length&&"function"!=typeof d.durationTime||(c(b),h=b.data("timepicker-list")),!h.is(":visible"))){x.hide(),h.show(),b.offset().top+b.outerHeight(!0)+h.outerHeight()>a(window).height()+a(window).scrollTop()?h.offset({left:b.offset().left+parseInt(h.css("marginLeft").replace("px",""),10),top:b.offset().top-h.outerHeight()+parseInt(h.css("marginTop").replace("px",""),10)}):h.offset({left:b.offset().left+parseInt(h.css("marginLeft").replace("px",""),10),top:b.offset().top+b.outerHeight()+parseInt(h.css("marginTop").replace("px",""),10)});var i=h.find(".ui-timepicker-selected");if(i.length||(j(b)?i=g(b,h,r(j(b))):d.scrollDefaultNow?i=g(b,h,r(new Date)):d.scrollDefaultTime!==!1&&(i=g(b,h,r(d.scrollDefaultTime)))),i&&i.length){var k=h.scrollTop()+i.position().top-i.outerHeight();h.scrollTop(k)}else h.scrollTop(0);a("body").on("touchstart.ui-timepicker mousedown.ui-timepicker",e),d.closeOnWindowScroll&&a(window).on("scroll.ui-timepicker",e),b.trigger("showTimepicker")}},hide:function(){a(".ui-timepicker-wrapper:visible").each(function(){var b=a(this),c=b.data("timepicker-input"),d=c.data("timepicker-settings");d&&d.selectOnBlur&&o(c),b.hide(),c.trigger("hideTimepicker")})},option:function(c,d){var e=this,f=e.data("timepicker-settings"),g=e.data("timepicker-list");if("object"==typeof c)f=a.extend(f,c);else if("string"==typeof c&&"undefined"!=typeof d)f[c]=d;else if("string"==typeof c)return f[c];return f=b(f),e.data("timepicker-settings",f),g&&(g.remove(),e.data("timepicker-list",!1)),e},getSecondsFromMidnight:function(){return r(j(this))},getTime:function(a){var b=this;return a||(a=new Date),a.setHours(0,0,0,0),new Date(a.valueOf()+1e3*r(j(b)))},setTime:function(a){var b=this,c=q(r(a),b.data("timepicker-settings").timeFormat);k(b,c),b.data("timepicker-list")&&h(b,b.data("timepicker-list"))},remove:function(){var a=this;a.hasClass("ui-timepicker-input")&&(a.removeAttr("autocomplete","off"),a.removeClass("ui-timepicker-input"),a.removeData("timepicker-settings"),a.off(".timepicker"),a.data("timepicker-list")&&a.data("timepicker-list").remove(),a.removeData("timepicker-list"))}};a.fn.timepicker=function(b){return x[b]?x[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?(a.error("Method "+b+" does not exist on jQuery.timepicker"),void 0):x.init.apply(this,arguments)}}); \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/datetimepicker.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/datetimepicker.scss new file mode 100644 index 000000000..078c93469 --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/datetimepicker.scss @@ -0,0 +1,304 @@ +.xdsoft_datetimepicker{ + box-shadow: 0px 5px 10px -5px rgba(0, 0, 0, 0.4); + background: #FFFFFF; + border:1px solid darken($color-input-focus, 40%); + display: block; + padding: 8px; + padding-left: 0px; + padding-top: 2px; + position: absolute; + z-index: 9999; + -moz-box-sizing: border-box; + box-sizing: border-box; + display:none; + + *{ + -moz-box-sizing: border-box; + box-sizing: border-box; + padding:0px; + margin:0px; + } + + iframe { + position: absolute; + left: 0; + top: 0; + width: 75px; + height: 210px; + background: transparent; + border:none; + } + + .xdsoft_datepicker, .xdsoft_timepicker{ + display:none; + + &.active{ + display:block; + } + } + .xdsoft_datepicker{ + float:left; + margin-left:8px; + } + .xdsoft_datepicker.active + .xdsoft_timepicker{ + margin-top:8px; + margin-bottom:3px + } + .xdsoft_mounthpicker{ + position: relative; + text-align: center; + } + + .xdsoft_next, .xdsoft_prev, .xdsoft_today_button{ + background-color: transparent; + cursor: pointer; + display: block; + border:0; + overflow: hidden; + padding: 5px 0px; + position: relative; + white-space: nowrap; + width: 2em; + color:$color-teal; + text-transform:none; + text-align:center; + + &:before{ + font-size:1.5em; + font-family:wagtail; + width:1em; + line-height:1.3em; + text-align:center; + margin:0; + } + &:hover{ + color:$color-teal-darker; + } + } + .xdsoft_prev{ + float: left; + + &:before{ + content:"z"; + } + } + .xdsoft_today_button{ + float: left; + margin-left:5px; + + &:before{ + content:"W"; + } + } + + .xdsoft_next{ + float: right; + + &:before{ + content:"n"; + } + } + + .xdsoft_timepicker{ + width: 70px; + float:left; + text-align:center; + margin-left:8px; + margin-top:0px; + + .xdsoft_prev, + .xdsoft_next{ + float:none; + height: 1.5em; + display: block; + text-align:center; + width:100%; + padding:0; + + &:before{ + width:100%; + } + } + + .xdsoft_prev:before{ + content:"e"; + } + + .xdsoft_next:before{ + content:"q"; + } + + .xdsoft_time_box{ + position:relative; + border:1px solid #ccc; + height:170px; + overflow:hidden; + border-bottom:1px solid #DDDDDD; + + > div > div{ + background: #F5F5F5; + border-top:1px solid #DDDDDD; + color: #666666; + font-size: 1em; + text-align: center; + border-collapse:collapse; + cursor:pointer; + border-bottom-width:0px; + height:2.3em; + line-height:2.3em; + + &:first-child{ + border-top-width:0px; + } + } + } + } + + .xdsoft_label{ + display: inline; + position: relative; + z-index: 9999; + margin: 0; + padding: 5px 3px; + font-size: 14px; + line-height: 20px; + font-weight: bold; + background-color: #fff; + float:left; + width:182px; + text-align:center; + cursor:pointer; + + &:hover{ + text-decoration:underline; + } + + > .xdsoft_select{ + border:1px solid #ccc; + position:absolute; + display:block; + right:0px; + top:30px; + z-index:101; + display:none; + background:#fff; + max-height:160px; + overflow-y:hidden; + + &.xdsoft_monthselect{right:-7px;} + &.xdsoft_yearselect{right:2px;} + + > div > .xdsoft_option:hover{ + color: #fff; + background: #ff8000; + } + > div > .xdsoft_option{ + padding:2px 15px 2px 5px; + } + > div > .xdsoft_option.xdsoft_current{ + background: #33AAFF; + color:#fff; + font-weight: 700; + } + } + + } + + .xdsoft_month{ + width:90px; + text-align:right; + } + .xdsoft_year{ + width:56px; + } + .xdsoft_calendar{ + clear:both; + + table{ + border-collapse:collapse; + } + td > div{ + padding-right:5px; + } + td, th{ + width:14.285%; + border:1px solid #DDDDDD; + color: #666666; + font-size: 12px; + text-align: right; + padding:5px 7px; + border-collapse:collapse; + cursor:pointer; + height: 25px; + } + td{ + background-color:white; + } + th{ + background: #F1F1F1; + font-weight: 700; + font-size:0.85em; + text-align: center; + cursor:default; + } + } + + .xdsoft_calendar td.xdsoft_default, + .xdsoft_calendar td.xdsoft_current, + .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_current{ + background: $color-orange; + color:#fff; + font-weight: 700; + } + .xdsoft_calendar td.xdsoft_other_month, + .xdsoft_calendar td.xdsoft_disabled, + .xdsoft_time_box > div > div.xdsoft_disabled{ + opacity:0.5; + background:$color-grey-3; + } + + .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled{ + opacity:0.2; + } + .xdsoft_calendar td:hover, + .xdsoft_timepicker .xdsoft_time_box > div > div:hover{ + color: #fff; + background: $color-teal; + } +} + +.xdsoft_noselect{ + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} +.xdsoft_noselect::selection { background: transparent; } +.xdsoft_noselect::-moz-selection { background: transparent; } +.xdsoft_datetimepicker.xdsoft_inline{ + display: inline-block; + position: static; + box-shadow: none; +} + +.xdsoft_scroller_box{ + position:relative; +} +.xdsoft_scrollbar{ + position:absolute; + width:7px; + width:7px; + right:0px; + top:0px; + bottom:0px; + cursor:pointer; + + > .xdsoft_scroller{ + background:#ccc !important; + height:20px; + border-radius:3px; + } +} diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/dropdowns.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/dropdowns.scss index ee618f377..1428f0fd9 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/dropdowns.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/dropdowns.scss @@ -3,7 +3,18 @@ @include clearfix(); .dropdown-toggle{ + color:white; + text-transform:uppercase; + background-color:$color-teal; + line-height:3em; + padding-left:1em; + padding-right:1em; cursor:pointer; + + &:before, + &:after{ + margin:0; + } } input[type=button], input[type=submit], button, .button{ @@ -27,10 +38,9 @@ li{ float:none; - border-top:1px solid rgba(255,255,255,0.2); - } - li:first-child{ - border-top:0; + border-color: rgba(255,255,255,0.2); + border-style: solid; + border-width:1px 0 0 0; } a{ @@ -101,6 +111,10 @@ @include box-shadow(0px -3px 3px 0 rgba(0,0,0,0.2)); top:auto; bottom:100%; + + li{ + border-width:0 0 1px 0; + } } @@ -134,10 +148,22 @@ } /* Styles for dropdowns which are also buttons e.g page editor */ + &.dropdown-button{ .dropdown-toggle{ @include border-radius(0 3px 3px 0); } + &.open{ + > input[type=button], > input[type=submit], > button, > .button{ + @include border-radius(3px 3px 0px 0px); + } + .dropdown-toggle{ + @include border-radius(0 3px 0 0); + } + } + } + + &.dropup.dropdown-button{ &.open{ > input[type=button], > input[type=submit], > button, > .button{ @include border-radius(0 0 3px 3px); @@ -215,25 +241,6 @@ h2 .dropdown{ } -footer .actions .dropdown-toggle{ - text-transform:uppercase; - background-color:$color-teal; - line-height:3em; - color:white; - padding-left:1em; - padding-right:1em; - - &:before, - &:after{ - margin:0; - } -} - -footer .actions .dropdown ul li{ - border-bottom:1px solid rgba(255,255,255,0.2); - border-top:0; -} - /* Transitions */ .dropdown ul{ diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss index bc2b02a8c..97e915f36 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss @@ -179,6 +179,10 @@ a.tag:hover{ display:inline; } +.unlist{ + @include unlist(); +} + /* utility class to allow things to be scrollable if their contents can't wrap more nicely */ .overflow{ overflow:auto; diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss index 29c44b4f3..3a14a17ae 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss @@ -68,6 +68,7 @@ input, textarea, select, .richtext, .tagit{ } /* select boxes */ +.choice_field .input, .typed_choice_field .input{ position:relative; @@ -296,7 +297,7 @@ button.icon{ > li{ position:relative; background-color:white; - padding:1em 1.5em; + padding:1em 10em 1em 1.5em; /* 10em padding leaves room for controls */ margin-bottom:1em; border:1px solid lighten($color-grey-4, 3%); /* really trying to avoid creating more greys, but this one is better than grey 4 or 5 */ @include border-radius(2px); @@ -318,6 +319,7 @@ button.icon{ /* Object controls */ .controls{ position:absolute; + z-index:1; right:1em; top:1em; color:white; @@ -648,6 +650,13 @@ ul.tagit li.tagit-choice-editable{ } } +/* search-bars */ +.search-bar{ + .required label:after{ + display:none; + } +} + /* Transitions */ fieldset, input, textarea, select{ @include transition(background-color 0.2s ease); diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss index 4de3aa131..92e83bbe5 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss @@ -223,7 +223,7 @@ } .icon-view:before{ content:"4"; /* Credit: Icon made by Zurb from Flaticon.com */ - font-size:1.5rem; + font-size:1.3rem; } .icon-collapse-down:before{ content:"5"; @@ -246,7 +246,6 @@ .icon-form:before{ content:"$"; } - .icon.text-replace{ font-size:0em; line-height:0; diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss index edf5e65f8..e79d8b28d 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss @@ -52,6 +52,7 @@ ul.listing{ } } + /* .dropdown{ padding:0; } @@ -65,6 +66,7 @@ ul.listing{ background-color:white; margin-left:-$grid-gutter-width * 2; } + */ } &.full-width td:first-child, diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss index 7f58dd869..f5c32d8c5 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/messages.scss @@ -16,14 +16,38 @@ padding-bottom:1.3em; color:white; } + + li:before{ + margin-right:0.5em; + font-size:1.5em; + vertical-align:middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + .error{ background-color:$color-red; + + &:before{ + font-family:wagtail; + content:"!"; + } } .warning{ background-color:$color-orange; + + &:before{ + font-family:wagtail; + content:"!"; + } } .success{ - background-color:$color-teal-dark; + background-color:$color-green; + + &:before{ + font-family:wagtail; + content:"9"; + } } } @@ -46,6 +70,11 @@ li{ padding-left:$desktop-nice-padding; padding-right:$desktop-nice-padding; + + &:before{ + margin-left:-0.75em; + } + } &:before{ content: ""; diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/modals.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/modals.scss index 3ca060f49..053e0d2c8 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/modals.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/modals.scss @@ -1,5 +1,15 @@ $zindex-modal-background: 500; +.fade { + opacity: 0; + @include transition(opacity .15s linear); + + &.in { + opacity: 1; + } +} + + // Kill the scroll on the body .modal-open { overflow: hidden; @@ -70,7 +80,7 @@ $zindex-modal-background: 500; background-color: black; // Fade for backdrop &.fade { opacity:0; } - &.in { opacity:0.7; } + &.in { opacity:0.5; } } .modal .close{ diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss index b0dec687d..2c85d24e8 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss @@ -15,8 +15,7 @@ } a{ @include transition(border-color 0.2s ease); - @include box-shadow(inset 0px -2px 3px 0 rgba(0,0,0,0.1)); - background-color:$color-grey-4; + background-color:lighten($color-teal-darker, 3%); outline:none; line-height:3em; text-transform:uppercase; @@ -25,30 +24,28 @@ text-decoration:none; display:block; padding:0 20px; - color:$color-grey-2; - border-top:0.3em solid $color-grey-4; + color:white; + border-top:0.3em solid lighten($color-teal-darker, 3%); border-bottom:1px solid transparent; &:hover{ - color:inherit; - border-top-color:$color-grey-2; + color:white; + border-top-color:$color-teal-dark; } } a.errors{ - color:$color-red !important; - &:after{ - @include border-radius(50%); - @include box-shadow(1px 1px 2px rgba(0, 0, 0, 0.2)); + @include border-radius(50px); + @include box-shadow(1px 2px 2px rgba(0, 0, 0, 0.1)); position:absolute; right:-0.5em; top:-0.5em; z-index:5; - min-width:1em; + min-width:0.9em; color:white; background:$color-red; - border:2px solid darken($color-red,20%); + content:attr(data-count); padding:0 0.3em; line-height:1.4em; diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss index 8298f214a..1d73b4502 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss @@ -12,6 +12,7 @@ @import "components/messages.scss"; @import "components/formatters.scss"; @import "components/header.scss"; +@import "components/datetimepicker.scss"; @import "fonts.scss"; @@ -213,12 +214,13 @@ img{ color: #AAA; padding: 0.9em 1.2em; position:relative; - font-size:0.9em; + font-size:0.85em; font-weight:400; white-space:nowrap; text-shadow:-1px -1px 0px rgba(0,0,0,0.3); &:before{ + vertical-align:-20%; margin-right:0.5em; } &:hover{ diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail-icomoon.json b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail-icomoon.json new file mode 100755 index 000000000..583faf89a --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail-icomoon.json @@ -0,0 +1,1261 @@ +{ + "IcoMoonType": "selection", + "icons": [ + { + "icon": { + "paths": [ + "M515.010 48.76c-152.629 0-276.799 124.169-276.799 276.8v158.089c0 1.794-2.218 4.822-3.961 5.403-14.966 4.995-27.124 9.317-38.252 13.61-13.268 5.117-23.279 19.822-23.279 34.207v363.246c0 14.289 9.946 29.011 23.133 34.234 102.029 40.432 209.41 60.925 319.162 60.925s217.133-20.498 319.164-60.928c13.181-5.225 23.122-19.942 23.122-34.231v-363.246c0-14.392-10.010-29.092-23.284-34.214-11.133-4.292-23.292-8.616-38.246-13.61-1.736-0.579-3.952-3.608-3.952-5.403v-158.089c-0.001-152.629-124.17-276.796-276.798-276.796zM439.618 647.508c0-41.667 33.757-75.388 75.388-75.388s75.388 33.715 75.388 75.388c0 27.609-15.572 50.727-37.691 63.83v124.642c0 20.833-16.86 37.691-37.696 37.691-20.834 0-37.691-16.86-37.691-37.691v-124.642c-22.122-13.104-37.691-36.218-37.691-63.83zM696.635 325.555v136.403c-59.559-12.813-120.663-19.305-181.595-19.313-60.902 0-122 6.493-181.65 19.297v-136.386c0-100.146 81.472-181.62 181.62-181.62s181.627 81.473 181.627 181.622z" + ], + "width": 1044, + "tags": [ + "lock39 copy" + ], + "grid": 16 + }, + "properties": { + "order": 3, + "id": 67, + "prevSize": 32, + "code": 109, + "name": "lock39copy", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 0 + }, + { + "icon": { + "paths": [ + "M805.921 547.056c-10.185-3.925-35.708-12.802-36.074-13.097-29.889-7.465-89.61-24.137-89.61-24.137-54.486-11.722-110.388-17.662-166.132-17.667-54.142 0-108.438 5.627-161.538 16.693l-83.034-83.036c-64.786-64.784-64.786-170.192 0-234.978s170.195-64.788 234.982-0.003l86.341 86.338c29.095-7.053 61.625-21.392 82.33-44.399-1.663 0.173-3.92-0.338-4.829-1.243l-102.267-102.267c-98.737-98.73-259.387-98.73-358.121 0.003s-98.736 259.386 0 358.122l47.733 47.737c-12.989 4.348-23.679 8.159-33.473 11.937-12.14 4.681-21.298 18.133-21.298 31.296v332.313c0 13.072 9.099 26.54 21.164 31.321 93.34 36.988 191.578 55.737 291.983 55.737s198.644-18.754 291.986-55.742c12.060-4.781 21.153-18.243 21.153-31.315v-332.316c0.001-13.165-9.156-26.617-21.301-31.301zM548.564 737.965v114.028c0 19.060-15.424 34.483-34.485 34.483s-34.483-15.424-34.483-34.483v-114.028c-20.239-11.987-34.483-33.135-34.483-58.395 0-38.118 30.881-68.969 68.967-68.969s68.969 30.845 68.969 68.969c0 25.261-14.246 46.407-34.483 58.395z" + ], + "width": 1044, + "tags": [ + "lock39-open" + ], + "grid": 16 + }, + "properties": { + "order": 6, + "id": 66, + "prevSize": 32, + "code": 112, + "name": "lock39-open", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 1 + }, + { + "icon": { + "paths": [ + "M74.699 74.249v874.192h874.192v-874.192h-874.192zM342.098 810.335h-176.307v-91.091h321.76v91.091zM810.783 350.466h-644.99v-136.639h643.523v136.639zM809.313 597.296h-643.523v-136.639h643.523v136.639z" + ], + "tags": [ + "form" + ], + "grid": 16 + }, + "properties": { + "order": 1, + "id": 63, + "prevSize": 32, + "code": 36, + "name": "form", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 2 + }, + { + "icon": { + "paths": [ + "M478 512c0-38-14-70-40-96-26-28-58-40-96-40-38 0-70 12-98 40-26 26-40 58-40 96 0 38 14 70 40 96 28 28 60 40 98 40 38 0 70-12 96-40 26-26 40-58 40-96zM888 786c0-20-8-36-20-48-14-14-30-22-48-22-20 0-36 8-48 22-14 12-22 28-22 48 0 18 8 34 20 48 14 12 30 20 50 20 18 0 34-8 48-20 12-14 20-30 20-48zM888 238c0-18-8-34-20-48-14-12-30-20-48-20-20 0-36 8-48 20-14 14-22 30-22 48 0 20 8 36 20 50 14 12 30 20 50 20 18 0 34-8 48-20 12-14 20-30 20-50zM682 464v98c0 4 0 8-4 10-2 4-4 6-8 6l-82 12c-4 14-10 26-18 42 12 16 28 36 48 60 4 4 4 8 4 12 0 4 0 8-4 10-8 10-22 26-44 48-20 20-34 32-42 32-4 0-6-2-10-4l-62-48c-12 6-26 12-40 16-4 38-8 66-14 82-2 10-6 14-16 14h-98c-4 0-8-2-10-4-4-4-6-6-6-10l-12-82c-12-4-26-8-40-16l-64 48c-2 2-6 4-10 4s-8-2-12-6c-50-46-76-74-76-84 0-4 2-8 4-10 4-6 10-16 22-28 10-14 18-26 24-34-8-16-14-30-18-44l-82-12c-2 0-6-2-8-6-2-2-4-6-4-10v-98c0-4 2-8 4-10 2-4 6-6 8-6l82-12c4-14 10-26 18-42-12-16-28-36-48-60-2-4-4-8-4-12 0-4 2-8 4-10 8-10 22-26 44-48 22-20 36-32 42-32 4 0 8 2 12 4l60 48c12-6 26-12 42-16 4-38 8-66 12-82 2-10 8-14 16-14h98c4 0 8 2 12 4 2 4 4 6 4 10l14 82c12 4 24 8 40 16l62-48c2-2 6-4 10-4s8 2 12 6c52 46 76 74 76 84 0 4 0 8-2 10-6 6-12 16-24 30-10 12-18 24-24 32 8 16 14 32 18 44l82 12c4 0 6 2 8 6 4 2 4 6 4 10zM1024 748v74c0 6-26 12-80 16-4 10-10 20-16 28 18 40 28 66 28 74 0 2 0 2-2 4-44 26-66 38-66 38-4 0-12-8-26-26-12-16-22-28-26-36-8 2-14 2-16 2-4 0-10 0-16-2-6 8-16 20-28 36-14 18-22 26-26 26 0 0-22-12-66-38 0-2-2-2-2-4 0-8 10-34 28-74-6-8-12-18-16-28-54-4-80-10-80-16v-74c0-6 26-12 80-16 4-12 10-20 16-28-18-40-28-66-28-74 0-2 2-2 2-4 2 0 8-4 20-10 10-6 20-12 30-18 10-6 16-10 16-10 4 0 12 10 26 26 12 16 22 28 28 36 6-2 12-2 16-2 2 0 8 0 16 2 18-26 34-46 48-60l4-2c0 0 22 14 66 38 2 2 2 2 2 4 0 8-10 34-28 74 6 8 12 16 16 28 54 4 80 10 80 16zM1024 202v74c0 6-26 12-80 16-4 10-10 20-16 28 18 40 28 66 28 74 0 2 0 2-2 4-44 26-66 38-66 38-4 0-12-8-26-26-12-16-22-28-26-36-8 2-14 2-16 2-4 0-10 0-16-2-6 8-16 20-28 36-14 18-22 26-26 26 0 0-22-12-66-38 0-2-2-2-2-4 0-8 10-34 28-74-6-8-12-18-16-28-54-4-80-10-80-16v-74c0-6 26-12 80-16 4-12 10-20 16-28-18-40-28-66-28-74 0-2 2-2 2-4 2 0 8-4 20-10 10-8 20-14 30-18 10-6 16-10 16-10 4 0 12 8 26 26 12 16 22 28 28 36 6-2 12-2 16-2 2 0 8 0 16 2 18-26 34-46 48-60l4-2c0 0 22 14 66 38 2 2 2 2 2 4 0 8-10 34-28 74 6 8 12 16 16 28 54 4 80 10 80 16z" + ], + "defaultCode": 97, + "grid": 16 + }, + "properties": { + "id": 0, + "order": 2, + "prevSize": 32, + "code": 97, + "name": "uni61", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 3 + }, + { + "icon": { + "paths": [ + "M902.4 433.067v488.533c0 17.067-6.4 29.867-17.067 40.533-10.667 12.8-25.6 17.067-42.667 17.067h-661.333c-17.067 0-32-4.267-42.667-17.067-10.667-10.667-17.067-23.467-17.067-40.533v-819.2c0-17.067 6.4-29.867 17.067-40.533 10.667-12.8 25.6-17.067 42.667-17.067h330.667v330.667c0 17.067 6.4 29.867 17.067 40.533 10.667 12.8 25.6 17.067 40.533 17.067zM900.267 356.267h-309.333v-311.467c32 6.4 59.733 19.2 78.933 40.533l189.867 189.867c21.333 21.333 34.133 46.933 40.533 81.067z" + ], + "defaultCode": 98, + "grid": 16 + }, + "properties": { + "id": 1, + "order": 4, + "prevSize": 32, + "code": 98, + "name": "uni62", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 4 + }, + { + "icon": { + "paths": [ + "M200.533 902.4h622.933v-469.333h-253.867c-14.933 0-29.867-4.267-40.533-17.067-10.667-10.667-17.067-23.467-17.067-40.533v-253.867h-311.467zM590.933 356.267h228.267c-4.267-12.8-8.533-21.333-12.8-25.6l-192-189.867c-4.267-6.4-12.8-10.667-23.467-14.933zM902.4 375.467v546.133c0 17.067-6.4 29.867-17.067 40.533-10.667 12.8-25.6 17.067-42.667 17.067h-661.333c-17.067 0-32-4.267-42.667-17.067-10.667-10.667-17.067-23.467-17.067-40.533v-819.2c0-17.067 6.4-29.867 17.067-40.533 10.667-12.8 25.6-17.067 42.667-17.067h388.267c17.067 0 34.133 2.133 55.467 10.667 19.2 8.533 34.133 19.2 44.8 29.867l189.867 189.867c12.8 10.667 21.333 27.733 29.867 46.933s12.8 36.267 12.8 53.333z" + ], + "defaultCode": 99, + "grid": 16 + }, + "properties": { + "id": 2, + "order": 5, + "prevSize": 32, + "code": 99, + "name": "uni63", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 5 + }, + { + "icon": { + "paths": [ + "M312 878l52-52-134-134-52 52v60h74v74zM612 348c0-8-4-14-14-14-2 0-6 2-8 4l-310 310c-4 4-4 6-4 10 0 8 4 12 12 12 4 0 8 0 10-4l310-308c2-4 4-6 4-10zM580 238l238 238-476 474h-236v-236zM970 292c0 20-6 38-20 52l-96 94-236-236 94-96c14-14 30-20 52-20 20 0 36 6 52 20l134 134c14 16 20 32 20 52z" + ], + "defaultCode": 100, + "grid": 16 + }, + "properties": { + "id": 3, + "order": 7, + "prevSize": 32, + "code": 100, + "name": "uni64", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 6 + }, + { + "icon": { + "paths": [ + "M798 644c0 6-2 10-6 14l-30 28c-2 4-8 6-12 6-6 0-10-2-14-6l-224-224-224 224c-4 4-8 6-14 6-4 0-10-2-12-6l-30-28c-4-4-6-8-6-14 0-4 2-8 6-12l266-266c4-4 10-6 14-6s10 2 14 6l266 266c4 4 6 8 6 12z" + ], + "defaultCode": 101, + "grid": 16 + }, + "properties": { + "id": 4, + "order": 8, + "prevSize": 32, + "code": 101, + "name": "uni65", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 7 + }, + { + "icon": { + "paths": [ + "M682.625 446.25c0-67.5-22.5-123.75-69.375-170.625s-103.125-69.375-170.625-69.375c-65.625 0-121.875 22.5-168.75 69.375s-71.25 103.125-71.25 170.625c0 65.625 24.375 121.875 71.25 168.75s103.125 71.25 168.75 71.25c67.5 0 123.75-24.375 170.625-71.25s69.375-103.125 69.375-168.75zM958.25 890.625c0 18.75-7.5 35.625-20.625 48.75s-30 20.625-48.75 20.625c-18.75 0-35.625-7.5-48.75-20.625l-183.75-183.75c-63.75 45-135 67.5-213.75 67.5-50.625 0-99.375-9.375-146.25-30s-86.25-46.875-120-80.625c-33.75-33.75-60-73.125-80.625-120-18.75-46.875-30-95.625-30-146.25 0-52.5 11.25-101.25 30-146.25 20.625-46.875 46.875-88.125 80.625-121.875s73.125-60 120-80.625c46.875-18.75 95.625-28.125 146.25-28.125 52.5 0 101.25 9.375 148.125 28.125 45 20.625 86.25 46.875 120 80.625s60 75 80.625 121.875c18.75 45 30 93.75 30 146.25 0 78.75-22.5 150-67.5 213.75l183.75 183.75c13.125 13.125 20.625 28.125 20.625 46.875z" + ], + "defaultCode": 102, + "grid": 16 + }, + "properties": { + "id": 5, + "order": 9, + "prevSize": 32, + "code": 102, + "name": "uni66", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 8 + }, + { + "icon": { + "paths": [ + "M852 724c0 14-6 28-16 38l-78 78c-10 10-24 16-40 16-14 0-28-6-38-16l-168-168-168 168c-10 10-24 16-38 16-16 0-30-6-40-16l-78-78c-10-10-16-24-16-38 0-16 6-28 16-40l168-168-168-168c-10-10-16-24-16-38 0-16 6-28 16-40l78-76c10-12 24-16 40-16 14 0 28 4 38 16l168 168 168-168c10-12 24-16 38-16 16 0 30 4 40 16l78 76c10 12 16 24 16 40 0 14-6 28-16 38l-168 168 168 168c10 12 16 24 16 40z" + ], + "defaultCode": 103, + "grid": 16 + }, + "properties": { + "id": 6, + "order": 10, + "prevSize": 32, + "code": 103, + "name": "uni67", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 9 + }, + { + "icon": { + "paths": [ + "M896.961 559.82c0-10.547-8.789-15.82-24.609-15.82h-509.766c-12.305 0-26.367 3.516-40.43 10.547s-26.367 14.063-33.398 24.609l-138.867 170.508c-5.273 7.031-7.031 12.305-7.031 17.578 0 10.547 7.031 17.578 24.609 17.578h509.766c12.305 0 26.367-3.516 40.43-10.547s24.609-15.82 33.398-24.609l137.109-170.508c5.273-7.031 8.789-14.063 8.789-19.336zM362.586 484.234h358.594v-75.586c0-12.305-3.516-22.852-12.305-31.641s-19.336-12.305-31.641-12.305h-270.703c-12.305 0-22.852-5.273-31.641-14.063s-12.305-19.336-12.305-31.641v-29.883c0-12.305-5.273-22.852-14.063-31.641s-19.336-14.063-31.641-14.063h-149.414c-12.305 0-22.852 5.273-31.641 14.063s-14.063 19.336-14.063 31.641v399.023l119.531-147.656c14.063-15.82 33.398-29.883 54.492-40.43 22.852-10.547 45.703-15.82 66.797-15.82zM956.727 559.82c0 19.336-7.031 38.672-21.094 56.25l-138.867 170.508c-14.063 17.578-31.641 29.883-54.492 40.43-22.852 12.305-43.945 17.578-65.039 17.578h-509.766c-29.883 0-54.492-10.547-73.828-31.641-21.094-21.094-31.641-45.703-31.641-73.828v-450c0-28.125 10.547-52.734 31.641-73.828 19.336-21.094 43.945-31.641 73.828-31.641h149.414c28.125 0 52.734 10.547 73.828 31.641s31.641 45.703 31.641 73.828v14.063h254.883c28.125 0 52.734 10.547 73.828 31.641s31.641 45.703 31.641 73.828v75.586h89.648c15.82 0 31.641 3.516 45.703 10.547 14.063 8.789 24.609 19.336 31.641 33.398 5.273 10.547 7.031 21.094 7.031 31.641z" + ], + "defaultCode": 105, + "grid": 16 + }, + "properties": { + "id": 7, + "order": 11, + "prevSize": 32, + "code": 105, + "name": "uni69", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 10 + }, + { + "icon": { + "paths": [ + "M958.25 390.25v376.875c0 31.875-13.125 60-35.625 84.375-24.375 24.375-52.5 35.625-84.375 35.625h-652.5c-31.875 0-60-11.25-84.375-35.625-22.5-24.375-35.625-52.5-35.625-84.375v-513.75c0-33.75 13.125-61.875 35.625-86.25 24.375-22.5 52.5-33.75 84.375-33.75h172.5c31.875 0 60 11.25 84.375 33.75 22.5 24.375 35.625 52.5 35.625 86.25v16.875h360c31.875 0 60 11.25 84.375 35.625 22.5 22.5 35.625 50.625 35.625 84.375z" + ], + "defaultCode": 106, + "grid": 16 + }, + "properties": { + "id": 8, + "order": 12, + "prevSize": 32, + "code": 106, + "name": "uni6A", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 11 + }, + { + "icon": { + "paths": [ + "M962 386.836v399.023c0 21.094-7.031 40.43-22.852 56.25s-35.156 22.852-58.008 22.852h-738.281c-22.852 0-42.188-7.031-58.008-22.852s-22.852-35.156-22.852-56.25v-399.023c14.063 15.82 31.641 29.883 50.977 43.945 121.289 82.617 203.906 138.867 249.609 172.266 19.336 14.063 35.156 26.367 45.703 33.398 12.305 7.031 28.125 15.82 47.461 24.609 21.094 7.031 38.672 12.305 56.25 12.305v0c17.578 0 35.156-5.273 56.25-12.305 19.336-8.789 35.156-17.578 47.461-24.609 10.547-7.031 26.367-19.336 45.703-33.398 58.008-40.43 140.625-98.438 249.609-172.266 19.336-14.063 36.914-28.125 50.977-43.945zM962 239.18c0 26.367-8.789 50.977-24.609 75.586s-36.914 43.945-61.523 61.523c-124.805 87.891-203.906 142.383-235.547 163.477-1.758 1.758-10.547 7.031-21.094 15.82-10.547 7.031-19.336 14.063-26.367 19.336-7.031 3.516-15.82 8.789-26.367 15.82-10.547 5.273-19.336 10.547-28.125 14.063-10.547 1.758-17.578 3.516-26.367 3.516v0c-8.789 0-15.82-1.758-26.367-3.516-8.789-3.516-17.578-8.789-28.125-14.063-10.547-7.031-19.336-12.305-26.367-15.82-7.031-5.273-15.82-12.305-26.367-19.336-10.547-8.789-19.336-14.063-21.094-15.82-31.641-21.094-75.586-52.734-131.836-91.406-58.008-40.43-91.406-63.281-103.711-72.070-21.094-14.063-40.43-33.398-58.008-58.008-19.336-24.609-28.125-47.461-28.125-68.555 0-26.367 7.031-47.461 21.094-65.039s33.398-26.367 59.766-26.367h738.281c22.852 0 40.43 8.789 56.25 24.609s24.609 33.398 24.609 56.25z" + ], + "defaultCode": 107, + "grid": 16 + }, + "properties": { + "id": 9, + "order": 13, + "prevSize": 32, + "code": 107, + "name": "uni6B", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 12 + }, + { + "icon": { + "paths": [ + "M671.961 221.961c0 8.789-1.758 17.578-8.789 22.852-7.031 7.031-14.063 10.547-22.852 10.547h-63.281v513.281h63.281c8.789 0 15.82 3.516 22.852 10.547 7.031 5.273 8.789 14.063 8.789 22.852s-1.758 15.82-8.789 21.094l-128.32 130.078c-7.031 5.273-14.063 8.789-22.852 8.789s-15.82-3.516-22.852-8.789l-128.32-130.078c-7.031-5.273-8.789-12.305-8.789-21.094s1.758-17.578 8.789-22.852c7.031-7.031 14.063-10.547 22.852-10.547h63.281v-513.281h-63.281c-8.789 0-15.82-3.516-22.852-10.547-7.031-5.273-8.789-14.063-8.789-22.852s1.758-15.82 8.789-21.094l128.32-130.078c7.031-5.273 14.063-8.789 22.852-8.789s15.82 3.516 22.852 8.789l128.32 130.078c7.031 5.273 8.789 12.305 8.789 21.094z" + ], + "defaultCode": 108, + "grid": 16 + }, + "properties": { + "id": 10, + "order": 14, + "prevSize": 32, + "code": 108, + "name": "uni6C", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 13 + }, + { + "icon": { + "paths": [ + "M670 516c0 6-2 10-6 14l-266 266c-4 4-10 6-14 6s-10-2-14-6l-28-28c-4-4-6-8-6-14 0-4 2-10 6-12l224-226-224-224c-4-4-6-8-6-14 0-4 2-8 6-12l28-28c4-4 10-6 14-6s10 2 14 6l266 266c4 4 6 8 6 12z" + ], + "defaultCode": 110, + "grid": 16 + }, + "properties": { + "id": 12, + "order": 15, + "prevSize": 32, + "code": 110, + "name": "uni6E", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 14 + }, + { + "icon": { + "paths": [ + "M732 676v38c0 4-2 8-6 12s-8 6-12 6h-404c-4 0-8-2-12-6s-6-8-6-12v-38c0-4 2-10 6-12 4-4 8-6 12-6h404c4 0 8 2 12 6 4 2 6 8 6 12zM732 530v36c0 6-2 10-6 14s-8 6-12 6h-404c-4 0-8-2-12-6s-6-8-6-14v-36c0-6 2-10 6-12 4-4 8-6 12-6h404c4 0 8 2 12 6 4 2 6 6 6 12zM220 878h584v-440h-238c-14 0-28-4-38-16-10-10-16-22-16-38v-238h-292zM586 366h214c-4-12-8-20-12-24l-180-178c-4-6-12-10-22-14zM878 384v512c0 16-6 28-16 38-10 12-24 16-40 16h-620c-16 0-30-4-40-16-10-10-16-22-16-38v-768c0-16 6-28 16-38 10-12 24-16 40-16h364c16 0 32 2 52 10 18 8 32 18 42 28l178 178c12 10 20 26 28 44s12 34 12 50z" + ], + "defaultCode": 104, + "grid": 16 + }, + "properties": { + "id": 13, + "order": 16, + "prevSize": 32, + "code": 104, + "name": "uni68", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 15 + }, + { + "icon": { + "paths": [ + "M362.586 362.586c0 24.609-8.789 45.703-26.367 63.281s-38.672 26.367-65.039 26.367c-24.609 0-45.703-8.789-63.281-26.367s-26.367-38.672-26.367-63.281c0-26.367 8.789-47.461 26.367-65.039s38.672-26.367 63.281-26.367c26.367 0 47.461 8.789 65.039 26.367s26.367 38.672 26.367 65.039zM842.469 541.883v210.938h-660.938v-91.406l151.172-149.414 73.828 75.586 240.82-240.82zM886.414 211.414h-748.828c-5.273 0-8.789 1.758-10.547 5.273-3.516 3.516-5.273 7.031-5.273 10.547v569.531c0 3.516 1.758 7.031 5.273 10.547 1.758 3.516 5.273 5.273 10.547 5.273h748.828c5.273 0 8.789-1.758 10.547-5.273 3.516-3.516 5.273-7.031 5.273-10.547v-569.531c0-3.516-1.758-7.031-5.273-10.547-1.758-3.516-5.273-5.273-10.547-5.273zM962 227.234v569.531c0 21.094-7.031 38.672-22.852 52.734-14.063 15.82-31.641 22.852-52.734 22.852h-748.828c-21.094 0-38.672-7.031-52.734-22.852-15.82-14.063-22.852-31.641-22.852-52.734v-569.531c0-21.094 7.031-38.672 22.852-52.734 14.063-15.82 31.641-22.852 52.734-22.852h748.828c21.094 0 38.672 7.031 52.734 22.852 15.82 14.063 22.852 31.641 22.852 52.734z" + ], + "defaultCode": 111, + "grid": 16 + }, + "properties": { + "id": 14, + "order": 17, + "prevSize": 32, + "code": 111, + "name": "uni6F", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 16 + }, + { + "icon": { + "paths": [ + "M798 420c0 6-2 10-6 14l-266 266c-4 4-10 6-14 6s-10-2-14-6l-266-266c-4-4-6-8-6-14 0-4 2-8 6-12l30-30c2-2 8-4 12-4 6 0 10 2 14 4l224 226 224-226c4-2 8-4 14-4 4 0 10 2 12 4l30 30c4 4 6 8 6 12z" + ], + "defaultCode": 113, + "grid": 16 + }, + "properties": { + "id": 16, + "order": 18, + "prevSize": 32, + "code": 113, + "name": "uni71", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 17 + }, + { + "icon": { + "paths": [ + "M732 786v-36c0-6-2-10-6-14-4-2-8-4-12-4h-404c-4 0-8 2-12 4-4 4-6 8-6 14v36c0 6 2 10 6 14 4 2 8 4 12 4h404c4 0 8-2 12-4 4-4 6-8 6-14zM732 640v-36c0-6-2-10-6-14s-8-4-12-4h-404c-4 0-8 0-12 4s-6 8-6 14v36c0 6 2 10 6 14 4 2 8 4 12 4h404c4 0 8-2 12-4 4-4 6-8 6-14zM878 438v458c0 16-6 28-16 38-10 12-24 16-40 16h-620c-16 0-30-4-40-16-10-10-16-22-16-38v-768c0-16 6-28 16-38 10-12 24-16 40-16h310v310c0 16 6 28 16 38 10 12 24 16 38 16zM876 366h-290v-292c30 6 56 18 74 38l178 178c20 20 32 44 38 76z" + ], + "defaultCode": 114, + "grid": 16 + }, + "properties": { + "id": 17, + "order": 19, + "prevSize": 32, + "code": 114, + "name": "uni72", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 18 + }, + { + "icon": { + "paths": [ + "M888.875 767.125v-376.875c0-15-5.625-26.25-15-37.5-9.375-9.375-22.5-15-35.625-15h-376.875c-15 0-28.125-3.75-37.5-15-9.375-9.375-15-22.5-15-35.625v-33.75c0-15-5.625-28.125-15-37.5s-22.5-15-35.625-15h-172.5c-13.125 0-26.25 5.625-35.625 15s-15 22.5-15 37.5v513.75c0 13.125 5.625 26.25 15 35.625 9.375 11.25 22.5 15 35.625 15h652.5c13.125 0 26.25-3.75 35.625-15 9.375-9.375 15-22.5 15-35.625zM958.25 390.25v376.875c0 31.875-13.125 60-35.625 84.375-24.375 24.375-52.5 35.625-84.375 35.625h-652.5c-31.875 0-60-11.25-84.375-35.625-22.5-24.375-35.625-52.5-35.625-84.375v-513.75c0-33.75 13.125-61.875 35.625-86.25 24.375-22.5 52.5-33.75 84.375-33.75h172.5c31.875 0 60 11.25 84.375 33.75 22.5 24.375 35.625 52.5 35.625 86.25v16.875h360c31.875 0 60 11.25 84.375 35.625 22.5 22.5 35.625 50.625 35.625 84.375z" + ], + "defaultCode": 115, + "grid": 16 + }, + "properties": { + "id": 18, + "order": 20, + "prevSize": 32, + "code": 115, + "name": "uni73", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 19 + }, + { + "icon": { + "paths": [ + "M888.875 425.75v103.125c0 15-5.625 26.25-15 37.5-9.375 9.375-22.5 15-35.625 15h-223.125v221.25c0 15-5.625 28.125-15 37.5s-22.5 15-37.5 15h-101.25c-15 0-28.125-5.625-37.5-15s-15-22.5-15-37.5v-221.25h-223.125c-13.125 0-26.25-5.625-35.625-15-9.375-11.25-15-22.5-15-37.5v-103.125c0-13.125 5.625-26.25 15-35.625s22.5-15 35.625-15h223.125v-223.125c0-15 5.625-26.25 15-35.625 9.375-11.25 22.5-15 37.5-15h101.25c15 0 28.125 3.75 37.5 15 9.375 9.375 15 20.625 15 35.625v223.125h223.125c13.125 0 26.25 5.625 35.625 15s15 22.5 15 35.625z" + ], + "defaultCode": 116, + "grid": 16 + }, + "properties": { + "id": 19, + "order": 21, + "prevSize": 32, + "code": 116, + "name": "uni74", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 20 + }, + { + "icon": { + "paths": [ + "M330 256c0-20-8-38-22-52s-32-22-52-22c-20 0-38 8-52 22-14 14-22 32-22 52 0 20 8 38 22 52 14 14 32 22 52 22 20 0 38-8 52-22 14-14 22-32 22-52zM938 586c0 20-6 36-20 50l-280 282c-16 14-34 20-52 20-22 0-38-6-52-20l-408-410c-16-14-28-32-38-58-10-24-14-46-14-66v-238c0-20 6-36 20-52 16-14 32-20 52-20h238c20 0 42 4 66 14 26 10 44 22 60 38l408 408c14 14 20 32 20 52z" + ], + "defaultCode": 117, + "grid": 16 + }, + "properties": { + "id": 20, + "order": 22, + "prevSize": 32, + "code": 117, + "name": "uni75", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 21 + }, + { + "icon": { + "paths": [ + "M942.664 570.367c0 8.789-5.273 19.336-14.063 31.641l-158.203 184.57c-12.305 15.82-31.641 29.883-56.25 40.43-24.609 12.305-45.703 17.578-66.797 17.578h-509.766c-10.547 0-21.094-1.758-28.125-7.031-8.789-3.516-14.063-10.547-14.063-19.336 0-10.547 5.273-21.094 15.82-31.641l156.445-184.57c14.063-17.578 33.398-29.883 56.25-42.188 24.609-10.547 47.461-15.82 68.555-15.82h509.766c10.547 0 19.336 1.758 28.125 5.273 8.789 5.273 12.305 12.305 12.305 21.094zM782.703 408.648v75.586h-390.234c-29.883 0-59.766 7.031-93.164 22.852-31.641 14.063-58.008 33.398-77.344 54.492l-156.445 186.328-3.516 3.516c0-1.758 0-3.516 0-7.031 0-1.758 0-3.516 0-5.273v-450c0-28.125 10.547-52.734 31.641-73.828 19.336-21.094 43.945-31.641 73.828-31.641h149.414c28.125 0 52.734 10.547 73.828 31.641s31.641 45.703 31.641 73.828v14.063h254.883c28.125 0 52.734 10.547 73.828 31.641s31.641 45.703 31.641 73.828z" + ], + "defaultCode": 118, + "grid": 16 + }, + "properties": { + "id": 21, + "order": 23, + "prevSize": 32, + "code": 118, + "name": "uni76", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 22 + }, + { + "icon": { + "paths": [ + "M658 512c0-40-14-74-42-104-30-28-64-42-104-42-40 0-74 14-104 42-28 30-42 64-42 104 0 40 14 74 42 104 30 28 64 42 104 42 40 0 74-14 104-42 28-30 42-64 42-104zM950 450v126c0 6 0 10-4 14-2 4-6 6-12 8l-104 16c-8 20-16 38-24 52 14 18 34 44 62 78 4 4 6 10 6 14 0 6-2 10-6 14-10 14-28 34-56 62-28 26-46 40-54 40-4 0-10-2-14-6l-80-62c-16 10-34 16-52 22-6 52-12 88-16 106-2 12-10 16-20 16h-128c-4 0-10 0-14-4s-6-8-6-12l-16-106c-18-6-36-12-52-20l-80 60c-4 4-8 6-14 6s-10-2-14-6c-48-44-80-76-94-96-4-4-4-8-4-14 0-4 0-8 4-12 6-8 16-22 28-38 14-18 24-32 32-42-10-18-18-38-24-56l-104-16c-6 0-10-2-12-6-4-4-4-8-4-14v-126c0-6 0-10 4-14 2-4 6-6 10-8l106-16c6-16 14-34 24-52-16-22-36-48-62-78-4-6-6-10-6-14 0-4 2-8 6-14 10-14 28-34 56-60 28-28 46-42 54-42 4 0 10 2 14 6l80 62c16-10 34-16 52-22 6-52 12-88 16-106 2-12 10-16 20-16h128c4 0 10 0 14 4s6 8 6 12l16 106c18 6 36 12 52 20l80-60c4-4 8-6 14-6s10 2 14 6c50 46 82 78 94 98 4 2 4 6 4 12 0 4 0 8-4 12-6 8-16 22-28 38-14 18-24 32-32 42 10 18 18 36 24 56l104 16c6 0 10 2 12 6 4 4 4 8 4 14z" + ], + "defaultCode": 119, + "grid": 16 + }, + "properties": { + "id": 22, + "order": 24, + "prevSize": 32, + "code": 119, + "name": "uni77", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 23 + }, + { + "icon": { + "paths": [ + "M954 292c0 14-4 28-16 38l-490 492c-12 10-24 16-40 16-14 0-28-6-38-16l-284-284c-12-12-16-24-16-40 0-14 4-28 16-38l76-78c12-10 24-16 40-16 14 0 28 6 38 16l168 168 376-376c10-10 24-16 38-16 16 0 28 6 40 16l76 78c12 12 16 24 16 40z" + ], + "defaultCode": 120, + "grid": 16 + }, + "properties": { + "id": 23, + "order": 25, + "prevSize": 32, + "code": 120, + "name": "uni78", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 24 + }, + { + "icon": { + "paths": [ + "M688 278c0 6-2 10-6 14l-224 224 224 226c4 2 6 8 6 12 0 6-2 10-6 14l-28 28c-4 4-10 6-14 6s-10-2-14-6l-266-266c-4-4-6-8-6-14 0-4 2-8 6-12l266-266c4-4 10-6 14-6s10 2 14 6l28 28c4 4 6 8 6 12z" + ], + "defaultCode": 122, + "grid": 16 + }, + "properties": { + "id": 24, + "order": 26, + "prevSize": 32, + "code": 122, + "name": "uni7A", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 25 + }, + { + "icon": { + "paths": [ + "M464 742l352-350c6-8 10-16 10-26s-4-18-10-26l-58-58c-8-8-16-12-26-12s-20 4-26 12l-268 266-120-120c-6-8-16-10-26-10s-18 2-26 10l-58 58c-6 8-10 16-10 26s4 18 10 26l206 204c6 8 14 12 24 12s20-4 26-12zM950 238v548c0 46-16 84-48 116s-70 48-116 48h-548c-46 0-84-16-116-48s-48-70-48-116v-548c0-46 16-84 48-116s70-48 116-48h548c46 0 84 16 116 48s48 70 48 116z" + ], + "defaultCode": 65, + "grid": 16 + }, + "properties": { + "id": 25, + "order": 27, + "prevSize": 32, + "code": 65, + "name": "uni41", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 26 + }, + { + "icon": { + "paths": [ + "M768 548v-72c0-10-4-20-10-26-8-8-16-12-26-12h-146v-146c0-10-4-18-12-26-6-6-16-10-26-10h-72c-10 0-20 4-26 10-8 8-12 16-12 26v146h-146c-10 0-18 4-26 12-6 6-10 16-10 26v72c0 10 4 20 10 26 8 8 16 12 26 12h146v146c0 10 4 18 12 26 6 6 16 10 26 10h72c10 0 20-4 26-10 8-8 12-16 12-26v-146h146c10 0 18-4 26-12 6-6 10-16 10-26zM950 512c0 80-18 154-58 220-40 68-92 120-160 160-66 40-140 58-220 58-80 0-154-18-220-58-68-40-120-92-160-160-40-66-58-140-58-220 0-80 18-154 58-220 40-68 92-120 160-160 66-40 140-58 220-58 80 0 154 18 220 58 68 40 120 92 160 160 40 66 58 140 58 220z" + ], + "defaultCode": 66, + "grid": 16 + }, + "properties": { + "id": 26, + "order": 28, + "prevSize": 32, + "code": 66, + "name": "uni42", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 27 + }, + { + "icon": { + "paths": [ + "M374.935 845.58c-132.111-37.981-510.278-204.772-80.918-756.335 231.193 156.882 320.369 295.598 336.881 409.543-110.643 39.633-186.607 117.249-176.698 257.617-61.102-143.671-108.992-343.488-128.808-467.342-9.908 145.322 11.559 402.938 49.541 556.517zM521.908 880.259c-31.377-87.523-97.433-376.516 397.984-361.654 14.863 454.132-226.239 437.617-333.58 406.24 44.587-87.523 102.385-166.791 175.047-232.846-89.176 49.541-170.093 112.294-239.452 188.258z" + ], + "defaultCode": 68, + "grid": 16 + }, + "properties": { + "id": 27, + "order": 29, + "prevSize": 32, + "code": 68, + "name": "uni44", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 28 + }, + { + "icon": { + "paths": [ + "M431.375 847.625c28.125 11.25 52.5 16.875 75 16.875 46.875 0 86.25-7.5 116.25-22.5s52.5-35.625 65.625-60c13.125-26.25 20.625-58.125 20.625-97.5 0-41.25-7.5-73.125-22.5-95.625-20.625-33.75-45-56.25-75-67.5-28.125-13.125-73.125-18.75-133.125-18.75-26.25 0-43.125 1.875-54.375 5.625v170.625l1.875 144.375c0 5.625 1.875 13.125 5.625 24.375zM423.875 446.375c16.875 3.75 35.625 3.75 60 3.75 61.875 0 108.75-11.25 140.625-33.75 31.875-24.375 46.875-63.75 46.875-120 0-39.375-15-73.125-45-101.25-30-26.25-75-39.375-136.875-39.375-18.75 0-41.25 1.875-69.375 7.5 0 15 0 28.125 1.875 41.25 1.875 43.125 3.75 93.75 1.875 148.125v52.5c0 16.875 0 30 0 41.25zM135.125 922.625v-48.75c16.875-3.75 28.125-5.625 37.5-7.5 28.125-3.75 48.75-9.375 65.625-16.875 5.625-9.375 9.375-18.75 11.25-26.25 3.75-24.375 5.625-58.125 5.625-105l-1.875-266.25c-1.875-90-3.75-163.125-5.625-215.625 0-31.875-1.875-50.625-5.625-58.125 0-1.875-1.875-3.75-5.625-7.5-7.5-3.75-18.75-5.625-37.5-7.5-11.25 0-30-3.75-60-7.5l-3.75-43.125 140.625-3.75 202.5-7.5h24.375c1.875 0 3.75 0 7.5 0s5.625 0 7.5 0c0 0 3.75 0 11.25 0s15 0 22.5 0h39.375c31.875 0 65.625 3.75 103.125 15 15 3.75 31.875 11.25 50.625 20.625 20.625 9.375 39.375 22.5 54.375 39.375 16.875 16.875 28.125 35.625 35.625 56.25s11.25 43.125 11.25 65.625c0 24.375-5.625 48.75-16.875 69.375-13.125 20.625-30 39.375-52.5 56.25-9.375 5.625-35.625 20.625-78.75 41.25 61.875 13.125 110.625 39.375 142.5 76.875s48.75 80.625 48.75 127.5c0 26.25-5.625 56.25-15 86.25-7.5 22.5-20.625 43.125-37.5 61.875-24.375 26.25-48.75 45-75 58.125s-63.75 24.375-108.75 31.875c-30 5.625-65.625 7.5-106.875 5.625l-105-1.875c-30 0-84.375 1.875-159.375 5.625-13.125 1.875-61.875 3.75-146.25 5.625z" + ], + "defaultCode": 67, + "grid": 16 + }, + "properties": { + "id": 28, + "order": 30, + "prevSize": 32, + "code": 67, + "name": "uni43", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 29 + }, + { + "icon": { + "paths": [ + "M238.25 922.625l9.375-45c0-1.875 15-5.625 41.25-11.25 26.25-7.5 46.875-13.125 61.875-20.625 9.375-13.125 16.875-31.875 20.625-54.375l15-75 37.5-178.125c1.875-15 5.625-30 7.5-45 3.75-15 7.5-26.25 9.375-35.625s5.625-16.875 7.5-24.375c1.875-7.5 1.875-13.125 3.75-16.875s1.875-5.625 1.875-5.625l15-84.375 9.375-33.75 11.25-73.125 5.625-26.25v-20.625c-15-7.5-41.25-13.125-78.75-15-9.375 0-16.875-1.875-18.75-1.875l9.375-54.375 170.625 7.5c13.125 0 26.25 0 37.5 0 24.375 0 61.875-1.875 116.25-3.75 11.25-1.875 22.5-1.875 35.625-3.75 13.125 0 18.75 0 18.75 0 0 5.625-1.875 13.125-1.875 18.75-3.75 11.25-5.625 20.625-7.5 28.125-20.625 7.5-39.375 13.125-58.125 16.875-22.5 5.625-41.25 11.25-54.375 16.875-3.75 11.25-9.375 26.25-13.125 46.875-3.75 15-5.625 30-7.5 43.125-15 71.25-26.25 125.625-35.625 165l-31.875 166.875-20.625 84.375-22.5 125.625-7.5 24.375c0 1.875 0 7.5 1.875 13.125 22.5 5.625 43.125 9.375 63.75 11.25 13.125 1.875 24.375 3.75 35.625 5.625-1.875 11.25-1.875 20.625-3.75 31.875-3.75 11.25-5.625 18.75-5.625 22.5-5.625 0-11.25 0-13.125 0-7.5 0-15 0-22.5 0-1.875 0-7.5 0-15 0-5.625-1.875-31.875-5.625-76.875-9.375l-106.875-1.875c-13.125 0-45 1.875-91.875 5.625-26.25 3.75-45 3.75-52.5 5.625z" + ], + "defaultCode": 69, + "grid": 16 + }, + "properties": { + "id": 29, + "order": 31, + "prevSize": 32, + "code": 69, + "name": "uni45", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 30 + }, + { + "icon": { + "paths": [ + "M271.399 752.601c0 26.367-9.888 46.143-26.367 64.27-18.127 18.128-39.551 26.367-64.27 26.367s-46.143-8.24-64.27-26.367c-18.128-18.128-26.367-37.903-26.367-64.27 0-24.719 8.24-46.143 26.367-64.27 18.127-16.479 39.551-26.367 64.27-26.367s46.143 9.888 64.27 26.367c16.479 18.128 26.367 39.551 26.367 64.27zM271.399 512c0 24.719-9.888 46.143-26.367 64.27-18.127 18.128-39.551 26.367-64.27 26.367s-46.143-8.24-64.27-26.367c-18.128-18.128-26.367-39.551-26.367-64.27s8.24-46.143 26.367-64.27c18.127-18.127 39.551-26.367 64.27-26.367s46.143 8.24 64.27 26.367c16.479 18.127 26.367 39.551 26.367 64.27zM933.875 708.106v90.637c0 3.296-1.648 6.592-4.943 9.888s-6.592 4.943-9.888 4.943h-573.487c-3.296 0-6.592-1.648-9.888-4.943s-4.943-6.592-4.943-9.888v-90.638c0-4.943 1.648-8.24 4.943-11.536 3.296-1.648 6.592-3.296 9.888-3.296h573.487c3.296 0 6.592 1.648 9.888 3.296 3.296 3.296 4.943 6.592 4.943 11.536zM271.399 271.399c0 24.719-9.888 46.143-26.367 64.27-18.127 16.479-39.551 26.367-64.27 26.367s-46.143-9.888-64.27-26.367c-18.128-18.127-26.367-39.551-26.367-64.27 0-26.367 8.24-46.143 26.367-64.27s39.551-26.367 64.27-26.367c24.719 0 46.143 8.24 64.27 26.367 16.479 18.127 26.367 37.903 26.367 64.27zM933.875 467.505v88.989c0 4.943-1.648 8.24-4.943 11.536s-6.592 4.943-9.888 4.943h-573.487c-3.296 0-6.592-1.648-9.888-4.943s-4.943-6.592-4.943-11.536v-88.989c0-4.943 1.648-8.24 4.943-11.536s6.592-4.943 9.888-4.943h573.487c3.296 0 6.592 1.648 9.888 4.943s4.943 6.592 4.943 11.536zM933.875 225.257v90.638c0 4.943-1.648 8.24-4.943 11.536-3.296 1.648-6.592 3.296-9.888 3.296h-573.487c-3.296 0-6.592-1.648-9.888-3.296-3.296-3.296-4.943-6.592-4.943-11.536v-90.637c0-3.296 1.648-6.592 4.943-9.888s6.592-4.943 9.888-4.943h573.487c3.296 0 6.592 1.648 9.888 4.943s4.943 6.592 4.943 9.888z" + ], + "defaultCode": 70, + "grid": 16 + }, + "properties": { + "id": 30, + "order": 32, + "prevSize": 32, + "code": 70, + "name": "uni46", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 31 + }, + { + "icon": { + "paths": [ + "M284.893 831.805c0 23.174-7.725 41.714-24.719 55.618-15.449 13.904-35.534 20.085-58.708 20.085-32.444 0-57.163-9.27-77.248-29.354l26.264-38.623c13.904 13.904 29.354 20.085 46.348 20.085 9.27 0 15.449-3.090 21.629-6.18 7.725-4.634 10.815-10.815 10.815-18.54 0-20.085-15.449-27.809-46.348-24.719l-12.36-24.719c3.090-3.090 7.725-9.27 13.904-20.085 7.725-9.27 13.904-16.994 20.085-23.174 4.634-6.18 10.815-12.36 15.449-16.995v-1.545c-4.634 0-12.36 1.545-21.629 1.545s-16.994 0-21.629 0v23.174h-46.348v-66.433h146.77v38.623l-41.714 50.984c15.449 3.090 27.809 10.815 35.534 21.629 9.27 10.815 13.904 23.174 13.904 38.623zM284.893 555.259v69.523h-159.13c-1.545-10.815-3.090-18.54-3.090-23.174 0-15.449 4.634-29.354 10.815-41.714s15.449-21.629 24.719-29.354c9.27-7.725 20.085-15.449 29.354-21.629s18.54-12.36 24.719-18.54c7.725-6.18 10.815-13.904 10.815-20.085 0-7.725-3.090-13.904-6.18-16.994-4.634-4.634-10.815-6.18-18.54-6.18-12.36 0-24.719 9.27-35.534 26.264l-37.079-26.264c7.725-15.449 16.994-27.809 30.899-35.534s30.899-12.36 47.893-12.36c20.085 0 38.623 6.18 54.073 18.54 13.904 12.36 21.629 27.809 21.629 49.438 0 13.904-4.634 27.809-15.449 40.169-9.27 12.36-20.085 21.629-32.444 27.809-12.36 7.725-23.174 15.449-33.989 23.174-9.27 7.725-15.449 15.449-15.449 23.174h55.618v-26.264zM907.508 695.849v84.972c0 3.090-1.545 6.18-4.634 9.27s-6.18 4.634-9.27 4.634h-537.644c-3.090 0-6.18-1.545-9.27-4.634s-4.634-6.18-4.634-9.27v-84.973c0-4.634 1.545-7.725 4.634-10.815 3.090-1.545 6.18-3.090 9.27-3.090h537.644c3.090 0 6.18 1.545 9.27 3.090 3.090 3.090 4.634 6.18 4.634 10.815zM286.437 298.797v43.259h-148.315v-43.259h47.893c0-12.36 0-29.354 0-54.073 0-23.174 0-41.714 0-52.529v-6.18h-1.545c-1.545 4.634-9.27 13.904-21.629 24.719l-30.899-33.989 60.253-55.618h46.348v177.669zM907.508 470.286v83.427c0 4.634-1.545 7.725-4.634 10.815s-6.18 4.634-9.27 4.634h-537.644c-3.090 0-6.18-1.545-9.27-4.634s-4.634-6.18-4.634-10.815v-83.427c0-4.634 1.545-7.725 4.634-10.815s6.18-4.634 9.27-4.634h537.644c3.090 0 6.18 1.545 9.27 4.634s4.634 6.18 4.634 10.815zM907.508 243.178v84.973c0 4.634-1.545 7.725-4.634 10.815-3.090 1.545-6.18 3.090-9.27 3.090h-537.644c-3.090 0-6.18-1.545-9.27-3.090-3.090-3.090-4.634-6.18-4.634-10.815v-84.972c0-3.090 1.545-6.18 4.634-9.27s6.18-4.634 9.27-4.634h537.644c3.090 0 6.18 1.545 9.27 4.634s4.634 6.18 4.634 9.27z" + ], + "defaultCode": 71, + "grid": 16 + }, + "properties": { + "id": 31, + "order": 33, + "prevSize": 32, + "code": 71, + "name": "uni47", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 32 + }, + { + "icon": { + "paths": [ + "M922.625 512c0 56.25-9.375 108.75-31.875 159.375s-50.625 95.625-88.125 131.25c-35.625 37.5-80.625 65.625-131.25 88.125s-103.125 31.875-159.375 31.875c-61.875 0-120-11.25-174.375-37.5-56.25-26.25-103.125-63.75-142.5-110.625-1.875-3.75-3.75-7.5-3.75-11.25 0-5.625 1.875-7.5 5.625-11.25l73.125-73.125c3.75-3.75 7.5-5.625 13.125-5.625s9.375 3.75 13.125 5.625c24.375 35.625 58.125 61.875 95.625 78.75 37.5 18.75 76.875 28.125 120 28.125 37.5 0 73.125-7.5 106.875-20.625 33.75-15 61.875-33.75 86.25-60 26.25-24.375 45-52.5 60-86.25 13.125-33.75 20.625-69.375 20.625-106.875s-7.5-73.125-20.625-106.875c-15-33.75-33.75-61.875-60-86.25-24.375-26.25-52.5-45-86.25-60-33.75-13.125-69.375-20.625-106.875-20.625-35.625 0-69.375 5.625-101.25 18.75s-60 30-84.375 54.375l73.125 73.125c11.25 11.25 13.125 24.375 7.5 37.5-7.5 15-16.875 20.625-31.875 20.625h-240c-9.375 0-16.875-1.875-24.375-9.375s-9.375-15-9.375-24.375v-240c0-15 5.625-24.375 20.625-31.875 13.125-5.625 26.25-3.75 37.5 7.5l69.375 69.375c37.5-35.625 82.5-63.75 131.25-84.375 48.75-18.75 99.375-28.125 151.875-28.125 56.25 0 108.75 9.375 159.375 31.875s95.625 50.625 131.25 88.125c37.5 35.625 65.625 80.625 88.125 131.25s31.875 103.125 31.875 159.375z" + ], + "defaultCode": 72, + "grid": 16 + }, + "properties": { + "id": 32, + "order": 34, + "prevSize": 32, + "code": 72, + "name": "uni48", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 33 + }, + { + "icon": { + "paths": [ + "M922.625 168.875v240c0 9.375-1.875 16.875-9.375 24.375s-15 9.375-24.375 9.375h-240c-15 0-24.375-5.625-31.875-20.625-5.625-13.125-3.75-26.25 7.5-37.5l75-73.125c-52.5-48.75-116.25-73.125-187.5-73.125-37.5 0-73.125 7.5-106.875 20.625-33.75 15-61.875 33.75-86.25 60-26.25 24.375-45 52.5-60 86.25-13.125 33.75-20.625 69.375-20.625 106.875s7.5 73.125 20.625 106.875c15 33.75 33.75 61.875 60 86.25 24.375 26.25 52.5 45 86.25 60 33.75 13.125 69.375 20.625 106.875 20.625 43.125 0 82.5-9.375 120-28.125 37.5-16.875 71.25-43.125 95.625-78.75 3.75-1.875 7.5-5.625 13.125-5.625s9.375 1.875 13.125 5.625l73.125 73.125c3.75 3.75 5.625 5.625 5.625 11.25 0 3.75-1.875 7.5-3.75 11.25-39.375 46.875-86.25 84.375-142.5 110.625-54.375 26.25-112.5 37.5-174.375 37.5-56.25 0-108.75-9.375-159.375-31.875s-95.625-50.625-131.25-88.125c-37.5-35.625-65.625-80.625-88.125-131.25s-31.875-103.125-31.875-159.375c0-56.25 9.375-108.75 31.875-159.375s50.625-95.625 88.125-131.25c35.625-37.5 80.625-65.625 131.25-88.125s103.125-31.875 159.375-31.875c52.5 0 103.125 9.375 151.875 28.125 48.75 20.625 93.75 48.75 131.25 84.375l69.375-69.375c11.25-11.25 22.5-13.125 37.5-7.5 15 7.5 20.625 16.875 20.625 31.875z" + ], + "defaultCode": 73, + "grid": 16 + }, + "properties": { + "id": 33, + "order": 35, + "prevSize": 32, + "code": 73, + "name": "uni49", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 34 + }, + { + "icon": { + "paths": [ + "M824.891 703.961c0-12.305-3.516-24.609-14.063-33.398l-103.711-103.711c-8.789-10.547-21.094-14.063-35.156-14.063s-24.609 5.273-35.156 15.82c0 0 3.516 3.516 8.789 8.789s8.789 8.789 10.547 10.547c1.758 1.758 5.273 5.273 8.789 10.547 3.516 3.516 5.273 7.031 5.273 12.305 1.758 3.516 1.758 8.789 1.758 14.063 0 12.305-3.516 24.609-14.063 33.398-8.789 8.789-19.336 14.063-33.398 14.063-5.273 0-8.789 0-14.063-1.758-3.516-1.758-8.789-3.516-12.305-7.031-5.273-1.758-7.031-5.273-10.547-7.031-1.758-1.758-5.273-5.273-10.547-10.547s-7.031-8.789-8.789-8.789c-10.547 8.789-15.82 21.094-15.82 35.156s3.516 26.367 14.063 35.156l101.953 103.711c10.547 8.789 21.094 14.063 35.156 14.063 12.305 0 24.609-5.273 33.398-14.063l73.828-72.070c10.547-10.547 14.063-21.094 14.063-35.156zM471.57 350.641c0-14.063-3.516-24.609-14.063-33.398l-101.953-105.469c-10.547-8.789-21.094-14.063-35.156-14.063-12.305 0-24.609 5.273-33.398 14.063l-73.828 73.828c-10.547 8.789-14.063 21.094-14.063 33.398 0 14.063 3.516 24.609 14.063 33.398l103.711 105.469c8.789 8.789 21.094 14.063 35.156 14.063s24.609-5.273 35.156-15.82c0-1.758-3.516-5.273-8.789-10.547s-8.789-8.789-10.547-10.547c-1.758-1.758-5.273-5.273-8.789-8.789-3.516-5.273-5.273-8.789-5.273-12.305-1.758-5.273-1.758-8.789-1.758-14.063 0-14.063 3.516-24.609 14.063-35.156 8.789-8.789 19.336-14.063 33.398-14.063 5.273 0 8.789 1.758 14.063 1.758 3.516 1.758 8.789 3.516 12.305 7.031 5.273 3.516 7.031 5.273 10.547 7.031 1.758 1.758 5.273 5.273 10.547 10.547s7.031 8.789 8.789 10.547c10.547-10.547 15.82-22.852 15.82-36.914zM921.57 703.961c0 40.43-14.063 75.586-42.188 101.953l-73.828 73.828c-28.125 28.125-61.523 42.188-101.953 42.188s-75.586-14.063-101.953-42.188l-103.711-105.469c-28.125-26.367-42.188-61.523-42.188-101.953s14.063-75.586 43.945-103.711l-43.945-43.945c-28.125 28.125-63.281 43.945-103.711 43.945s-75.586-14.063-103.711-42.188l-103.711-105.469c-28.125-28.125-42.188-61.523-42.188-101.953s14.063-73.828 42.188-101.953l73.828-73.828c28.125-28.125 61.523-40.43 101.953-40.43s75.586 14.063 101.953 42.188l103.711 103.711c28.125 28.125 42.188 61.523 42.188 101.953s-14.063 75.586-43.945 105.469l43.945 43.945c28.125-29.883 63.281-43.945 103.711-43.945s75.586 14.063 103.711 42.188l103.711 103.711c28.125 28.125 42.188 63.281 42.188 101.953z" + ], + "defaultCode": 74, + "grid": 16 + }, + "properties": { + "id": 34, + "order": 36, + "prevSize": 32, + "code": 74, + "name": "uni4A", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 35 + }, + { + "icon": { + "paths": [ + "M950 512c0 80-18 154-58 220-40 68-92 120-160 160-66 40-140 58-220 58-80 0-154-18-220-58-68-40-120-92-160-160-40-66-58-140-58-220 0-80 18-154 58-220 40-68 92-120 160-160 66-40 140-58 220-58 80 0 154 18 220 58 68 40 120 92 160 160 40 66 58 140 58 220z" + ], + "defaultCode": 75, + "grid": 16 + }, + "properties": { + "id": 35, + "order": 37, + "prevSize": 32, + "code": 75, + "name": "uni4B", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 36 + }, + { + "icon": { + "paths": [ + "M512 202c-56 0-108 14-156 40-48 28-86 66-114 114-26 48-40 100-40 156 0 56 14 108 40 156 28 48 66 86 114 114 48 26 100 40 156 40 56 0 108-14 156-40 48-28 86-66 114-114 26-48 40-100 40-156 0-56-14-108-40-156-28-48-66-86-114-114-48-26-100-40-156-40zM950 512c0 80-18 154-58 220-40 68-92 120-160 160-66 40-140 58-220 58-80 0-154-18-220-58-68-40-120-92-160-160-40-66-58-140-58-220 0-80 18-154 58-220 40-68 92-120 160-160 66-40 140-58 220-58 80 0 154 18 220 58 68 40 120 92 160 160 40 66 58 140 58 220z" + ], + "defaultCode": 76, + "grid": 16 + }, + "properties": { + "id": 36, + "order": 38, + "prevSize": 32, + "code": 76, + "name": "uni4C", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 37 + }, + { + "icon": { + "paths": [ + "M958 694c0 22-8 38-22 52l-42 44c-16 14-32 20-52 20-22 0-38-6-52-20l-278-278-278 278c-14 14-30 20-52 20-20 0-36-6-50-20l-44-44c-14-14-22-30-22-52 0-20 8-36 22-52l372-372c14-14 32-20 52-20s38 6 52 20l372 372c14 16 22 32 22 52z" + ], + "defaultCode": 77, + "grid": 16 + }, + "properties": { + "id": 37, + "order": 39, + "prevSize": 32, + "code": 77, + "name": "uni4D", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 38 + }, + { + "icon": { + "paths": [ + "M958 402c0 20-8 38-22 52l-372 372c-14 14-32 22-52 22s-38-8-52-22l-372-372c-14-14-22-32-22-52s8-38 22-52l42-42c16-14 34-22 52-22 22 0 38 8 52 22l278 278 278-278c14-14 30-22 52-22 18 0 36 8 52 22l42 42c14 16 22 32 22 52z" + ], + "defaultCode": 78, + "grid": 16 + }, + "properties": { + "id": 38, + "order": 40, + "prevSize": 32, + "code": 78, + "name": "uni4E", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 39 + }, + { + "icon": { + "paths": [ + "M350.501 512c-47.791 1.648-85.693 19.776-117.005 56.031h-57.678c-24.719 0-44.495-4.943-60.974-18.128-16.479-11.536-24.719-28.015-24.719-51.086 0-103.821 18.127-154.907 54.382-154.907 1.648 0 8.24 1.648 19.776 8.24 9.888 6.592 24.719 13.184 42.847 19.776 16.479 4.943 34.607 8.24 51.086 8.24 19.776 0 39.551-3.296 59.326-9.888-1.648 11.536-1.648 21.424-1.648 29.663 0 39.551 11.536 77.453 34.607 112.060zM821.815 792.151c0 34.607-11.536 62.622-32.959 82.398-21.424 21.424-49.438 31.311-84.045 31.311h-385.62c-34.607 0-62.622-9.888-84.045-31.311-21.424-19.776-32.959-47.791-32.959-82.398 0-16.479 1.648-31.311 1.648-46.143 1.648-14.831 3.296-29.663 6.592-47.791 3.296-16.479 6.592-32.959 11.536-47.791s11.536-28.015 18.128-42.847c8.24-13.184 18.127-24.719 28.015-34.607s23.071-18.127 37.903-24.719c14.831-4.943 31.311-8.24 49.438-8.24 1.648 0 8.24 3.296 18.128 9.888s19.776 13.184 31.311 21.424c13.184 6.592 28.015 14.831 47.791 19.776 19.776 6.592 39.551 9.888 59.326 9.888s39.551-3.296 59.326-9.888c19.776-4.943 34.607-13.184 47.791-19.776 11.536-8.24 21.424-14.831 31.311-21.424s16.479-9.888 18.127-9.888c18.128 0 34.607 3.296 49.438 8.24 14.831 6.592 28.015 14.831 37.903 24.719s19.776 21.424 28.015 34.607c6.592 14.831 13.184 28.015 18.127 42.847s8.24 31.311 11.536 47.791c3.296 18.128 4.943 32.959 6.592 47.791 0 14.831 1.648 29.663 1.648 46.143zM371.924 230.201c0 31.311-11.536 57.678-32.959 80.75-23.071 21.424-49.438 32.959-80.75 32.959-29.663 0-57.678-11.536-79.102-32.959-21.424-23.071-32.959-49.438-32.959-80.75s11.536-57.678 32.959-79.102c21.424-21.424 49.438-32.959 79.102-32.959 31.311 0 57.678 11.536 80.75 32.959 21.424 21.424 32.959 47.791 32.959 79.102zM680.091 399.94c0 46.143-16.479 85.693-49.438 118.653s-72.51 49.438-118.653 49.438c-46.143 0-85.693-16.479-118.653-49.438s-49.438-72.51-49.438-118.653c0-47.791 16.479-87.341 49.438-120.3s72.51-49.438 118.653-49.438c46.143 0 85.693 16.479 118.653 49.438s49.438 72.51 49.438 120.3zM933.875 498.817c0 23.071-8.24 39.551-24.719 51.086-16.479 13.184-36.255 18.128-60.974 18.128h-57.678c-31.311-36.255-69.214-54.383-117.005-56.031 23.071-34.607 34.607-72.51 34.607-112.060 0-8.24 0-18.127-1.648-29.663 19.776 6.592 39.551 9.888 59.326 9.888 16.479 0 34.607-3.296 51.086-8.24 18.128-6.592 32.959-13.184 42.847-19.776 11.536-6.592 18.128-8.24 19.776-8.24 36.255 0 54.383 51.086 54.383 154.907zM877.844 230.201c0 31.311-11.536 57.678-32.959 80.75-21.424 21.424-49.438 32.959-79.102 32.959-31.311 0-57.678-11.536-80.75-32.959-21.424-23.071-32.959-49.438-32.959-80.75s11.536-57.678 32.959-79.102c23.071-21.424 49.438-32.959 80.75-32.959 29.663 0 57.678 11.536 79.102 32.959s32.959 47.791 32.959 79.102z" + ], + "defaultCode": 79, + "grid": 16 + }, + "properties": { + "id": 39, + "order": 41, + "prevSize": 32, + "code": 79, + "name": "uni4F", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 40 + }, + { + "icon": { + "paths": [ + "M750 512c0 14-6 24-18 32l-312 182c-6 4-12 6-18 6s-12-2-18-6-18-18-18-32v-364c0-14 6-26 18-32 12-8 24-8 36 0l312 182c12 8 18 18 18 32zM822 512c0-56-14-108-40-156-28-48-66-86-114-114-48-26-100-40-156-40-56 0-108 14-156 40-48 28-86 66-114 114-26 48-40 100-40 156 0 56 14 108 40 156 28 48 66 86 114 114 48 26 100 40 156 40 56 0 108-14 156-40 48-28 86-66 114-114 26-48 40-100 40-156zM950 512c0 80-18 154-58 220-40 68-92 120-160 160-66 40-140 58-220 58-80 0-154-18-220-58-68-40-120-92-160-160-40-66-58-140-58-220 0-80 18-154 58-220 40-68 92-120 160-160 66-40 140-58 220-58 80 0 154 18 220 58 68 40 120 92 160 160 40 66 58 140 58 220z" + ], + "defaultCode": 80, + "grid": 16 + }, + "properties": { + "id": 40, + "order": 42, + "prevSize": 32, + "code": 80, + "name": "uni50", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 41 + }, + { + "icon": { + "paths": [ + "M512.359 318.641c0-26.367-10.547-49.219-28.125-68.555-19.336-17.578-42.188-28.125-68.555-28.125s-49.219 10.547-68.555 28.125c-19.336 19.336-28.125 42.188-28.125 68.555 0 14.063 3.516 28.125 8.789 42.188-12.305-7.031-26.367-8.789-40.43-8.789-28.125 0-49.219 8.789-68.555 28.125-19.336 17.578-28.125 40.43-28.125 66.797 0 28.125 8.789 50.977 28.125 68.555 19.336 19.336 40.43 28.125 68.555 28.125 26.367 0 49.219-8.789 68.555-28.125 17.578-17.578 28.125-40.43 28.125-68.555 0-14.063-3.516-26.367-10.547-40.43 14.063 5.273 28.125 8.789 42.188 8.789 26.367 0 49.219-8.789 68.555-28.125 17.578-19.336 28.125-40.43 28.125-68.555zM939.508 671.961c0 7.031-8.789 17.578-24.609 33.398-15.82 17.578-28.125 24.609-33.398 24.609-3.516 0-7.031-1.758-14.063-7.031s-12.305-10.547-19.336-17.578c-5.273-5.273-10.547-12.305-19.336-19.336-7.031-8.789-10.547-12.305-12.305-14.063l-47.461 49.219 110.742 110.742c8.789 8.789 14.063 21.094 14.063 33.398 0 14.063-7.031 28.125-19.336 40.43-14.063 14.063-26.367 19.336-40.43 19.336s-26.367-3.516-35.156-14.063l-337.5-335.742c-58.008 43.945-119.531 65.039-182.813 65.039-54.492 0-98.438-17.578-133.594-50.977-33.398-35.156-50.977-79.102-50.977-133.594 0-52.734 15.82-105.469 47.461-156.445 31.641-52.734 73.828-93.164 124.805-124.805s103.711-47.461 156.445-47.461c54.492 0 100.195 15.82 133.594 50.977 35.156 33.398 52.734 79.102 52.734 133.594 0 63.281-22.852 123.047-66.797 182.813l179.297 177.539 47.461-47.461c-1.758-1.758-5.273-5.273-12.305-12.305-8.789-7.031-15.82-14.063-21.094-19.336s-10.547-12.305-15.82-17.578c-5.273-7.031-8.789-12.305-8.789-15.82 0-5.273 8.789-15.82 24.609-31.641 15.82-17.578 28.125-24.609 33.398-24.609 3.516 0 8.789 1.758 12.305 3.516 1.758 3.516 8.789 10.547 22.852 22.852 12.305 12.305 26.367 26.367 40.43 40.43s28.125 28.125 43.945 42.188c14.063 15.82 26.367 28.125 36.914 40.43 8.789 10.547 14.063 17.578 14.063 19.336z" + ], + "defaultCode": 81, + "grid": 16 + }, + "properties": { + "id": 41, + "order": 43, + "prevSize": 32, + "code": 81, + "name": "uni51", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 42 + }, + { + "icon": { + "paths": [ + "M751.063 712.391c123.047 42.188 184.57 79.102 184.57 108.984 0 0 0 94.922 0 94.922s-423.633 0-423.633 0c0 0-423.633 0-423.633 0s0-94.922 0-94.922c0-29.883 61.523-66.797 184.57-108.984 56.25-21.094 94.922-42.188 114.258-63.281 21.094-21.094 31.641-49.219 31.641-84.375 0-14.063-7.031-28.125-21.094-43.945-12.305-17.578-21.094-38.672-28.125-66.797-1.758-7.031-3.516-12.305-8.789-15.82-3.516-3.516-7.031-5.273-12.305-7.031-3.516-1.758-7.031-7.031-12.305-15.82-3.516-8.789-7.031-21.094-7.031-38.672 0-8.789 0-17.578 3.516-22.852 3.516-7.031 5.273-10.547 8.789-10.547 0 0 3.516-3.516 3.516-3.516-5.273-29.883-8.789-56.25-10.547-79.102-3.516-33.398 8.789-66.797 36.914-101.953 26.367-33.398 73.828-50.977 140.625-50.977s114.258 17.578 142.383 50.977c28.125 35.156 38.672 68.555 35.156 101.953 0 0-10.547 79.102-10.547 79.102 10.547 3.516 15.82 17.578 15.82 36.914 0 17.578-3.516 29.883-7.031 38.672-5.273 8.789-8.789 14.063-12.305 15.82-5.273 1.758-8.789 3.516-12.305 7.031-5.273 3.516-7.031 8.789-8.789 15.82-5.273 29.883-14.063 50.977-28.125 66.797s-21.094 29.883-21.094 43.945c0 35.156 10.547 63.281 31.641 84.375s59.766 42.188 114.258 63.281z" + ], + "defaultCode": 121, + "grid": 16 + }, + "properties": { + "id": 42, + "order": 44, + "prevSize": 32, + "code": 121, + "name": "uni79", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 43 + }, + { + "icon": { + "paths": [ + "M880 246h-376c-20-24-40-50-46-56-4-12-16-20-28-20h-150c-10 0-18 6-26 12l-50 64h-60c-32 0-56 26-56 56v496c0 30 24 56 56 56h736c32 0 56-26 56-56v-496c0-30-24-56-56-56z" + ], + "defaultCode": 82, + "grid": 16 + }, + "properties": { + "id": 43, + "order": 45, + "prevSize": 32, + "code": 82, + "name": "uni52", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 44 + }, + { + "icon": { + "paths": [ + "M766.918 695.849c0-18.54-6.18-35.534-18.54-50.984-13.904-15.449-29.354-23.174-46.348-23.174-15.449 0-27.809 4.634-37.079 15.449-7.725 10.815-12.36 24.719-12.36 41.714s4.634 30.899 15.449 41.714c10.815 12.36 26.264 16.995 46.348 16.995 13.904 0 26.264-3.090 37.079-10.815 10.815-9.27 15.449-18.54 15.449-30.899zM498.096 751.467c0 4.634-1.545 7.725-4.634 10.815l-140.59 140.59c-3.090 3.090-6.18 4.634-10.815 4.634-3.090 0-6.18-1.545-9.27-4.634l-142.136-140.59c-4.634-4.634-4.634-9.27-3.090-15.449 3.090-6.18 7.725-9.27 13.904-9.27h84.972v-607.166c0-4.634 1.545-7.725 3.090-9.27 3.090-3.090 6.18-4.634 10.815-4.634h84.973c3.090 0 7.725 1.545 9.27 4.634 3.090 1.545 4.634 4.634 4.634 9.27v607.166h84.973c3.090 0 7.725 1.545 9.27 4.634 3.090 3.090 4.634 6.18 4.634 9.27zM828.716 722.114c0 18.54-1.545 35.534-6.18 52.529-3.090 18.54-9.27 35.534-16.994 50.984-9.27 15.449-18.54 29.354-30.899 41.714-10.815 12.36-26.264 21.629-43.259 29.354s-35.534 10.815-55.618 10.815c-18.54 0-33.989-3.090-47.893-7.725-7.725-1.545-13.904-4.634-18.54-6.18l16.995-49.438c4.634 1.545 9.27 3.090 13.904 4.634 10.815 3.090 21.629 6.18 32.444 6.18 24.719 0 44.804-9.27 60.253-26.264 13.904-16.994 24.719-38.623 29.354-64.888h-1.545c-6.18 7.725-15.449 12.36-26.264 16.995-12.36 4.634-24.719 6.18-38.623 6.18-30.899 0-55.618-10.815-75.703-30.899-20.085-21.629-29.354-46.348-29.354-77.248s10.815-57.163 30.899-78.792c21.629-20.085 47.893-30.899 80.337-30.899 37.079 0 66.433 13.904 91.152 41.714 23.174 27.809 35.534 64.888 35.534 111.237zM816.356 405.399v49.438h-207.023v-49.438h72.612v-191.574c0-1.545 0-4.634 0-7.725 1.545-3.090 1.545-6.18 1.545-7.725v-6.18h-1.545l-3.090 4.634c-3.090 3.090-6.18 7.725-10.815 13.904l-27.809 24.719-37.079-37.079 84.973-81.882h54.073v288.907z" + ], + "defaultCode": 84, + "grid": 16 + }, + "properties": { + "id": 44, + "order": 46, + "prevSize": 32, + "code": 84, + "name": "uni54", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 45 + }, + { + "icon": { + "paths": [ + "M821.375 562.625v258.75c0 9.375-3.75 16.875-11.25 22.5-5.625 7.5-15 11.25-24.375 11.25h-204.375v-206.25h-138.75v206.25h-204.375c-9.375 0-18.75-3.75-24.375-11.25-7.5-5.625-11.25-13.125-11.25-22.5v-258.75c0 0 0 0 1.875 0 0-1.875 0-1.875 0-1.875l307.5-255 307.5 255c0 0 1.875 1.875 1.875 1.875zM939.5 527l-31.875 39.375c-3.75 3.75-7.5 5.625-11.25 5.625h-1.875c-5.625 0-9.375-1.875-11.25-3.75l-371.25-309.375-371.25 309.375c-3.75 3.75-7.5 3.75-13.125 3.75-3.75 0-7.5-1.875-11.25-5.625l-31.875-39.375c-3.75-3.75-3.75-7.5-3.75-13.125s1.875-9.375 5.625-11.25l384.375-320.625c11.25-9.375 26.25-15 41.25-15s30 5.625 41.25 15l129.375 108.75v-105c0-3.75 1.875-9.375 5.625-11.25 3.75-3.75 7.5-5.625 13.125-5.625h101.25c5.625 0 9.375 1.875 13.125 5.625 3.75 1.875 5.625 7.5 5.625 11.25v219.375l116.25 97.5c3.75 1.875 5.625 5.625 5.625 11.25s0 9.375-3.75 13.125z" + ], + "defaultCode": 87, + "grid": 16 + }, + "properties": { + "id": 45, + "order": 47, + "prevSize": 32, + "code": 87, + "name": "uni57", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 46 + }, + { + "icon": { + "paths": [ + "M703.602 714.148c1.758 7.031 1.758 12.305-3.516 17.578l-175.781 193.359c-1.758 3.516-7.031 5.273-10.547 5.273-5.273 0-8.789-1.758-12.305-5.273l-177.539-193.359c-5.273-5.273-5.273-10.547-3.516-17.578 3.516-5.273 8.789-8.789 14.063-8.789h112.5v-627.539c0-5.273 1.758-8.789 5.273-10.547 3.516-3.516 7.031-5.273 12.305-5.273h94.922c5.273 0 8.789 1.758 12.305 5.273 3.516 1.758 5.273 5.273 5.273 10.547v627.539h112.5c7.031 0 10.547 3.516 14.063 8.789z" + ], + "defaultCode": 88, + "grid": 16 + }, + "properties": { + "id": 46, + "order": 48, + "prevSize": 32, + "code": 88, + "name": "uni58", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 47 + }, + { + "icon": { + "paths": [ + "M703.602 309.852c-3.516 5.273-8.789 8.789-14.063 8.789h-112.5v627.539c0 5.273-1.758 8.789-5.273 10.547-3.516 3.516-7.031 5.273-12.305 5.273h-94.922c-5.273 0-8.789-1.758-12.305-5.273-3.516-1.758-5.273-5.273-5.273-10.547v-627.539h-112.5c-7.031 0-10.547-3.516-14.063-8.789-1.758-7.031-1.758-12.305 3.516-17.578l175.781-193.359c1.758-3.516 7.031-5.273 10.547-5.273 5.273 0 8.789 1.758 12.305 5.273l177.539 193.359c5.273 5.273 5.273 10.547 3.516 17.578z" + ], + "defaultCode": 89, + "grid": 16 + }, + "properties": { + "id": 47, + "order": 49, + "prevSize": 32, + "code": 89, + "name": "uni59", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 48 + }, + { + "icon": { + "paths": [ + "M402 420v330c0 6-2 10-4 12-4 4-8 6-14 6h-36c-6 0-10-2-14-6-4-2-4-6-4-12v-330c0-4 0-10 4-12 4-4 8-6 14-6h36c6 0 10 2 14 6 2 2 4 8 4 12zM548 420v330c0 6-2 10-4 12-4 4-8 6-14 6h-36c-6 0-10-2-14-6-2-2-4-6-4-12v-330c0-4 2-10 4-12 4-4 8-6 14-6h36c6 0 10 2 14 6 2 2 4 8 4 12zM694 420v330c0 6 0 10-4 12-4 4-8 6-14 6h-36c-6 0-10-2-14-6-2-2-4-6-4-12v-330c0-4 2-10 4-12 4-4 8-6 14-6h36c6 0 10 2 14 6 4 2 4 8 4 12zM768 834v-542h-512v542c0 8 2 16 4 24 2 6 6 12 8 14 4 4 6 6 6 6h476c0 0 2-2 6-6 2-2 6-8 8-14 2-8 4-16 4-24zM384 220h256l-28-68c-2-2-6-4-10-6h-180c-4 2-8 4-10 6zM914 238v36c0 6-2 10-4 14-4 2-8 4-14 4h-54v542c0 32-10 60-28 82-18 24-40 34-64 34h-476c-24 0-46-10-64-32s-28-50-28-82v-544h-54c-6 0-10-2-14-4-2-4-4-8-4-14v-36c0-6 2-10 4-14 4-2 8-4 14-4h176l40-96c6-14 16-26 32-36 14-10 30-14 44-14h184c14 0 30 4 44 14 16 10 26 22 32 36l40 96h176c6 0 10 2 14 4 2 4 4 8 4 14z" + ], + "defaultCode": 90, + "grid": 16 + }, + "properties": { + "id": 48, + "order": 50, + "prevSize": 32, + "code": 90, + "name": "uni5A", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 49 + }, + { + "icon": { + "paths": [ + "M788.707 162.475c0 9.709-7.282 19.419-19.419 19.419-9.709 0-19.419-9.709-19.419-19.419 0-12.137 9.709-19.419 19.419-19.419 12.137 0 19.419 7.282 19.419 19.419zM795.989 346.946c0 0-26.7-121.363-186.899-89.808-14.563-55.827-12.137-97.090 21.845-133.499 48.545-50.973 126.218-24.272 126.218-24.272v-41.264c-26.7-12.137-53.399-14.563-80.099-14.563-104.372 0-162.626 77.673-186.899 131.072l-288.844 531.57 82.527-14.563-150.491 288.844 104.372-19.419 80.099-225.735c225.735 0 517.006-82.527 478.171-388.362zM893.079 245.002l-63.109-63.109-50.973 63.109zM354.228 669.772c0 0 9.709-2.427 21.845-4.854 12.137-4.854 31.554-7.282 53.399-14.563 12.137-2.427 24.272-7.282 36.409-9.709 12.137-4.854 26.7-9.709 38.836-14.563 14.563-7.282 26.7-12.137 38.836-19.419 14.563-7.282 26.7-16.991 38.836-24.272 2.427-2.427 7.282-4.854 9.709-7.282l7.282-7.282c7.282-7.282 12.137-12.137 16.991-16.991s9.709-12.137 14.563-16.991c2.427-2.427 4.854-4.854 7.282-9.709l2.427-4.854 2.427-2.427c2.427-4.854 4.854-7.282 4.854-9.709 2.427-2.427 4.854-7.282 4.854-9.709 2.427-2.427 2.427-2.427 2.427-4.854 2.427 0 2.427-2.427 2.427-4.854 2.427-2.427 2.427-4.854 4.854-7.282 2.427-7.282 4.854-12.137 7.282-19.419 0-4.854 2.427-9.709 4.854-16.991 0-4.854 2.427-9.709 2.427-14.563s2.427-9.709 2.427-14.563c0-4.854 2.427-9.709 2.427-14.563 0-2.427 0-7.282 0-9.709 0-12.137 2.427-21.845 2.427-21.845l12.137 2.427c0 0-2.427 7.282-2.427 19.419 0 4.854-2.427 7.282-2.427 12.137s0 9.709-2.427 12.137c0 4.854 0 9.709-2.427 16.991 0 4.854-2.427 9.709-2.427 14.563-2.427 7.282-4.854 12.137-7.282 19.419-2.427 4.854-4.854 12.137-7.282 16.991 0 2.427-2.427 7.282-4.854 9.709 0 2.427 0 2.427-2.427 4.854 0 2.427 0 2.427-2.427 4.854 0 2.427-2.427 4.854-4.854 9.709-2.427 2.427-2.427 4.854-4.854 7.282s-2.427 4.854-2.427 4.854l-4.854 4.854c-2.427 2.427-4.854 7.282-7.282 9.709-4.854 4.854-9.709 12.137-14.563 16.991s-9.709 9.709-16.991 16.991l-7.282 7.282c-4.854 2.427-7.282 2.427-9.709 4.854-14.563 9.709-26.7 19.419-41.264 26.7-12.137 4.854-26.7 12.137-38.836 16.991-14.563 4.854-26.7 9.709-41.264 14.563-12.137 2.427-24.272 7.282-36.409 9.709-21.845 4.854-41.264 9.709-53.399 12.137s-21.845 4.854-21.845 4.854z" + ], + "defaultCode": 86, + "grid": 16 + }, + "properties": { + "id": 49, + "order": 51, + "prevSize": 32, + "code": 86, + "name": "uni56", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 50 + }, + { + "icon": { + "paths": [ + "M213.721 810.279c-79.102-79.102-123.596-186.218-123.596-298.279 0-232.361 189.514-421.875 421.875-421.875l52.734 52.734-52.734 52.734c-174.683 0-316.406 141.724-316.406 316.406 0 84.045 32.959 164.795 92.286 224.122l-64.27 8.24zM512 933.875l-52.734-52.734 52.734-52.734c174.683 0 316.406-141.724 316.406-316.406 0-84.045-32.959-164.795-92.286-224.122l64.27-8.24 9.888-65.918c79.102 79.102 123.596 186.218 123.596 298.279 0 232.361-189.514 421.875-421.875 421.875z" + ], + "defaultCode": 49, + "grid": 16 + }, + "properties": { + "id": 50, + "order": 52, + "prevSize": 32, + "code": 49, + "name": "uni31", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 51 + }, + { + "icon": { + "paths": [ + "M449.378 830.054c0 57.678-47.791 103.821-105.469 103.821s-105.469-46.143-105.469-103.821c0-59.326 47.791-105.469 105.469-105.469s105.469 46.143 105.469 105.469zM449.378 512c0 57.678-47.791 105.469-105.469 105.469s-105.469-47.791-105.469-105.469c0-57.678 47.791-105.469 105.469-105.469s105.469 47.791 105.469 105.469zM449.378 193.946c0 59.326-47.791 105.469-105.469 105.469s-105.469-46.143-105.469-105.469c0-57.678 47.791-103.821 105.469-103.821s105.469 46.143 105.469 103.821zM785.56 830.054c0 57.678-47.791 103.821-105.469 103.821s-105.469-46.143-105.469-103.821c0-59.326 47.791-105.469 105.469-105.469s105.469 46.143 105.469 105.469zM785.56 512c0 57.678-47.791 105.469-105.469 105.469s-105.469-47.791-105.469-105.469c0-57.678 47.791-105.469 105.469-105.469s105.469 47.791 105.469 105.469zM785.56 193.946c0 59.326-47.791 105.469-105.469 105.469s-105.469-46.143-105.469-105.469c0-57.678 47.791-103.821 105.469-103.821s105.469 46.143 105.469 103.821z" + ], + "defaultCode": 85, + "grid": 16 + }, + "properties": { + "id": 51, + "order": 53, + "prevSize": 32, + "code": 85, + "name": "uni55", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 52 + }, + { + "icon": { + "paths": [ + "M654.5 193.25v176.25h91.875v183.75h-360v-103.125l-285 191.25 285 189.375v-101.25h536.25v-536.25z" + ], + "defaultCode": 51, + "grid": 16 + }, + "properties": { + "id": 52, + "order": 54, + "prevSize": 32, + "code": 51, + "name": "uni33", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 53 + }, + { + "icon": { + "paths": [ + "M406.531 406.531h-316.406l245.544 179.627-88.989 294.983 252.136-176.331 276.856 176.331-113.708-294.983 271.912-179.627h-316.406l-118.653-303.223z" + ], + "defaultCode": 50, + "grid": 16 + }, + "properties": { + "id": 53, + "order": 55, + "prevSize": 32, + "code": 50, + "name": "uni32", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 54 + }, + { + "icon": { + "paths": [ + "M270 112h482v46h-482zM810 466l-254 248v-444h-90v440l-250-244-66 64 362 362 362-362z" + ], + "defaultCode": 53, + "grid": 16 + }, + "properties": { + "id": 54, + "order": 56, + "prevSize": 32, + "code": 53, + "name": "uni35", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 55 + }, + { + "icon": { + "paths": [ + "M272 112h482v46h-482zM216 716l252-248v444h90v-440l252 244 64-64-362-362-362 362z" + ], + "defaultCode": 54, + "grid": 16 + }, + "properties": { + "id": 55, + "order": 57, + "prevSize": 32, + "code": 54, + "name": "uni36", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 56 + }, + { + "icon": { + "paths": [ + "M680.75 390.125c0 3.75 0 7.5 0 11.25s-1.875 7.5-1.875 13.125c0 3.75-1.875 9.375-1.875 13.125-1.875 5.625-3.75 11.25-3.75 16.875-1.875 5.625-3.75 11.25-5.625 16.875s-3.75 11.25-5.625 18.75c-1.875 1.875-3.75 5.625-3.75 7.5-1.875 1.875-1.875 3.75-1.875 5.625-1.875 1.875-1.875 1.875-3.75 3.75-1.875 3.75-1.875 5.625-3.75 9.375s-3.75 5.625-5.625 9.375l-3.75 3.75-1.875 5.625c-1.875 1.875-3.75 5.625-7.5 7.5-3.75 5.625-7.5 13.125-13.125 16.875-5.625 5.625-11.25 11.25-16.875 16.875l-7.5 7.5c-3.75 1.875-5.625 3.75-9.375 7.5-11.25 9.375-24.375 16.875-37.5 24.375s-26.25 13.125-39.375 18.75c-13.125 5.625-26.25 11.25-39.375 15-11.25 3.75-22.5 7.5-33.75 11.25-22.5 5.625-41.25 9.375-54.375 13.125s-20.625 3.75-20.625 3.75c0 0 7.5 0 20.625-3.75 13.125-1.875 31.875-5.625 54.375-11.25 11.25-3.75 22.5-5.625 35.625-9.375s26.25-9.375 39.375-15c13.125-5.625 26.25-11.25 39.375-18.75 13.125-5.625 26.25-15 39.375-24.375 3.75-1.875 5.625-3.75 9.375-5.625l9.375-7.5c5.625-5.625 11.25-11.25 15-16.875 5.625-5.625 11.25-11.25 15-16.875 3.75-3.75 5.625-5.625 7.5-9.375l3.75-3.75c0-1.875 1.875-3.75 1.875-5.625 1.875-1.875 3.75-5.625 7.5-9.375 0-1.875 1.875-5.625 3.75-9.375 1.875 0 1.875-1.875 3.75-3.75 0-1.875 0-3.75 1.875-5.625s1.875-5.625 3.75-9.375c3.75-5.625 5.625-11.25 7.5-16.875 1.875-7.5 3.75-13.125 5.625-18.75s1.875-11.25 3.75-15c1.875-5.625 1.875-11.25 3.75-15 0-5.625 0-9.375 1.875-13.125 0-5.625 0-9.375 0-11.25 1.875-15 1.875-22.5 1.875-22.5h-11.25c0 0 0 7.5-1.875 20.625zM890.75 240.125l-63.75-61.875c-1.875-61.875-41.25-103.125-60-114.375-18.75-16.875-61.875-30-110.625-24.375-46.875 7.5-114.375 31.875-161.25 120-91.875 172.5-288.75 541.875-290.625 545.625-1.875 0-1.875 1.875 0 1.875 0 1.875 1.875 1.875 1.875 1.875l75-13.125-146.25 283.125c0 1.875 0 1.875 1.875 3.75 0 0 0 0 1.875 0 0 0 0 0 0 0l105-18.75c0 0 1.875 0 1.875-1.875l76.875-225c196.875-1.875 333.75-48.75 408.75-144.375 78.75-101.25 67.5-228.75 54.375-288.75l-9.375-58.125h112.5c0 0 1.875 0 1.875-1.875 1.875 0 0-1.875 0-3.75zM787.625 161.375c0 9.375-9.375 18.75-18.75 18.75-11.25 0-18.75-9.375-18.75-18.75 0-11.25 7.5-20.625 18.75-20.625 9.375 0 18.75 9.375 18.75 20.625zM725.75 588.875c-75 93.75-210 140.625-405 140.625-1.875 0-1.875 1.875-1.875 3.75l-78.75 225-95.625 16.875 146.25-283.125c0-1.875 0-1.875 0-3.75-1.875 0-1.875-1.875-3.75-1.875l-75 15c26.25-48.75 204.375-378.75 288.75-538.125 46.875-86.25 110.625-110.625 155.625-116.25 46.875-5.625 86.25 5.625 105 18.75v41.25c-3.75 0-30-9.375-54.375-9.375s-52.5 9.375-69.375 28.125c-30 33.75-37.5 67.5-22.5 123.75 101.25-18.75 146.25 24.375 163.125 50.625 13.125 56.25 28.125 185.625-52.5 288.75zM780.125 240.125l43.125-56.25 56.25 56.25z" + ], + "defaultCode": 48, + "grid": 16 + }, + "properties": { + "id": 56, + "order": 58, + "prevSize": 32, + "code": 48, + "name": "uni30", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 57 + }, + { + "icon": { + "paths": [ + "M506.375 69.5c121.875 0 225 41.25 313.125 125.625 86.25 84.375 131.25 187.5 135 309.375 0 121.875-41.25 226.875-127.5 313.125-84.375 88.125-187.5 133.125-309.375 136.875-121.875 0-226.875-41.25-313.125-127.5-88.125-84.375-133.125-187.5-135-309.375s39.375-226.875 125.625-313.125c86.25-88.125 189.375-133.125 311.25-135zM504.5 780.125c18.75 0 35.625-5.625 46.875-16.875 11.25-13.125 18.75-28.125 18.75-45 0-20.625-3.75-35.625-16.875-48.75-11.25-11.25-28.125-16.875-46.875-16.875 0 0-1.875 0-1.875 0-18.75 0-33.75 5.625-45 16.875-13.125 11.25-18.75 26.25-20.625 45 0 18.75 5.625 33.75 18.75 46.875 11.25 11.25 26.25 18.75 45 18.75 0 0 1.875 0 1.875 0zM663.875 465.125c16.875-20.625 24.375-45 24.375-75 0-48.75-16.875-86.25-50.625-110.625s-76.875-35.625-129.375-35.625c-41.25 0-75 7.5-99.375 24.375-45 26.25-67.5 73.125-69.375 140.625 0 0 0 3.75 0 3.75s105 0 105 0c0 0 0-3.75 0-3.75 0-16.875 5.625-33.75 15-52.5 11.25-15 28.125-22.5 52.5-22.5 26.25 0 43.125 5.625 50.625 18.75 9.375 13.125 15 26.25 15 43.125 0 11.25-5.625 24.375-15 37.5-5.625 7.5-13.125 15-20.625 18.75 0 0-5.625 3.75-5.625 3.75-3.75 3.75-7.5 7.5-15 11.25-5.625 3.75-13.125 9.375-18.75 15-7.5 3.75-13.125 9.375-20.625 15s-13.125 11.25-16.875 16.875c-7.5 13.125-13.125 37.5-16.875 75 0 0 0 7.5 0 7.5s105 0 105 0c0 0 0-3.75 0-3.75 0-7.5 0-16.875 3.75-26.25 3.75-13.125 11.25-24.375 26.25-35.625 0 0 26.25-16.875 26.25-16.875 30-22.5 46.875-37.5 54.375-48.75z" + ], + "defaultCode": 63, + "grid": 16 + }, + "properties": { + "id": 57, + "order": 59, + "prevSize": 32, + "code": 63, + "name": "uni3F", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 58 + }, + { + "icon": { + "paths": [ + "M939.148 847.742c7.031 10.547 7.031 21.094 0 31.641-5.273 8.789-14.063 14.063-26.367 14.063 0 0-803.32 0-803.32 0-10.547 0-19.336-5.273-24.609-14.063-7.031-10.547-7.031-21.094-1.758-31.641 0 0 400.781-703.125 400.781-703.125 5.273-10.547 14.063-15.82 28.125-15.82 12.305 0 21.094 5.273 26.367 15.82 0 0 400.781 703.125 400.781 703.125zM561.219 803.797c0 0 0-89.648 0-89.648s-98.438 0-98.438 0c0 0 0 89.648 0 89.648s98.438 0 98.438 0zM561.219 647.352c0 0 0-270.703 0-270.703s-98.438 0-98.438 0c0 0 0 270.703 0 270.703s98.438 0 98.438 0z" + ], + "defaultCode": 33, + "grid": 16 + }, + "properties": { + "id": 58, + "order": 60, + "prevSize": 32, + "code": 33, + "name": "uni21", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 59 + }, + { + "icon": { + "paths": [ + "M512 62c-247.852 0-450 202.148-450 450s202.148 450 450 450c247.852 0 450-202.148 450-450s-202.148-450-450-450zM441.688 719.422l-205.664-207.422 79.102-79.102 126.563 128.32 270.703-270.703 79.102 79.102z" + ], + "defaultCode": 57, + "grid": 16 + }, + "properties": { + "id": 59, + "order": 61, + "prevSize": 32, + "code": 57, + "name": "uni39", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 60 + }, + { + "icon": { + "paths": [ + "M806.983 627.357v192.81h-589.966v-192.81h-112.060v248.841c0 31.311 24.719 57.678 56.031 57.678h702.026c31.311 0 56.031-26.367 56.031-57.678v-248.841zM502.112 607.581l-163.147-194.458c0 0-24.719-24.719 3.296-24.719 26.367 0 90.637 0 90.637 0s0-14.831 0-39.551c0-67.566 0-194.458 0-245.544 0 0-3.296-13.184 18.128-13.184 19.776 0 112.060 0 128.54 0 14.831 0 13.184 11.536 13.184 11.536 0 49.438 0 179.627 0 245.544 0 21.424 0 36.255 0 36.255s52.734 0 85.693 0c31.311 0 8.24 24.719 8.24 24.719s-138.428 182.922-158.203 201.050c-13.184 14.831-26.367-1.648-26.367-1.648z" + ], + "defaultCode": 83, + "grid": 16 + }, + "properties": { + "id": 60, + "order": 62, + "prevSize": 32, + "code": 83, + "name": "uni53", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 61 + }, + { + "icon": { + "paths": [ + "M512 387.893c18.733 0 35.124 2.343 51.516 9.366s30.442 14.050 42.149 25.76c11.708 11.708 21.076 25.76 25.76 39.807 7.026 16.391 11.708 32.782 11.708 49.175 0 16.391-4.682 32.782-11.708 49.175-4.682 14.050-14.050 28.1-25.76 39.807s-25.76 18.733-42.149 25.76c-16.391 7.026-32.782 9.366-51.516 9.366s-35.124-2.343-51.516-9.366c-16.391-7.026-30.442-14.050-42.149-25.76-11.708-11.708-21.076-25.76-25.76-39.807-7.026-16.391-11.708-32.782-11.708-49.175 0-16.391 4.682-32.782 11.708-49.175 4.682-14.050 14.050-28.1 25.76-39.807s25.76-18.733 42.149-25.76c16.391-7.026 32.782-9.366 51.516-9.366zM512 706.357c28.1 0 53.857-4.682 79.616-14.050s46.832-23.417 65.566-42.149c18.733-16.391 32.782-37.466 44.491-60.882 9.366-25.76 14.050-49.175 14.050-77.274s-4.682-51.516-14.050-77.274c-11.708-23.417-25.76-44.491-44.491-60.882-18.733-18.733-39.807-32.782-65.566-42.149-25.76-9.366-51.516-14.050-79.616-14.050s-53.857 4.682-79.616 14.050c-25.76 9.366-46.832 23.417-65.566 42.149-18.733 16.391-32.782 37.466-44.491 60.882-9.366 25.76-14.050 49.175-14.050 77.274s4.682 51.516 14.050 77.274c11.708 23.417 25.76 44.491 44.491 60.882 18.733 18.733 39.807 32.782 65.566 42.149 25.76 9.366 51.516 14.050 79.616 14.050zM512 252.079c42.149 0 81.958 4.682 119.423 14.050s72.592 23.417 105.373 39.807c32.782 14.050 60.882 32.782 86.641 51.516 25.76 21.076 49.175 39.807 67.908 58.54 16.391 18.733 30.442 37.466 39.807 53.858 11.708 18.733 16.391 32.782 16.391 42.149 0 9.366-4.682 23.417-16.391 42.149-9.366 16.391-23.417 35.124-39.807 53.858-18.733 18.733-42.149 37.466-67.908 58.54-25.76 18.733-53.857 37.466-86.641 51.516-32.782 16.391-67.908 30.442-105.373 39.807s-77.274 14.050-119.423 14.050c-42.149 0-81.958-4.682-119.423-14.050-39.807-9.366-72.592-23.417-105.373-39.807-32.782-14.050-60.882-32.782-86.641-51.516-25.76-21.076-49.175-39.807-67.908-58.54-16.391-18.733-30.443-37.466-39.807-53.858-11.708-18.733-16.391-32.782-16.391-42.149 0-9.366 4.682-23.417 16.391-42.149 9.366-16.391 23.417-35.124 39.807-53.858 18.733-18.733 42.149-37.466 67.908-58.54 25.76-18.733 53.858-37.466 86.641-51.516 32.782-16.391 65.566-30.442 105.373-39.807 37.466-9.366 77.274-14.050 119.423-14.050z" + ], + "defaultCode": 52, + "grid": 16 + }, + "properties": { + "id": 61, + "order": 63, + "prevSize": 32, + "code": 52, + "name": "uni34", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 62 + }, + { + "icon": { + "paths": [ + "M775.672 933.875h-527.344c-87.341 0-158.203-70.862-158.203-158.203v-527.344c0-69.214 44.495-126.892 105.469-148.315v69.214c0 44.495 36.255 79.102 79.102 79.102s79.102-34.607 79.102-79.102v-79.102h316.406v79.102c0 44.495 36.255 79.102 79.102 79.102s79.102-34.607 79.102-79.102v-69.214c60.974 21.424 105.469 79.102 105.469 148.315v527.344c0 87.341-70.862 158.203-158.203 158.203zM828.406 353.797h-632.813v421.875c0 29.663 23.071 52.734 52.734 52.734h527.344c29.663 0 52.734-23.071 52.734-52.734zM617.469 617.469h105.469v105.469h-105.469zM617.469 459.266h105.469v105.469h-105.469zM459.266 617.469h105.469v105.469h-105.469zM459.266 459.266h105.469v105.469h-105.469zM301.063 617.469h105.469v105.469h-105.469zM301.063 459.266h105.469v105.469h-105.469zM749.305 195.594c-14.831 0-26.367-11.536-26.367-26.367v-79.102h52.734v79.102c0 14.831-11.536 26.367-26.367 26.367zM274.695 195.594c-14.831 0-26.367-11.536-26.367-26.367v-79.102h52.734v79.102c0 14.831-11.536 26.367-26.367 26.367z" + ], + "defaultCode": 55, + "grid": 16 + }, + "properties": { + "id": 62, + "order": 64, + "prevSize": 32, + "code": 55, + "name": "uni37", + "ligatures": "" + }, + "setIdx": 0, + "iconIdx": 63 + } + ], + "height": 1024, + "metadata": { + "name": "wagtail" + }, + "preferences": { + "showGlyphs": true, + "showQuickUse": true, + "fontPref": { + "prefix": "icon-", + "metadata": { + "fontFamily": "wagtail", + "majorVersion": 1, + "minorVersion": 0 + }, + "metrics": { + "emSize": 512, + "baseline": 6.25, + "whitespace": 50 + }, + "showMetadata": false, + "showMetrics": true, + "useClassSelector": false, + "classSelector": ".icon", + "embed": false + }, + "imagePref": {}, + "historySize": 100, + "showCodes": true, + "search": "", + "gridSize": 16, + "showGrid": true + } +} \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.eot b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.eot old mode 100644 new mode 100755 index 6ac63514a..605751ad4 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 old mode 100644 new mode 100755 index 9bded54bf..f095fbd63 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg @@ -1,74 +1,74 @@ - + -Generated by Fontastic.me +Generated by IcoMoon - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.ttf b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.ttf old mode 100644 new mode 100755 index 2006feefb..84159ccc9 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 old mode 100644 new mode 100755 index 072c20a16..fd8552d26 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/preview.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/preview.scss new file mode 100644 index 000000000..a655eddfb --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/preview.scss @@ -0,0 +1,86 @@ +@import "../variables.scss"; +@import "../mixins.scss"; + +/* This font is just a single spinner glyph */ +@font-face { + font-family: 'wagtail'; + src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggiBucAAAC8AAAAYGNtYXAAIwC5AAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zu2pTysAAAFwAAAA0GhlYWQAoBqvAAACQAAAADZoaGVhA+IB5gAAAngAAAAkaG10eAMAAAAAAAKcAAAAFGxvY2EAKAB8AAACsAAAAAxtYXhwAAgAMwAAArwAAAAgbmFtZTAOqMkAAALcAAABOXBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAABAAAAAMQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIAAx//3//wAAAAAAIAAx//3//wAB/+P/0wADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAgAA/+ACAAHgABcAMAAANy4DNTQ+Ah8BByYOAhUUHgIXBxcnNz4DJzYuAic/AR4DBxYOAiNLEhwTCihGXTUgIChGNB4HDxQOKLAhISdHMx8BAQgOFQ0mBxEdEgsBASlFXjQrEiouMRo0XkUpAR8hAR8zRycUJCQeDwR0IR8BHTVFKRImIiANBSgSKi4xGjVdRigAAAEAAAABAADi0eQAXw889QALAgAAAAAAz8Bs+QAAAADPwGz5AAD/4AIAAeAAAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAAgAAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAAACgAUAB4AaAABAAAABQAxAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoAKABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoAKABjAHcAYQBnAHQAYQBpAGwAVgBlAHIAcwBpAG8AbgAgADEALgAwAHcAYQBnAHQAYQBpAGx3YWd0YWlsAHcAYQBnAHQAYQBpAGwAUgBlAGcAdQBsAGEAcgB3AGEAZwB0AGEAaQBsAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), + url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAARsAAoAAAAABCQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAO4AAADuSyBzg09TLzIAAAHkAAAAYAAAAGAIIgbnY21hcAAAAkQAAABMAAAATAAjALlnYXNwAAACkAAAAAgAAAAIAAAAEGhlYWQAAAKYAAAANgAAADYAoBqvaGhlYQAAAtAAAAAkAAAAJAPiAeZobXR4AAAC9AAAABQAAAAUAwAAAG1heHAAAAMIAAAABgAAAAYABVAAbmFtZQAAAxAAAAE5AAABOTAOqMlwb3N0AAAETAAAACAAAAAgAAMAAAEABAQAAQEBCHdhZ3RhaWwAAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAAB0Dx0AAAB5ER0AAAAJHQAAAOUSAAYBAQgPERMWGXdhZ3RhaWx3YWd0YWlsdTB1MXUyMHUzMQAAAgGJAAMABQEBBAcKDWT8lA78lA78lA77lA7WthVbu3DMi8+L9yH3B/cH9yGLCKtra2sFIYs1NYshi1ifWq9nCGSGBfdD+wcVa6urqwX1i+Hhi/WLvne8Z68IspCRswW7W6ZKi0eL+yH7B/sH+yGLCA74lBT4lBWLDAoAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAAAAxAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAOAAAAAoACAACAAIAAQAgADH//f//AAAAAAAgADH//f//AAH/4//TAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAQAAaXw/5l8PPPUACwIAAAAAAM/AbPkAAAAAz8Bs+QAA/+ACAAHgAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAIAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAQAAAAIAAAAAAFAAAAUAAAAAAA4ArgABAAAAAAABAA4AAAABAAAAAAACAA4ARwABAAAAAAADAA4AJAABAAAAAAAEAA4AVQABAAAAAAAFABYADgABAAAAAAAGAAcAMgABAAAAAAAKACgAYwADAAEECQABAA4AAAADAAEECQACAA4ARwADAAEECQADAA4AJAADAAEECQAEAA4AVQADAAEECQAFABYADgADAAEECQAGAA4AOQADAAEECQAKACgAYwB3AGEAZwB0AGEAaQBsAFYAZQByAHMAaQBvAG4AIAAxAC4AMAB3AGEAZwB0AGEAaQBsd2FndGFpbAB3AGEAZwB0AGEAaQBsAFIAZQBnAHUAbABhAHIAdwBhAGcAdABhAGkAbABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff'); + font-weight: normal; + font-style: normal; +} + +html,body { + height:100%; + padding:0; + margin:0; +} + +#loading-spinner-wrapper{ + position:fixed; + bottom:0; + text-align:center; + height:100%; + width:100%; + font-size:0em; + z-index:999999; + background:white; + @include transition(all 0.3s ease); + + &.remove{ + bottom:-100%; + } + + &:before { + content: ''; + width:0px; + display: inline-block; + height: 100%; + vertical-align: middle; + margin-left:-0.4em; + } +} + +#loading-spinner{ + position:relative; + display:inline-block; + width:120px; + height:120px; + vertical-align:middle; + + &:after{ + font-size:120px; + line-height:120px; + color:$color-teal; + position:absolute; + left:0; + top:0; + font-family:wagtail; + content:"1"; + width:1em; + animation: spin 0.8s infinite linear; + -webkit-animation: spin 0.8s infinite linear; + -moz-animation: spin 0.8s infinite linear; + } +} + +#preview-frame{ + height:100%; + width:100%; + position:absolute; + z-index:1; + border:0; +} + +@keyframes spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} +@-webkit-keyframes spin { + from { -webkit-transform: rotate(0deg); } + to { -webkit-transform: rotate(360deg); } +} +@-moz-keyframes spin { + from { -moz-transform: rotate(0deg); } + to { -moz-transform: rotate(360deg); } +} \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss new file mode 100644 index 000000000..38d4281da --- /dev/null +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/styleguide.scss @@ -0,0 +1,96 @@ +@import "../variables.scss"; +@import "../mixins.scss"; +@import "../grid.scss"; + +section{ + border-top:1px solid $color-grey-3; + margin-top:2em; + padding:0 0 2em 0; + + > h2:first-child{ + margin:0; + font-size:1em; + background:$color-grey-4; + padding:1em; + margin-bottom:1em; + } +} + +#palette{ + @include clearfix(); + + ul{ + @include clearfix(); + @include unlist(); + } + + li{ + float:left; + width:100px; + height:100px; + padding:10px; + color:black; + } + + .color-teal{ + background-color:$color-teal; + } + .color-teal-darker{ + background-color:$color-teal-darker; + } + .color-teal-dark{ + background-color:$color-teal-dark; + } + .color-red{ + background-color:$color-red; + } + .color-orange{ + background-color:$color-orange; + } + .color-green{ + background-color:$color-green; + } + .color-grey-1{ + background-color:$color-grey-1; + } + .color-grey-1-1{ + background-color:$color-grey-1-1; + } + .color-grey-2{ + background-color:$color-grey-2; + } + .color-grey-3{ + background-color:$color-grey-3; + } + .color-grey-4{ + background-color:$color-grey-4; + } + .color-grey-5{ + background-color:$color-grey-5; + } +} + + +#icons{ + :before, :after{ + font-size:2em; + } + ul{ + -webkit-column-count:3; /* Chrome, Safari, Opera */ + -moz-column-count:3; /* Firefox */ + column-count:3; + } + li{ + margin-bottom:1em; + } + .spinner{ + position:relative; + } + .icon-spinner:after{ + position:absolute; + } +} + +.timepicker{ + height:150px; +} \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/panels/rich-text.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/panels/rich-text.scss index c951a0bc5..36db5559a 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/panels/rich-text.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/panels/rich-text.scss @@ -147,8 +147,9 @@ } } } + @media screen and (min-width: $breakpoint-mobile){ .hallotoolbar{ left:$menu-width + $desktop-nice-padding; } - } \ No newline at end of file +} \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss index 4c06efec8..0f6567989 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss @@ -29,7 +29,7 @@ $color-teal-darker: darken($color-teal, 10%); $color-teal-dark: #246060; $color-red: #f7474e; $color-orange:#e9b04d; -$color-green: #00FF00; +$color-green: #189370; /* darker to lighter */ $color-grey-1: #333333; diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css b/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css index 871cda747..830fbd060 100755 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css @@ -1140,25 +1140,25 @@ body .ui-tooltip { .ui-corner-top, .ui-corner-left, .ui-corner-tl { - border-top-left-radius: 0; + border-top-left-radius: 3px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { - border-top-right-radius: 0; + border-top-right-radius: 3px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { - border-bottom-left-radius: 0; + border-bottom-left-radius: 3px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { - border-bottom-right-radius: 0; + border-bottom-right-radius: 3px; } /* Overlays */ diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-smoothness.css b/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-smoothness.css deleted file mode 100755 index 39ec82f20..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery-ui/jquery-ui-smoothness.css +++ /dev/null @@ -1,1177 +0,0 @@ -/*! jQuery UI - v1.10.3 - 2013-09-18 -* http://jqueryui.com -* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px -* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { - display: none; -} -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.ui-helper-reset { - margin: 0; - padding: 0; - border: 0; - outline: 0; - line-height: 1.3; - text-decoration: none; - font-size: 100%; - list-style: none; -} -.ui-helper-clearfix:before, -.ui-helper-clearfix:after { - content: ""; - display: table; - border-collapse: collapse; -} -.ui-helper-clearfix:after { - clear: both; -} -.ui-helper-clearfix { - min-height: 0; /* support: IE7 */ -} -.ui-helper-zfix { - width: 100%; - height: 100%; - top: 0; - left: 0; - position: absolute; - opacity: 0; - filter:Alpha(Opacity=0); -} - -.ui-front { - z-index: 100; -} - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { - cursor: default !important; -} - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; -} - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.ui-resizable { - position: relative; -} -.ui-resizable-handle { - position: absolute; - font-size: 0.1px; - display: block; -} -.ui-resizable-disabled .ui-resizable-handle, -.ui-resizable-autohide .ui-resizable-handle { - display: none; -} -.ui-resizable-n { - cursor: n-resize; - height: 7px; - width: 100%; - top: -5px; - left: 0; -} -.ui-resizable-s { - cursor: s-resize; - height: 7px; - width: 100%; - bottom: -5px; - left: 0; -} -.ui-resizable-e { - cursor: e-resize; - width: 7px; - right: -5px; - top: 0; - height: 100%; -} -.ui-resizable-w { - cursor: w-resize; - width: 7px; - left: -5px; - top: 0; - height: 100%; -} -.ui-resizable-se { - cursor: se-resize; - width: 12px; - height: 12px; - right: 1px; - bottom: 1px; -} -.ui-resizable-sw { - cursor: sw-resize; - width: 9px; - height: 9px; - left: -5px; - bottom: -5px; -} -.ui-resizable-nw { - cursor: nw-resize; - width: 9px; - height: 9px; - left: -5px; - top: -5px; -} -.ui-resizable-ne { - cursor: ne-resize; - width: 9px; - height: 9px; - right: -5px; - top: -5px; -} -.ui-selectable-helper { - position: absolute; - z-index: 100; - border: 1px dotted black; -} -.ui-accordion .ui-accordion-header { - display: block; - cursor: pointer; - position: relative; - margin-top: 2px; - padding: .5em .5em .5em .7em; - min-height: 0; /* support: IE7 */ -} -.ui-accordion .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-noicons { - padding-left: .7em; -} -.ui-accordion .ui-accordion-icons .ui-accordion-icons { - padding-left: 2.2em; -} -.ui-accordion .ui-accordion-header .ui-accordion-header-icon { - position: absolute; - left: .5em; - top: 50%; - margin-top: -8px; -} -.ui-accordion .ui-accordion-content { - padding: 1em 2.2em; - border-top: 0; - overflow: auto; -} -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default; -} -.ui-button { - display: inline-block; - position: relative; - padding: 0; - line-height: normal; - margin-right: .1em; - cursor: pointer; - vertical-align: middle; - text-align: center; - overflow: visible; /* removes extra width in IE */ -} -.ui-button, -.ui-button:link, -.ui-button:visited, -.ui-button:hover, -.ui-button:active { - text-decoration: none; -} -/* to make room for the icon, a width needs to be set here */ -.ui-button-icon-only { - width: 2.2em; -} -/* button elements seem to need a little more width */ -button.ui-button-icon-only { - width: 2.4em; -} -.ui-button-icons-only { - width: 3.4em; -} -button.ui-button-icons-only { - width: 3.7em; -} - -/* button text element */ -.ui-button .ui-button-text { - display: block; - line-height: normal; -} -.ui-button-text-only .ui-button-text { - padding: .4em 1em; -} -.ui-button-icon-only .ui-button-text, -.ui-button-icons-only .ui-button-text { - padding: .4em; - text-indent: -9999999px; -} -.ui-button-text-icon-primary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 1em .4em 2.1em; -} -.ui-button-text-icon-secondary .ui-button-text, -.ui-button-text-icons .ui-button-text { - padding: .4em 2.1em .4em 1em; -} -.ui-button-text-icons .ui-button-text { - padding-left: 2.1em; - padding-right: 2.1em; -} -/* no icon support for input elements, provide padding by default */ -input.ui-button { - padding: .4em 1em; -} - -/* button icon element(s) */ -.ui-button-icon-only .ui-icon, -.ui-button-text-icon-primary .ui-icon, -.ui-button-text-icon-secondary .ui-icon, -.ui-button-text-icons .ui-icon, -.ui-button-icons-only .ui-icon { - position: absolute; - top: 50%; - margin-top: -8px; -} -.ui-button-icon-only .ui-icon { - left: 50%; - margin-left: -8px; -} -.ui-button-text-icon-primary .ui-button-icon-primary, -.ui-button-text-icons .ui-button-icon-primary, -.ui-button-icons-only .ui-button-icon-primary { - left: .5em; -} -.ui-button-text-icon-secondary .ui-button-icon-secondary, -.ui-button-text-icons .ui-button-icon-secondary, -.ui-button-icons-only .ui-button-icon-secondary { - right: .5em; -} - -/* button sets */ -.ui-buttonset { - margin-right: 7px; -} -.ui-buttonset .ui-button { - margin-left: 0; - margin-right: -.3em; -} - -/* workarounds */ -/* reset extra padding in Firefox, see h5bp.com/l */ -input.ui-button::-moz-focus-inner, -button.ui-button::-moz-focus-inner { - border: 0; - padding: 0; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month-year { - width: 100%; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 49%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} -.ui-dialog { - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 21px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-se { - width: 12px; - height: 12px; - right: -5px; - bottom: -5px; - background-position: 16px 16px; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-menu { - list-style: none; - padding: 2px; - margin: 0; - display: block; - outline: none; -} -.ui-menu .ui-menu { - margin-top: -3px; - position: absolute; -} -.ui-menu .ui-menu-item { - margin: 0; - padding: 0; - width: 100%; - /* support: IE10, see #8844 */ - list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); -} -.ui-menu .ui-menu-divider { - margin: 5px -2px 5px -2px; - height: 0; - font-size: 0; - line-height: 0; - border-width: 1px 0 0 0; -} -.ui-menu .ui-menu-item a { - text-decoration: none; - display: block; - padding: 2px .4em; - line-height: 1.5; - min-height: 0; /* support: IE7 */ - font-weight: normal; -} -.ui-menu .ui-menu-item a.ui-state-focus, -.ui-menu .ui-menu-item a.ui-state-active { - font-weight: normal; - margin: -1px; -} - -.ui-menu .ui-state-disabled { - font-weight: normal; - margin: .4em 0 .2em; - line-height: 1.5; -} -.ui-menu .ui-state-disabled a { - cursor: default; -} - -/* icon support */ -.ui-menu-icons { - position: relative; -} -.ui-menu-icons .ui-menu-item a { - position: relative; - padding-left: 2em; -} - -/* left-aligned */ -.ui-menu .ui-icon { - position: absolute; - top: .2em; - left: .2em; -} - -/* right-aligned */ -.ui-menu .ui-menu-icon { - position: static; - float: right; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("images/animated-overlay.gif"); - height: 100%; - filter: alpha(opacity=25); - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* For IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 22px; -} -.ui-spinner-button { - width: 16px; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to overide default borders */ -.ui-spinner a.ui-spinner-button { - border-top: none; - border-bottom: none; - border-right: none; -} -/* vertical centre icon */ -.ui-spinner .ui-icon { - position: absolute; - margin-top: -8px; - top: 50%; - left: 0; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} - -/* TR overrides */ -.ui-spinner .ui-icon-triangle-1-s { - /* need to fix icons sprite */ - background-position: -65px -16px; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav li a { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active a, -.ui-tabs .ui-tabs-nav li.ui-state-disabled a, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { - cursor: text; -} -.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; - -webkit-box-shadow: 0 0 5px #aaa; - box-shadow: 0 0 5px #aaa; -} -body .ui-tooltip { - border-width: 2px; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Verdana,Arial,sans-serif; - font-size: 1.1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Verdana,Arial,sans-serif; - font-size: 1em; -} -.ui-widget-content { - border: 1px solid #aaaaaa; - background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; - color: #222222; -} -.ui-widget-content a { - color: #222222; -} -.ui-widget-header { - border: 1px solid #aaaaaa; - background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default { - border: 1px solid #d3d3d3; - background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; - font-weight: normal; - color: #555555; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited { - color: #555555; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus { - border: 1px solid #999999; - background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited { - color: #212121; - text-decoration: none; -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active { - border: 1px solid #aaaaaa; - background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; - color: #363636; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; - color: #cd0a0a; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #cd0a0a; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #cd0a0a; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url(images/ui-icons_222222_256x240.png); -} -.ui-widget-header .ui-icon { - background-image: url(images/ui-icons_222222_256x240.png); -} -.ui-state-default .ui-icon { - background-image: url(images/ui-icons_888888_256x240.png); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon { - background-image: url(images/ui-icons_454545_256x240.png); -} -.ui-state-active .ui-icon { - background-image: url(images/ui-icons_454545_256x240.png); -} -.ui-state-highlight .ui-icon { - background-image: url(images/ui-icons_2e83ff_256x240.png); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url(images/ui-icons_cd0a0a_256x240.png); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 4px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; - opacity: .3; - filter: Alpha(Opacity=30); -} -.ui-widget-shadow { - margin: -8px 0 0 -8px; - padding: 8px; - background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; - opacity: .3; - filter: Alpha(Opacity=30); - border-radius: 8px; -} diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery.timepicker.css b/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery.timepicker.css deleted file mode 100755 index 87c7987c0..000000000 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/vendor/jquery.timepicker.css +++ /dev/null @@ -1,67 +0,0 @@ -.ui-timepicker-wrapper { - overflow-y: auto; - height: 150px; - width: 6.5em; - background: #fff; - border: 1px solid #ddd; - -webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2); - -moz-box-shadow:0 5px 10px rgba(0,0,0,0.2); - box-shadow:0 5px 10px rgba(0,0,0,0.2); - outline: none; - z-index: 10001; - margin: 0; -} - -.ui-timepicker-wrapper.ui-timepicker-with-duration { - width: 11em; -} - -.ui-timepicker-list { - margin: 0; - padding: 0; - list-style: none; -} - -.ui-timepicker-duration { - margin-left: 5px; color: #888; -} - -.ui-timepicker-list:hover .ui-timepicker-duration { - color: #888; -} - -.ui-timepicker-list li { - padding: 3px 0 3px 5px; - cursor: pointer; - white-space: nowrap; - color: #000; - list-style: none; - margin: 0; -} - -.ui-timepicker-list:hover .ui-timepicker-selected { - background: #fff; color: #000; -} - -li.ui-timepicker-selected, -.ui-timepicker-list li:hover, -.ui-timepicker-list .ui-timepicker-selected:hover { - background: #1980EC; color: #fff; -} - -li.ui-timepicker-selected .ui-timepicker-duration, -.ui-timepicker-list li:hover .ui-timepicker-duration { - color: #ccc; -} - -.ui-timepicker-list li.ui-timepicker-disabled, -.ui-timepicker-list li.ui-timepicker-disabled:hover, -.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled { - color: #888; - cursor: default; -} - -.ui-timepicker-list li.ui-timepicker-disabled:hover, -.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled { - background: #f2f2f2; -} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/account/password_reset/complete.html b/wagtail/wagtailadmin/templates/wagtailadmin/account/password_reset/complete.html index c0cf872e2..3dc8272b0 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/account/password_reset/complete.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/account/password_reset/complete.html @@ -13,6 +13,6 @@ {% block furniture %}

    {% trans "Password change successful" %}

    -

    {% trans "Login" %}

    +

    {% trans "Login" %}

    {% endblock %} \ No newline at end of file diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html b/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html index 30256781e..0cae459a2 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/admin_base.html @@ -4,7 +4,6 @@ {% block css %} {% compress css %} - {% endcompress %} @@ -16,8 +15,9 @@ {% compress js %} - + + diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/login.html b/wagtail/wagtailadmin/templates/wagtailadmin/login.html index 012dd32f8..22682500f 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/login.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/login.html @@ -20,7 +20,7 @@
  • {% endif %} -
    + {% csrf_token %}

    {% trans "Sign in to Wagtail" %}

    diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/_editor_js.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/_editor_js.html index 37d600f07..3ddb8c1f3 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/_editor_js.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/_editor_js.html @@ -1,4 +1,4 @@ -{% load wagtailadmin_tags compress localize %} +{% load wagtailadmin_tags compress %} {% comment %} Javascript declarations to be included on the 'create page' and 'edit page' views @@ -27,10 +27,7 @@ {% hook_output 'insert_editor_js' %} {% endcompress %} -{% comment %} - Put it outside compress to be sure that offline compression also works fine. -{% endcomment %} -{% get_localized_datepicker_js %} +{% include "wagtailadmin/shared/datetimepicker_translations.html" %} {% comment %} Additional js from widgets media. Allows for custom widgets in admin panel. @@ -38,9 +35,6 @@ {{ edit_handler.form.media.js }} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/field_as_li.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/field_as_li.html index 678dd67fd..a1f51174a 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/field_as_li.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/field_as_li.html @@ -1,5 +1,5 @@ {% load wagtailadmin_tags %} -
  • +
  • {{ field.label_tag }}
    diff --git a/wagtail/wagtailadmin/templatetags/localize.py b/wagtail/wagtailadmin/templatetags/localize.py deleted file mode 100644 index 026dbe878..000000000 --- a/wagtail/wagtailadmin/templatetags/localize.py +++ /dev/null @@ -1,62 +0,0 @@ -from django import template -from django.conf import settings -from django.templatetags.static import static -from django.utils import formats -from django.utils.translation import get_language - -register = template.Library() - -# For reasons unkown, the el (greek) locale in django/conf/locale/el/formats.py -# *did not* contain a DATE_INPUT_FORMATS -- so it fell back to using the US -# date format (mm/dd/yy) which is not the correct one for Greece (dd/mm/yy). -# This means that if we used a localized datepicker django *won't* be able to -# parse the dates! So a test here checks if DATE_INPUT_FORMATS is actually -# defined in a format module. If yes then it will just return an empty string -# so that the normal, localized date format from datepicker will be used. -# If DATE_INPUT_FORMATS is not defined then it will return -@register.assignment_tag -def get_date_format_override(): - if hasattr(settings, 'USE_I18N') and settings.USE_I18N==True: - - for m in formats.get_format_modules(): - if hasattr(m, 'DATE_INPUT_FORMATS'): - return '' - else: # fall back to the ISO to be sure date will be parsed - return 'yy-mm-dd' - else: # Fall back to ISO if I18N is *not* used - return 'yy-mm-dd' - -# This is a list of all supported langs for jquery-ui datepicker which exist in -# wagtailadmin/js/venor/i18n/. In case any new translations are added there the -# language code should also be added in this list. -SUPPORTED_DATEPICKER_LANGS = ['af', 'ar-DZ', 'ar', 'az', 'be', 'bg', 'bs', 'ca', 'cs', 'cy-GB', 'da', 'de', - 'el', 'en-AU', 'en-GB', 'en-NZ', 'eo', 'es', 'et', 'eu', 'fa', 'fi', 'fo', 'fr-CA', 'fr-CH', 'fr', 'gl', - 'he', 'hi', 'hr', 'hu', 'hy', 'id', 'is', 'it', 'ja', 'ka', 'kk', 'km', 'ko', 'ky', 'lb', 'lt', 'lv', - 'mk', 'ml', 'ms', 'nb', 'nl-BE', 'nl', 'nn', 'no', 'pl', 'pt-BR', 'pt', 'rm', 'ro', 'ru', 'sk', 'sl', 'sq', - 'sr-SR', 'sr', 'sv', 'ta', 'th', 'tj', 'tr', 'uk', 'vi', 'zh-CN', 'zh-HK', 'zh-TW' -] -# Get the correct i18n + l10n settings for datepicker depending on current -# thread language -@register.simple_tag -def get_localized_datepicker_js(): - if hasattr(settings, 'USE_I18N') and settings.USE_I18N==True and \ - hasattr(settings, 'USE_L10N') and settings.USE_L10N==True: - - lang = get_language() - - if '-' in lang: - lang_parts = lang.split('-') - lang = lang_parts[0].lower() +'-'+ lang_parts[1].upper() - else: - lang=lang.lower() - if lang in SUPPORTED_DATEPICKER_LANGS: - translation_file = static("wagtailadmin/js/vendor/i18n/jquery.ui.datepicker-{0}.js".format( - lang - )) - return ''.format(translation_file) - else: # Don't return anything if language is not supported - return '' - - else: # Don't return anything if we don't use I18N and L10N - return '' - \ No newline at end of file diff --git a/wagtail/wagtailadmin/tests/test_account_management.py b/wagtail/wagtailadmin/tests/test_account_management.py index 95d54d7d9..3553b8fba 100644 --- a/wagtail/wagtailadmin/tests/test_account_management.py +++ b/wagtail/wagtailadmin/tests/test_account_management.py @@ -1,17 +1,17 @@ from django.test import TestCase -from wagtail.tests.utils import login, unittest +from wagtail.tests.utils import unittest, WagtailTestUtils from django.core.urlresolvers import reverse from django.contrib.auth.models import User from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.core import mail -class TestAuthentication(TestCase): +class TestAuthentication(TestCase, WagtailTestUtils): """ This tests that users can login and logout of the admin interface """ def setUp(self): - login(self.client) + self.login() def test_login_view(self): """ @@ -44,12 +44,12 @@ class TestAuthentication(TestCase): # Check that the user was redirected to the dashboard self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_home')) # Check that the user was logged in self.assertTrue('_auth_user_id' in self.client.session) self.assertEqual(self.client.session['_auth_user_id'], User.objects.get(username='test').id) - @unittest.expectedFailure # See: https://github.com/torchbox/wagtail/issues/25 def test_already_logged_in_redirect(self): """ This tests that a user who is already logged in is automatically @@ -61,27 +61,63 @@ class TestAuthentication(TestCase): # Check that the user was redirected to the dashboard self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_home')) def test_logout(self): """ This tests that the user can logout """ - # Get logout page page + # Get logout page response = self.client.get(reverse('wagtailadmin_logout')) # Check that the user was redirected to the login page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_login')) # Check that the user was logged out self.assertFalse('_auth_user_id' in self.client.session) + def test_not_logged_in_redirect(self): + """ + This tests that a not logged in user is redirected to the + login page + """ + # Logout + self.client.logout() -class TestAccountSection(TestCase): + # Get dashboard + response = self.client.get(reverse('wagtailadmin_home')) + + # Check that the user was redirected to the login page and that next was set correctly + self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_login') + '?next=' + reverse('wagtailadmin_home')) + + def test_not_logged_in_redirect_default_settings(self): + """ + This does the same as the above test but checks that it + redirects to the correct place when the user has not set + the LOGIN_URL setting correctly + """ + # Logout + self.client.logout() + + # Get dashboard with default LOGIN_URL setting + with self.settings(LOGIN_URL='django.contrib.auth.views.login'): + response = self.client.get(reverse('wagtailadmin_home')) + + # Check that the user was redirected to the login page and that next was set correctly + # Note: The user will be redirected to 'django.contrib.auth.views.login' but + # this must be the same URL as 'wagtailadmin_login' + self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_login') + '?next=' + reverse('wagtailadmin_home')) + + +class TestAccountSection(TestCase, WagtailTestUtils): """ This tests that the accounts section is working """ def setUp(self): - login(self.client) + self.login() def test_account_view(self): """ @@ -117,8 +153,9 @@ class TestAccountSection(TestCase): } response = self.client.post(reverse('wagtailadmin_account_change_password'), post_data) - # Check that the user was redirected + # Check that the user was redirected to the account page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_account')) # Check that the password was changed self.assertTrue(User.objects.get(username='test').check_password('newpassword')) @@ -146,7 +183,7 @@ class TestAccountSection(TestCase): self.assertTrue(User.objects.get(username='test').check_password('password')) -class TestPasswordReset(TestCase): +class TestPasswordReset(TestCase, WagtailTestUtils): """ This tests that the password reset is working """ @@ -176,8 +213,9 @@ class TestPasswordReset(TestCase): } response = self.client.post(reverse('password_reset'), post_data) - # Check that the user was redirected + # Check that the user was redirected to the done page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('password_reset_done')) # Check that a password reset email was sent to the user self.assertEqual(len(mail.outbox), 1) @@ -267,8 +305,9 @@ class TestPasswordReset(TestCase): } response = self.client.post(reverse('password_reset_confirm', kwargs=self.url_kwargs), post_data) - # Check that the user was redirected + # Check that the user was redirected to the complete page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('password_reset_complete')) # Check that the password was changed self.assertTrue(User.objects.get(username='test').check_password('newpassword')) diff --git a/wagtail/wagtailadmin/tests/test_edit_handlers.py b/wagtail/wagtailadmin/tests/test_edit_handlers.py index 45db35c5b..8e0e4a7c5 100644 --- a/wagtail/wagtailadmin/tests/test_edit_handlers.py +++ b/wagtail/wagtailadmin/tests/test_edit_handlers.py @@ -1,15 +1,8 @@ from mock import MagicMock from django.test import TestCase -from django.core.exceptions import ValidationError from wagtail.wagtailadmin.edit_handlers import ( - FriendlyDateInput, - FriendlyTimeInput, - FriendlyTimeField, - LocalizedTimeInput, - LocalizedDateInput, - LocalizedTimeField, get_form_for_model, extract_panel_definitions_from_model_class, BaseFieldPanel, @@ -27,148 +20,6 @@ from wagtail.wagtailadmin.edit_handlers import ( from wagtail.wagtailcore.models import Page, Site -class TestFriendlyDateInput(TestCase): - def test_attrs(self): - """ - When the attrs argument is passed to FriendlyDateInput's - constructor, they should be set on the FriendlyDateInput - object along with the default attrs - """ - friendly = FriendlyDateInput(attrs={'awesome': 'sauce'}) - self.assertEqual(friendly.attrs, {'class': 'friendly_date', - 'awesome': 'sauce'}) - - -class TestFriendlyTimeInput(TestCase): - def test_attrs(self): - """ - When the attrs argument is passed to FriendlyDateInput's - constructor, they should be set on the FriendlyDateInput - object along with the default attrs - """ - friendly = FriendlyTimeInput(attrs={'awesome': 'sauce'}) - self.assertEqual(friendly.attrs, {'class': 'friendly_time', - 'awesome': 'sauce'}) - - -class TestFriendlyTimeField(TestCase): - def setUp(self): - self.friendly = FriendlyTimeField() - - def test_no_time_string(self): - """ - to_python() should return None if it is passed an empty - string - """ - result = self.friendly.to_python('') - self.assertEqual(result, None) - - def test_invalid_time_string(self): - """ - to_python() should raise a ValidationError if it is passed - an invalid time string - """ - self.assertRaises(ValidationError, self.friendly.to_python, 'bacon') - - def test_afternoon_time_string(self): - """ - to_python() should convert a time string that ends with 'pm' - to a 24-hour time in the afternoon - """ - python_time = self.friendly.to_python('3:49pm') - self.assertEqual(str(python_time), '15:49:00') - - def test_morning_time_string(self): - """ - to_python() should convert a time string that ends with 'am' - to a 24-hour time in the morning - """ - python_time = self.friendly.to_python('3:49am') - self.assertEqual(str(python_time), '03:49:00') - - def test_no_minutes_time_string(self): - """ - If minutes are not specified in the time string, they should - default to zero - """ - python_time = self.friendly.to_python('3am') - self.assertEqual(str(python_time), '03:00:00') - - -class TestLocalizedDateInput(TestCase): - def test_attrs(self): - """ - When the attrs argument is passed to LocalizedDateInput's - constructor, they should be set on the LocalizedDateInput - object along with the default attrs - """ - localized = LocalizedDateInput(attrs={'awesome': 'sauce'}) - self.assertEqual(localized.attrs, {'class': 'localized_date', - 'localize': True, - 'awesome': 'sauce'}) - - -class TestLocalizedTimeInput(TestCase): - def test_attrs(self): - """ - When the attrs argument is passed to LocalizedTimeInput's - constructor, they should be set on the LocalizedTimeInput - object along with the default attrs - """ - localized = LocalizedTimeInput(attrs={'awesome': 'sauce'}) - self.assertEqual(localized.attrs, {'class': 'localized_time', - 'awesome': 'sauce'}) - - -class TestLocalizedTimeField(TestCase): - def setUp(self): - self.localized = LocalizedTimeField() - - def test_no_time_string(self): - """ - to_python() should return None if it is passed an empty - string - """ - result = self.localized.to_python('') - self.assertEqual(result, None) - - def test_non_time_string(self): - """ - to_python() should raise a ValidationError if it is passed - a string that does not represent a time - """ - self.assertRaises(ValidationError, self.localized.to_python, 'bacon') - - def test_invalid_time_string(self): - """ - to_python() should raise a ValidationError if it is passed - an invalid time string - """ - self.assertRaises(ValidationError, self.localized.to_python, '99:99') - - def test_afternoon_time_string(self): - """ - to_python() should understand 24-hour time - """ - python_time = self.localized.to_python('15:49') - self.assertEqual(str(python_time), '15:49:00') - - def test_morning_time_string(self): - """ - to_python() should understand 24-hour time - """ - python_time = self.localized.to_python('3:49') - self.assertEqual(str(python_time), '03:49:00') - - def test_no_minutes_time_string(self): - """ - If minutes are not specified in the time string, they should - default to zero - """ - python_time = self.localized.to_python('3') - self.assertEqual(str(python_time), '03:00:00') - - class TestGetFormForModel(TestCase): class FakeClass(object): _meta = MagicMock() diff --git a/wagtail/wagtailadmin/tests/test_page_chooser.py b/wagtail/wagtailadmin/tests/test_page_chooser.py index b5add3f15..475e4f7b1 100644 --- a/wagtail/wagtailadmin/tests/test_page_chooser.py +++ b/wagtail/wagtailadmin/tests/test_page_chooser.py @@ -3,9 +3,10 @@ from django.core.urlresolvers import reverse from wagtail.wagtailcore.models import Page from wagtail.tests.models import SimplePage -from wagtail.tests.utils import login +from wagtail.tests.utils import WagtailTestUtils -class TestChooserBrowse(TestCase): + +class TestChooserBrowse(TestCase, WagtailTestUtils): def setUp(self): self.root_page = Page.objects.get(id=2) @@ -15,13 +16,15 @@ class TestChooserBrowse(TestCase): self.child_page.slug = "foobarbaz" self.root_page.add_child(instance=self.child_page) - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailadmin_choose_page'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailadmin/chooser/browse.html') def test_search(self): response = self.get({'q': "foobarbaz"}) @@ -39,7 +42,7 @@ class TestChooserBrowse(TestCase): self.assertEqual(response.status_code, 404) -class TestChooserBrowseChild(TestCase): +class TestChooserBrowseChild(TestCase, WagtailTestUtils): def setUp(self): self.root_page = Page.objects.get(id=2) @@ -49,7 +52,7 @@ class TestChooserBrowseChild(TestCase): self.child_page.slug = "foobarbaz" self.root_page.add_child(instance=self.child_page) - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailadmin_choose_page_child', @@ -59,8 +62,10 @@ class TestChooserBrowseChild(TestCase): return self.client.get(reverse('wagtailadmin_choose_page_child', args=(9999999,)), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailadmin/chooser/browse.html') def test_search(self): response = self.get({'q': "foobarbaz"}) @@ -77,9 +82,9 @@ class TestChooserBrowseChild(TestCase): self.assertEqual(self.get_invalid().status_code, 404) -class TestChooserExternalLink(TestCase): +class TestChooserExternalLink(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailadmin_choose_page_external_link'), params) @@ -87,8 +92,10 @@ class TestChooserExternalLink(TestCase): def post(self, post_data={}): return self.client.post(reverse('wagtailadmin_choose_page_external_link'), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailadmin/chooser/external_link.html') def test_get_with_param(self): self.assertEqual(self.get({'prompt_for_link_text': 'foo'}).status_code, 200) @@ -99,9 +106,9 @@ class TestChooserExternalLink(TestCase): self.assertContains(request, "'title': 'http://www.example.com/'") -class TestChooserEmailLink(TestCase): +class TestChooserEmailLink(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailadmin_choose_page_email_link'), params) @@ -109,8 +116,10 @@ class TestChooserEmailLink(TestCase): def post(self, post_data={}): return self.client.post(reverse('wagtailadmin_choose_page_email_link'), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailadmin/chooser/email_link.html') def test_get_with_param(self): self.assertEqual(self.get({'prompt_for_link_text': 'foo'}).status_code, 200) diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py index 14e57a35e..09e6b6f5c 100644 --- a/wagtail/wagtailadmin/tests/test_pages_views.py +++ b/wagtail/wagtailadmin/tests/test_pages_views.py @@ -1,13 +1,13 @@ from django.test import TestCase -from wagtail.tests.models import SimplePage, EventPage -from wagtail.tests.utils import login, unittest +from wagtail.tests.models import SimplePage, EventPage, StandardIndex, StandardChild, BusinessIndex, BusinessChild +from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.wagtailcore.models import Page, PageRevision from django.core.urlresolvers import reverse from django.contrib.auth.models import User, Permission from django.core import mail -class TestPageExplorer(TestCase): +class TestPageExplorer(TestCase, WagtailTestUtils): def setUp(self): # Find root page self.root_page = Page.objects.get(id=2) @@ -19,7 +19,7 @@ class TestPageExplorer(TestCase): self.root_page.add_child(instance=self.child_page) # Login - login(self.client) + self.login() def test_explore(self): response = self.client.get(reverse('wagtailadmin_explore', args=(self.root_page.id, ))) @@ -28,13 +28,13 @@ class TestPageExplorer(TestCase): self.assertTrue(response.context['pages'].paginator.object_list.filter(id=self.child_page.id).exists()) -class TestPageCreation(TestCase): +class TestPageCreation(TestCase, WagtailTestUtils): def setUp(self): # Find root page self.root_page = Page.objects.get(id=2) # Login - self.user = login(self.client) + self.user = self.login() def test_add_subpage(self): response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(self.root_page.id, ))) @@ -86,6 +86,7 @@ class TestPageCreation(TestCase): # Should be redirected to explorer page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # Find the page and check it page = Page.objects.get(path__startswith=self.root_page.path, slug='hello-world').specific @@ -104,6 +105,7 @@ class TestPageCreation(TestCase): # Should be redirected to explorer page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # Find the page and check it page = Page.objects.get(path__startswith=self.root_page.path, slug='hello-world').specific @@ -126,6 +128,7 @@ class TestPageCreation(TestCase): # Should be redirected to explorer page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # Find the page and check it page = Page.objects.get(path__startswith=self.root_page.path, slug='hello-world').specific @@ -185,8 +188,13 @@ class TestPageCreation(TestCase): self.assertTemplateUsed(response, 'tests/simple_page.html') self.assertContains(response, "New page!") + # Check that the treebeard attributes were set correctly on the page object + self.assertEqual(response.context['self'].depth, self.root_page.depth + 1) + self.assertTrue(response.context['self'].path.startswith(self.root_page.path)) + self.assertEqual(response.context['self'].get_parent(), self.root_page) -class TestPageEdit(TestCase): + +class TestPageEdit(TestCase, WagtailTestUtils): def setUp(self): # Find root page self.root_page = Page.objects.get(id=2) @@ -206,7 +214,7 @@ class TestPageEdit(TestCase): self.root_page.add_child(instance=self.event_page) # Login - self.user = login(self.client) + self.user = self.login() def test_page_edit(self): # Tests that the edit page loads @@ -238,6 +246,7 @@ class TestPageEdit(TestCase): # Should be redirected to explorer page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # The page should have "has_unpublished_changes" flag set child_page_new = SimplePage.objects.get(id=self.child_page.id) @@ -255,6 +264,7 @@ class TestPageEdit(TestCase): # Should be redirected to explorer page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # Check that the page was edited child_page_new = SimplePage.objects.get(id=self.child_page.id) @@ -278,6 +288,7 @@ class TestPageEdit(TestCase): # Should be redirected to explorer page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # The page should have "has_unpublished_changes" flag set child_page_new = SimplePage.objects.get(id=self.child_page.id) @@ -306,7 +317,7 @@ class TestPageEdit(TestCase): self.assertContains(response, "I've been edited!") -class TestPageDelete(TestCase): +class TestPageDelete(TestCase, WagtailTestUtils): def setUp(self): # Find root page self.root_page = Page.objects.get(id=2) @@ -318,7 +329,7 @@ class TestPageDelete(TestCase): self.root_page.add_child(instance=self.child_page) # Login - self.user = login(self.client) + self.user = self.login() def test_page_delete(self): response = self.client.get(reverse('wagtailadmin_pages_delete', args=(self.child_page.id, ))) @@ -344,15 +355,16 @@ class TestPageDelete(TestCase): # Should be redirected to explorer page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # Check that the page is gone self.assertEqual(Page.objects.filter(path__startswith=self.root_page.path, slug='hello-world').count(), 0) -class TestPageSearch(TestCase): +class TestPageSearch(TestCase, WagtailTestUtils): def setUp(self): # Login - login(self.client) + self.login() def get(self, params=None, **extra): return self.client.get(reverse('wagtailadmin_pages_search'), params or {}, **extra) @@ -390,7 +402,7 @@ class TestPageSearch(TestCase): self.assertTrue(any([r.slug == 'root' for r in results])) -class TestPageMove(TestCase): +class TestPageMove(TestCase, WagtailTestUtils): def setUp(self): # Find root page self.root_page = Page.objects.get(id=2) @@ -413,7 +425,7 @@ class TestPageMove(TestCase): self.section_a.add_child(instance=self.test_page) # Login - self.user = login(self.client) + self.user = self.login() def test_page_move(self): response = self.client.get(reverse('wagtailadmin_pages_move', args=(self.test_page.id, ))) @@ -442,18 +454,18 @@ class TestPageMove(TestCase): self.assertEqual(response.status_code, 200) -class TestPageUnpublish(TestCase): +class TestPageUnpublish(TestCase, WagtailTestUtils): def setUp(self): - self.user = login(self.client) + self.user = self.login() # Create a page to unpublish - root_page = Page.objects.get(id=2) + self.root_page = Page.objects.get(id=2) self.page = SimplePage( title="Hello world!", slug='hello-world', live=True, ) - root_page.add_child(instance=self.page) + self.root_page.add_child(instance=self.page) def test_unpublish_view(self): """ @@ -502,14 +514,15 @@ class TestPageUnpublish(TestCase): 'foo': "Must post something or the view won't see this as a POST request", }) - # Check that the user was redirected + # Check that the user was redirected to the explore page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_explore', args=(self.root_page.id, ))) # Check that the page was unpublished self.assertFalse(SimplePage.objects.get(id=self.page.id).live) -class TestApproveRejectModeration(TestCase): +class TestApproveRejectModeration(TestCase, WagtailTestUtils): def setUp(self): self.submitter = User.objects.create_superuser( username='submitter', @@ -517,7 +530,7 @@ class TestApproveRejectModeration(TestCase): password='password', ) - self.user = login(self.client) + self.user = self.login() # Create a page and submit it for moderation root_page = Page.objects.get(id=2) @@ -540,8 +553,9 @@ class TestApproveRejectModeration(TestCase): 'foo': "Must post something or the view won't see this as a POST request", }) - # Check that the user was redirected + # Check that the user was redirected to the dashboard self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_home')) # Page must be live self.assertTrue(Page.objects.get(id=self.page.id).live) @@ -591,8 +605,9 @@ class TestApproveRejectModeration(TestCase): 'foo': "Must post something or the view won't see this as a POST request", }) - # Check that the user was redirected + # Check that the user was redirected to the dashboard self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailadmin_home')) # Page must not be live self.assertFalse(Page.objects.get(id=self.page.id).live) @@ -645,11 +660,11 @@ class TestApproveRejectModeration(TestCase): self.assertContains(response, "Hello world!") -class TestContentTypeUse(TestCase): +class TestContentTypeUse(TestCase, WagtailTestUtils): fixtures = ['test.json'] def setUp(self): - self.user = login(self.client) + self.user = self.login() def test_content_type_use(self): # Get use of event page @@ -659,3 +674,48 @@ class TestContentTypeUse(TestCase): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'wagtailadmin/pages/content_type_use.html') self.assertContains(response, "Christmas") + + +class TestSubpageBusinessRules(TestCase, WagtailTestUtils): + def setUp(self): + # Find root page + self.root_page = Page.objects.get(id=2) + + # Add standard page + self.standard_index = StandardIndex() + self.standard_index.title = "Standard Index" + self.standard_index.slug = "standard-index" + self.root_page.add_child(instance=self.standard_index) + + # Add business page + self.business_index = BusinessIndex() + self.business_index.title = "Business Index" + self.business_index.slug = "business-index" + self.root_page.add_child(instance=self.business_index) + + # Add business child + self.business_child = BusinessChild() + self.business_child.title = "Business Child" + self.business_child.slug = "business-child" + self.business_index.add_child(instance=self.business_child) + + # Login + self.login() + + def test_standard_subpage(self): + response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(self.standard_index.id, ))) + self.assertEqual(response.status_code, 200) + self.assertContains(response, 'Standard Child') + self.assertContains(response, 'Business Child') + + def test_business_subpage(self): + response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(self.business_index.id, ))) + self.assertEqual(response.status_code, 200) + self.assertNotContains(response, 'Standard Child') + self.assertContains(response, 'Business Child') + + def test_business_child_subpage(self): + response = self.client.get(reverse('wagtailadmin_pages_add_subpage', args=(self.business_child.id, ))) + self.assertEqual(response.status_code, 200) + self.assertNotContains(response, 'Standard Child') + self.assertEqual(0, len(response.context['page_types'])) diff --git a/wagtail/wagtailadmin/tests/tests.py b/wagtail/wagtailadmin/tests/tests.py index 12aa28a0b..f014c026d 100644 --- a/wagtail/wagtailadmin/tests/tests.py +++ b/wagtail/wagtailadmin/tests/tests.py @@ -1,26 +1,26 @@ from django.test import TestCase from wagtail.tests.models import SimplePage, EventPage -from wagtail.tests.utils import login, unittest +from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.wagtailcore.models import Page from wagtail.wagtailadmin.tasks import send_email_task from django.core.urlresolvers import reverse from django.core import mail -class TestHome(TestCase): +class TestHome(TestCase, WagtailTestUtils): def setUp(self): # Login - login(self.client) + self.login() - def test_status_code(self): + def test_simple(self): response = self.client.get(reverse('wagtailadmin_home')) self.assertEqual(response.status_code, 200) -class TestEditorHooks(TestCase): +class TestEditorHooks(TestCase, WagtailTestUtils): def setUp(self): self.homepage = Page.objects.get(id=2) - login(self.client) + self.login() def test_editor_css_and_js_hooks_on_add(self): response = self.client.get(reverse('wagtailadmin_pages_create', args=('tests', 'simplepage', self.homepage.id))) diff --git a/wagtail/wagtailadmin/urls.py b/wagtail/wagtailadmin/urls.py index 8fbf2f6e7..21f127c1d 100644 --- a/wagtail/wagtailadmin/urls.py +++ b/wagtail/wagtailadmin/urls.py @@ -5,15 +5,8 @@ from wagtail.wagtailadmin.forms import LoginForm, PasswordResetForm from wagtail.wagtailadmin.views import account, chooser, home, pages, tags, userbar from wagtail.wagtailadmin import hooks -urlpatterns = [ - url( - r'^login/$', 'django.contrib.auth.views.login', { - 'template_name': 'wagtailadmin/login.html', - 'authentication_form': LoginForm, - 'extra_context': {'show_password_reset': getattr(settings, 'WAGTAIL_PASSWORD_MANAGEMENT_ENABLED', True)}, - }, name='wagtailadmin_login' - ), +urlpatterns = [ # Password reset url( r'^password_reset/$', 'django.contrib.auth.views.password_reset', { @@ -56,7 +49,8 @@ urlpatterns += [ url(r'^pages/(\d+)/edit/$', pages.edit, name='wagtailadmin_pages_edit'), url(r'^pages/(\d+)/edit/preview/$', pages.preview_on_edit, name='wagtailadmin_pages_preview_on_edit'), - url(r'^pages/preview_placeholder/$', pages.preview_placeholder, name='wagtailadmin_pages_preview_placeholder'), + url(r'^pages/preview/$', pages.preview, name='wagtailadmin_pages_preview'), + url(r'^pages/preview_loading/$', pages.preview_loading, name='wagtailadmin_pages_preview_loading'), url(r'^pages/(\d+)/view_draft/$', pages.view_draft, name='wagtailadmin_pages_view_draft'), url(r'^pages/(\d+)/add_subpage/$', pages.add_subpage, name='wagtailadmin_pages_add_subpage'), @@ -81,6 +75,7 @@ urlpatterns += [ url(r'^tag-autocomplete/$', tags.autocomplete, name='wagtailadmin_tag_autocomplete'), + url(r'^login/$', account.login, name='wagtailadmin_login'), url(r'^account/$', account.account, name='wagtailadmin_account'), url(r'^account/change_password/$', account.change_password, name='wagtailadmin_account_change_password'), url(r'^logout/$', account.logout, name='wagtailadmin_logout'), @@ -90,6 +85,13 @@ urlpatterns += [ ] +# This is here to make sure that 'django.contrib.auth.views.login' is reversed correctly +# It must be placed after 'wagtailadmin_login' to prevent this from being used +urlpatterns += [ + url(r'^login/$', 'django.contrib.auth.views.login'), +] + + # Import additional urlpatterns from any apps that define a register_admin_urls hook for fn in hooks.get_hooks('register_admin_urls'): urls = fn() diff --git a/wagtail/wagtailadmin/views/account.py b/wagtail/wagtailadmin/views/account.py index 8479ea6b0..c5e461f55 100644 --- a/wagtail/wagtailadmin/views/account.py +++ b/wagtail/wagtailadmin/views/account.py @@ -3,8 +3,13 @@ from django.shortcuts import render, redirect from django.contrib import messages from django.contrib.auth.forms import SetPasswordForm from django.contrib.auth.decorators import permission_required -from django.contrib.auth.views import logout as auth_logout +from django.contrib.auth.views import logout as auth_logout, login as auth_login from django.utils.translation import ugettext as _ +from django.views.decorators.debug import sensitive_post_parameters +from django.views.decorators.cache import never_cache + +from wagtail.wagtailadmin import forms + @permission_required('wagtailadmin.access_admin') def account(request): @@ -37,6 +42,21 @@ def change_password(request): }) +@sensitive_post_parameters() +@never_cache +def login(request): + if request.user.is_authenticated(): + return redirect('wagtailadmin_home') + else: + return auth_login(request, + template_name='wagtailadmin/login.html', + authentication_form=forms.LoginForm, + extra_context={ + 'show_password_reset': getattr(settings, 'WAGTAIL_PASSWORD_MANAGEMENT_ENABLED', True), + }, + ) + + def logout(request): response = auth_logout(request, next_page = 'wagtailadmin_login') diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 69e6b7f4f..c3eb24e9e 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -57,13 +57,11 @@ def add_subpage(request, parent_page_id): if not parent_page.permissions_for_user(request.user).can_add_subpage(): raise PermissionDenied - page_types = sorted([ContentType.objects.get_for_model(model_class) for model_class in parent_page.clean_subpage_types()], key=lambda pagetype: pagetype.name.lower()) - all_page_types = sorted(get_page_types(), key=lambda pagetype: pagetype.name.lower()) + page_types = sorted(parent_page.clean_subpage_types(), key=lambda pagetype: pagetype.name.lower()) return render(request, 'wagtailadmin/pages/add_subpage.html', { 'parent_page': parent_page, 'page_types': page_types, - 'all_page_types': all_page_types, }) @@ -364,6 +362,10 @@ def preview_on_create(request, content_type_app_name, content_type_model_name, p parent_page = get_object_or_404(Page, id=parent_page_id).specific page.set_url_path(parent_page) + # Set treebeard attributes + page.depth = parent_page.depth + 1 + page.path = Page._get_children_path_interval(parent_page.path)[1] + # This view will generally be invoked as an AJAX request; as such, in the case of # an error Django will return a plaintext response. This isn't what we want, since # we will be writing the response back to an HTML page regardless of success or @@ -395,7 +397,7 @@ def preview_on_create(request, content_type_app_name, content_type_model_name, p return response -def preview_placeholder(request): +def preview(request): """ The HTML of a previewed page is written to the destination browser window using document.write. This overwrites any previous content in the window, while keeping its URL intact. This in turn @@ -416,8 +418,13 @@ def preview_placeholder(request): Since we're going to this trouble, we'll also take the opportunity to display a spinner on the placeholder page, providing some much-needed visual feedback. """ - return render(request, 'wagtailadmin/pages/preview_placeholder.html') + return render(request, 'wagtailadmin/pages/preview.html') +def preview_loading(request): + """ + This page is blank, but must be real HTML so its DOM can be written to once the preview of the page has rendered + """ + return HttpResponse("") @permission_required('wagtailadmin.access_admin') def unpublish(request, page_id): diff --git a/wagtail/wagtailadmin/views/userbar.py b/wagtail/wagtailadmin/views/userbar.py index 6e6ef3492..2b3749da0 100644 --- a/wagtail/wagtailadmin/views/userbar.py +++ b/wagtail/wagtailadmin/views/userbar.py @@ -1,9 +1,12 @@ from django.shortcuts import render +from django.contrib.auth.decorators import permission_required from wagtail.wagtailadmin.userbar import EditPageItem, AddPageItem, ApproveModerationEditPageItem, RejectModerationEditPageItem from wagtail.wagtailadmin import hooks from wagtail.wagtailcore.models import Page, PageRevision + +@permission_required('wagtailadmin.access_admin', raise_exception=True) def for_frontend(request, page_id): items = [ EditPageItem(Page.objects.get(id=page_id)), @@ -24,6 +27,8 @@ def for_frontend(request, page_id): 'items': rendered_items, }) + +@permission_required('wagtailadmin.access_admin', raise_exception=True) def for_moderation(request, revision_id): items = [ EditPageItem(PageRevision.objects.get(id=revision_id).page), @@ -44,4 +49,4 @@ def for_moderation(request, revision_id): # Render the edit bird return render(request, 'wagtailadmin/userbar/base.html', { 'items': rendered_items, - }) \ No newline at end of file + }) diff --git a/wagtail/wagtailcore/models.py b/wagtail/wagtailcore/models.py index b7e3d349e..5c3f9d1c5 100644 --- a/wagtail/wagtailcore/models.py +++ b/wagtail/wagtailcore/models.py @@ -1,7 +1,6 @@ -import sys -import os from StringIO import StringIO from urlparse import urlparse +import warnings from modelcluster.models import ClusterableModel @@ -101,30 +100,29 @@ def get_page_types(): return _PAGE_CONTENT_TYPES -LEAF_PAGE_MODEL_CLASSES = [] -_LEAF_PAGE_CONTENT_TYPE_IDS = [] - - def get_leaf_page_content_type_ids(): - global _LEAF_PAGE_CONTENT_TYPE_IDS - if len(_LEAF_PAGE_CONTENT_TYPE_IDS) != len(LEAF_PAGE_MODEL_CLASSES): - _LEAF_PAGE_CONTENT_TYPE_IDS = [ - ContentType.objects.get_for_model(cls).id for cls in LEAF_PAGE_MODEL_CLASSES - ] - return _LEAF_PAGE_CONTENT_TYPE_IDS - - -NAVIGABLE_PAGE_MODEL_CLASSES = [] -_NAVIGABLE_PAGE_CONTENT_TYPE_IDS = [] - + warnings.warn(""" + get_leaf_page_content_type_ids is deprecated, as it treats pages without an explicit subpage_types + setting as 'leaf' pages. Code that calls get_leaf_page_content_type_ids must be rewritten to avoid + this incorrect assumption. + """, DeprecationWarning) + return [ + content_type.id + for content_type in get_page_types() + if not getattr(content_type.model_class(), 'subpage_types', None) + ] def get_navigable_page_content_type_ids(): - global _NAVIGABLE_PAGE_CONTENT_TYPE_IDS - if len(_NAVIGABLE_PAGE_CONTENT_TYPE_IDS) != len(NAVIGABLE_PAGE_MODEL_CLASSES): - _NAVIGABLE_PAGE_CONTENT_TYPE_IDS = [ - ContentType.objects.get_for_model(cls).id for cls in NAVIGABLE_PAGE_MODEL_CLASSES - ] - return _NAVIGABLE_PAGE_CONTENT_TYPE_IDS + warnings.warn(""" + get_navigable_page_content_type_ids is deprecated, as it treats pages without an explicit subpage_types + setting as 'leaf' pages. Code that calls get_navigable_page_content_type_ids must be rewritten to avoid + this incorrect assumption. + """, DeprecationWarning) + return [ + content_type.id + for content_type in get_page_types() + if getattr(content_type.model_class(), 'subpage_types', None) + ] class PageManager(models.Manager): @@ -209,10 +207,6 @@ class PageBase(models.base.ModelBase): if not cls.is_abstract: # register this type in the list of page content types PAGE_MODEL_CLASSES.append(cls) - if cls.subpage_types: - NAVIGABLE_PAGE_MODEL_CLASSES.append(cls) - else: - LEAF_PAGE_MODEL_CLASSES.append(cls) class Page(MP_Node, ClusterableModel, Indexed): @@ -259,9 +253,6 @@ class Page(MP_Node, ClusterableModel, Indexed): def __unicode__(self): return self.title - # by default pages do not allow any kind of subpages - subpage_types = [] - is_abstract = True # don't offer Page in the list of page types a superuser can create def set_url_path(self, parent): @@ -416,10 +407,10 @@ class Page(MP_Node, ClusterableModel, Indexed): def is_navigable(self): """ Return true if it's meaningful to browse subpages of this page - - i.e. it currently has subpages, or its page type indicates that sub-pages are supported, + i.e. it currently has subpages, or it's at the top level (this rule necessary for empty out-of-the-box sites to have working navigation) """ - return (not self.is_leaf()) or (self.content_type_id not in get_leaf_page_content_type_ids()) or self.depth == 2 + return (not self.is_leaf()) or self.depth == 2 def get_other_siblings(self): # get sibling pages excluding self @@ -484,25 +475,30 @@ class Page(MP_Node, ClusterableModel, Indexed): where required """ if cls._clean_subpage_types is None: - res = [] - for page_type in cls.subpage_types: - if isinstance(page_type, basestring): - try: - app_label, model_name = page_type.split(".") - except ValueError: - # If we can't split, assume a model in current app - app_label = cls._meta.app_label - model_name = page_type + subpage_types = getattr(cls, 'subpage_types', None) + if subpage_types is None: + # if subpage_types is not specified on the Page class, allow all page types as subpages + res = get_page_types() + else: + res = [] + for page_type in cls.subpage_types: + if isinstance(page_type, basestring): + try: + app_label, model_name = page_type.split(".") + except ValueError: + # If we can't split, assume a model in current app + app_label = cls._meta.app_label + model_name = page_type + + model = get_model(app_label, model_name) + if model: + res.append(ContentType.objects.get_for_model(model)) + else: + raise NameError(_("name '{0}' (used in subpage_types list) is not defined.").format(page_type)) - model = get_model(app_label, model_name) - if model: - res.append(model) else: - raise NameError(_("name '{0}' (used in subpage_types list) is not defined.").format(page_type)) - - else: - # assume it's already a model class - res.append(page_type) + # assume it's already a model class + res.append(ContentType.objects.get_for_model(page_type)) cls._clean_subpage_types = res @@ -652,13 +648,8 @@ class Page(MP_Node, ClusterableModel, Indexed): def get_navigation_menu_items(): # Get all pages that appear in the navigation menu: ones which have children, - # or are a non-leaf type (indicating that they *could* have children), # or are at the top-level (this rule required so that an empty site out-of-the-box has a working menu) - navigable_content_type_ids = get_navigable_page_content_type_ids() - if navigable_content_type_ids: - pages = Page.objects.filter(Q(content_type__in=navigable_content_type_ids)|Q(depth=2)|Q(numchild__gt=0)).order_by('path') - else: - pages = Page.objects.filter(Q(depth=2)|Q(numchild__gt=0)).order_by('path') + pages = Page.objects.filter(Q(depth=2)|Q(numchild__gt=0)).order_by('path') # Turn this into a tree structure: # tree_node = (page, children) diff --git a/wagtail/wagtaildocs/tests.py b/wagtail/wagtaildocs/tests.py index d068f9a27..3353ce39e 100644 --- a/wagtail/wagtaildocs/tests.py +++ b/wagtail/wagtaildocs/tests.py @@ -1,6 +1,6 @@ from django.test import TestCase from wagtail.wagtaildocs import models -from wagtail.tests.utils import login +from wagtail.tests.utils import WagtailTestUtils from django.contrib.auth.models import User, Group, Permission from django.core.urlresolvers import reverse from django.core.files.base import ContentFile @@ -39,15 +39,17 @@ class TestDocumentPermissions(TestCase): ## ===== ADMIN VIEWS ===== -class TestDocumentIndexView(TestCase): +class TestDocumentIndexView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtaildocs_index'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtaildocs/documents/index.html') def test_search(self): response = self.get({'q': "Hello"}) @@ -67,20 +69,24 @@ class TestDocumentIndexView(TestCase): self.assertEqual(response.status_code, 200) -class TestDocumentAddView(TestCase): +class TestDocumentAddView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtaildocs_add_document'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtaildocs/documents/add.html') + + # TODO: Test posting -class TestDocumentEditView(TestCase): +class TestDocumentEditView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() # Create a document to edit self.document = models.Document.objects.create(title="Test document") @@ -88,13 +94,17 @@ class TestDocumentEditView(TestCase): def get(self, params={}): return self.client.get(reverse('wagtaildocs_edit_document', args=(self.document.id,)), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtaildocs/documents/edit.html') + + # TODO: Test posting -class TestDocumentDeleteView(TestCase): +class TestDocumentDeleteView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() # Create a document to delete self.document = models.Document.objects.create(title="Test document") @@ -102,19 +112,26 @@ class TestDocumentDeleteView(TestCase): def get(self, params={}): return self.client.get(reverse('wagtaildocs_delete_document', args=(self.document.id,)), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtaildocs/documents/confirm_delete.html') + + # TODO: Test posting -class TestDocumentChooserView(TestCase): +class TestDocumentChooserView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtaildocs_chooser'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtaildocs/chooser/chooser.html') + self.assertTemplateUsed(response, 'wagtaildocs/chooser/chooser.js') def test_search(self): response = self.get({'q': "Hello"}) @@ -128,9 +145,9 @@ class TestDocumentChooserView(TestCase): self.assertEqual(response.status_code, 200) -class TestDocumentChooserChosenView(TestCase): +class TestDocumentChooserChosenView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() # Create a document to choose self.document = models.Document.objects.create(title="Test document") @@ -138,19 +155,28 @@ class TestDocumentChooserChosenView(TestCase): def get(self, params={}): return self.client.get(reverse('wagtaildocs_document_chosen', args=(self.document.id,)), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtaildocs/chooser/document_chosen.js') + + # TODO: Test posting -class TestDocumentChooserUploadView(TestCase): +class TestDocumentChooserUploadView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtaildocs_chooser_upload'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtaildocs/chooser/chooser.html') + self.assertTemplateUsed(response, 'wagtaildocs/chooser/chooser.js') + + # TODO: Test document upload with chooser class TestDocumentFilenameProperties(TestCase): diff --git a/wagtail/wagtailembeds/tests.py b/wagtail/wagtailembeds/tests.py index 0fbaf5baf..892dde5bd 100644 --- a/wagtail/wagtailembeds/tests.py +++ b/wagtail/wagtailembeds/tests.py @@ -8,10 +8,8 @@ except ImportError: no_embedly = True from django.test import TestCase -from django.test.client import Client -from wagtail.tests.utils import login -from wagtail.tests.utils import unittest +from wagtail.tests.utils import WagtailTestUtils, unittest from wagtail.wagtailembeds import get_embed from wagtail.wagtailembeds.embeds import ( @@ -19,8 +17,8 @@ from wagtail.wagtailembeds.embeds import ( EmbedlyException, AccessDeniedEmbedlyException, ) -from wagtail.wagtailembeds.embeds import embedly as wagtail_embedly -from wagtail.wagtailembeds.embeds import oembed as wagtail_oembed +from wagtail.wagtailembeds.embeds import embedly as wagtail_embedly, oembed as wagtail_oembed + class TestEmbeds(TestCase): @@ -82,10 +80,10 @@ class TestEmbeds(TestCase): self.assertEqual(embed.width, None) -class TestChooser(TestCase): +class TestChooser(TestCase, WagtailTestUtils): def setUp(self): # login - login(self.client) + self.login() def test_chooser(self): r = self.client.get('/admin/embeds/chooser/') diff --git a/wagtail/wagtailforms/templates/wagtailforms/index_submissions.html b/wagtail/wagtailforms/templates/wagtailforms/index_submissions.html index a1b45f6d0..ae9572295 100644 --- a/wagtail/wagtailforms/templates/wagtailforms/index_submissions.html +++ b/wagtail/wagtailforms/templates/wagtailforms/index_submissions.html @@ -1,30 +1,28 @@ {% extends "wagtailadmin/base.html" %} {% load i18n %} -{% load localize %} {% block titletag %}{% blocktrans with form_title=form_page.title|capfirst %}Submissions of {{ form_title }}{% endblocktrans %}{% endblock %} {% block bodyclass %}menu-snippets{% endblock %} {% block extra_js %} - {% get_localized_datepicker_js %} - {% get_date_format_override as format_override %} - + {% include "wagtailadmin/shared/datetimepicker_translations.html" %} + {% endblock %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/chooser/chooser.js b/wagtail/wagtailimages/templates/wagtailimages/chooser/chooser.js index 18ff4c5c2..237b960f6 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/chooser/chooser.js +++ b/wagtail/wagtailimages/templates/wagtailimages/chooser/chooser.js @@ -1,4 +1,6 @@ function(modal) { + var searchUrl = $('form.image-search', modal.body).attr('action'); + function ajaxifyLinks (context) { $('.listing a', context).click(function() { modal.loadUrl(this.href); @@ -12,7 +14,6 @@ function(modal) { }); } - var searchUrl = $('form.image-search', modal.body).attr('action'); function search() { $.ajax({ url: searchUrl, @@ -24,8 +25,8 @@ function(modal) { }); return false; } - function setPage(page) { + function setPage(page) { if($('#id_q').val().length){ dataObj = {q: $('#id_q').val(), p: page}; }else{ diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index 9f05ccad9..b31e33745 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import User, Group, Permission from django.core.urlresolvers import reverse from django.core.files.uploadedfile import SimpleUploadedFile -from wagtail.tests.utils import login, unittest +from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.wagtailimages.models import get_image_model from wagtail.wagtailimages.templatetags import image_tags @@ -201,15 +201,17 @@ class TestImageTag(TestCase): ## ===== ADMIN VIEWS ===== -class TestImageIndexView(TestCase): +class TestImageIndexView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailimages_index'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/images/index.html') def test_search(self): response = self.get({'q': "Hello"}) @@ -229,9 +231,9 @@ class TestImageIndexView(TestCase): self.assertEqual(response.status_code, 200) -class TestImageAddView(TestCase): +class TestImageAddView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailimages_add_image'), params) @@ -239,8 +241,10 @@ class TestImageAddView(TestCase): def post(self, post_data={}): return self.client.post(reverse('wagtailimages_add_image'), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/images/add.html') def test_add(self): response = self.post({ @@ -250,6 +254,7 @@ class TestImageAddView(TestCase): # Should redirect back to index self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailimages_index')) # Check that the image was created images = Image.objects.filter(title="Test image") @@ -261,9 +266,9 @@ class TestImageAddView(TestCase): self.assertEqual(image.height, 480) -class TestImageEditView(TestCase): +class TestImageEditView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() # Create an image to edit self.image = Image.objects.create( @@ -277,8 +282,10 @@ class TestImageEditView(TestCase): def post(self, post_data={}): return self.client.post(reverse('wagtailimages_edit_image', args=(self.image.id,)), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/images/edit.html') def test_edit(self): response = self.post({ @@ -287,15 +294,16 @@ class TestImageEditView(TestCase): # Should redirect back to index self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailimages_index')) # Check that the image was edited image = Image.objects.get(id=self.image.id) self.assertEqual(image.title, "Edited") -class TestImageDeleteView(TestCase): +class TestImageDeleteView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() # Create an image to edit self.image = Image.objects.create( @@ -309,8 +317,10 @@ class TestImageDeleteView(TestCase): def post(self, post_data={}): return self.client.post(reverse('wagtailimages_delete_image', args=(self.image.id,)), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/images/confirm_delete.html') def test_delete(self): response = self.post({ @@ -319,21 +329,25 @@ class TestImageDeleteView(TestCase): # Should redirect back to index self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailimages_index')) # Check that the image was deleted images = Image.objects.filter(title="Test image") self.assertEqual(images.count(), 0) -class TestImageChooserView(TestCase): +class TestImageChooserView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailimages_chooser'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/chooser/chooser.html') + self.assertTemplateUsed(response, 'wagtailimages/chooser/chooser.js') def test_search(self): response = self.get({'q': "Hello"}) @@ -347,9 +361,9 @@ class TestImageChooserView(TestCase): self.assertEqual(response.status_code, 200) -class TestImageChooserChosenView(TestCase): +class TestImageChooserChosenView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() # Create an image to edit self.image = Image.objects.create( @@ -360,16 +374,25 @@ class TestImageChooserChosenView(TestCase): def get(self, params={}): return self.client.get(reverse('wagtailimages_image_chosen', args=(self.image.id,)), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/chooser/image_chosen.js') + + # TODO: Test posting -class TestImageChooserUploadView(TestCase): +class TestImageChooserUploadView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailimages_chooser_upload'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailimages/chooser/chooser.html') + self.assertTemplateUsed(response, 'wagtailimages/chooser/chooser.js') + + # TODO: Test uploading through chooser diff --git a/wagtail/wagtailredirects/tests.py b/wagtail/wagtailredirects/tests.py index a14a853fa..29ad7ec0b 100644 --- a/wagtail/wagtailredirects/tests.py +++ b/wagtail/wagtailredirects/tests.py @@ -1,7 +1,7 @@ from django.test import TestCase from django.test.client import Client from wagtail.wagtailredirects import models -from wagtail.tests.utils import login +from wagtail.tests.utils import WagtailTestUtils from django.core.urlresolvers import reverse @@ -66,15 +66,17 @@ class TestRedirects(TestCase): self.assertTrue(r.has_header('Location')) -class TestRedirectsIndexView(TestCase): +class TestRedirectsIndexView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailredirects_index'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailredirects/index.html') def test_search(self): response = self.get({'q': "Hello"}) @@ -88,9 +90,9 @@ class TestRedirectsIndexView(TestCase): self.assertEqual(response.status_code, 200) -class TestRedirectsAddView(TestCase): +class TestRedirectsAddView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailredirects_add_redirect'), params) @@ -98,8 +100,10 @@ class TestRedirectsAddView(TestCase): def post(self, post_data={}): return self.client.post(reverse('wagtailredirects_add_redirect'), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailredirects/add.html') def test_add(self): response = self.post({ @@ -110,6 +114,7 @@ class TestRedirectsAddView(TestCase): # Should redirect back to index self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailredirects_index')) # Check that the redirect was created redirects = models.Redirect.objects.filter(old_path='/test') @@ -127,14 +132,14 @@ class TestRedirectsAddView(TestCase): self.assertEqual(response.status_code, 200) -class TestRedirectsEditView(TestCase): +class TestRedirectsEditView(TestCase, WagtailTestUtils): def setUp(self): # Create a redirect to edit self.redirect = models.Redirect(old_path='/test', redirect_link='http://www.test.com/') self.redirect.save() # Login - login(self.client) + self.login() def get(self, params={}, redirect_id=None): return self.client.get(reverse('wagtailredirects_edit_redirect', args=(redirect_id or self.redirect.id, )), params) @@ -142,8 +147,10 @@ class TestRedirectsEditView(TestCase): def post(self, post_data={}, redirect_id=None): return self.client.post(reverse('wagtailredirects_edit_redirect', args=(redirect_id or self.redirect.id, )), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailredirects/edit.html') def test_nonexistant_redirect(self): self.assertEqual(self.get(redirect_id=100000).status_code, 404) @@ -157,6 +164,7 @@ class TestRedirectsEditView(TestCase): # Should redirect back to index self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailredirects_index')) # Check that the redirect was edited redirects = models.Redirect.objects.filter(old_path='/test') @@ -173,14 +181,14 @@ class TestRedirectsEditView(TestCase): # Should not redirect to index self.assertEqual(response.status_code, 200) -class TestRedirectsDeleteView(TestCase): +class TestRedirectsDeleteView(TestCase, WagtailTestUtils): def setUp(self): # Create a redirect to edit self.redirect = models.Redirect(old_path='/test', redirect_link='http://www.test.com/') self.redirect.save() # Login - login(self.client) + self.login() def get(self, params={}, redirect_id=None): return self.client.get(reverse('wagtailredirects_delete_redirect', args=(redirect_id or self.redirect.id, )), params) @@ -188,8 +196,10 @@ class TestRedirectsDeleteView(TestCase): def post(self, post_data={}, redirect_id=None): return self.client.post(reverse('wagtailredirects_delete_redirect', args=(redirect_id or self.redirect.id, )), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailredirects/confirm_delete.html') def test_nonexistant_redirect(self): self.assertEqual(self.get(redirect_id=100000).status_code, 404) @@ -201,6 +211,7 @@ class TestRedirectsDeleteView(TestCase): # Should redirect back to index self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailredirects_index')) # Check that the redirect was deleted redirects = models.Redirect.objects.filter(old_path='/test') diff --git a/wagtail/wagtailsearch/forms.py b/wagtail/wagtailsearch/forms.py index 03e4ecd45..9485e4619 100644 --- a/wagtail/wagtailsearch/forms.py +++ b/wagtail/wagtailsearch/forms.py @@ -31,6 +31,8 @@ EditorsPickFormSetBase = inlineformset_factory(models.Query, models.EditorsPick, class EditorsPickFormSet(EditorsPickFormSetBase): + minimum_forms = 1 + minimum_forms_message = _("Please specify at least one recommendation for this search term.") def add_fields(self, form, *args, **kwargs): super(EditorsPickFormSet, self).add_fields(form, *args, **kwargs) @@ -40,3 +42,20 @@ class EditorsPickFormSet(EditorsPickFormSetBase): # Remove query field del form.fields['query'] + + def clean(self): + # Editors pick must have at least one recommended page to be valid + # Check there is at least one non-deleted form. + non_deleted_forms = self.total_form_count() + non_empty_forms = 0 + for i in xrange(0, self.total_form_count()): + form = self.forms[i] + if self.can_delete and self._should_delete_form(form): + non_deleted_forms -= 1 + if not (form.instance.id is None and not form.has_changed()): + non_empty_forms += 1 + if ( + non_deleted_forms < self.minimum_forms + or non_empty_forms < self.minimum_forms + ): + raise forms.ValidationError(self.minimum_forms_message) diff --git a/wagtail/wagtailsearch/templates/wagtailsearch/editorspicks/add.html b/wagtail/wagtailsearch/templates/wagtailsearch/editorspicks/add.html index 3c927d96c..f443d1a6a 100644 --- a/wagtail/wagtailsearch/templates/wagtailsearch/editorspicks/add.html +++ b/wagtail/wagtailsearch/templates/wagtailsearch/editorspicks/add.html @@ -6,7 +6,7 @@ {% include "wagtailadmin/shared/header.html" with title=add_str icon="pick" %}
    - {% blocktrans %}s + {% blocktrans %}

    Editors picks are a means of recommending specific pages that might not organically come high up in search results. E.g recommending your primary donation page to a user searching with a less common term like "giving".

    {% endblocktrans %} {% blocktrans %} diff --git a/wagtail/wagtailsearch/tests/test_editorspicks.py b/wagtail/wagtailsearch/tests/test_editorspicks.py index e0b49153f..7ee974fd0 100644 --- a/wagtail/wagtailsearch/tests/test_editorspicks.py +++ b/wagtail/wagtailsearch/tests/test_editorspicks.py @@ -1,5 +1,5 @@ from django.test import TestCase -from wagtail.tests.utils import login +from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.wagtailsearch import models @@ -45,15 +45,17 @@ class TestEditorsPicks(TestCase): self.assertEqual(models.Query.get("root page").editors_picks.last().description, "Last editors pick") -class TestEditorsPicksIndexView(TestCase): +class TestEditorsPicksIndexView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get('/admin/search/editorspicks/', params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsearch/editorspicks/index.html') def test_search(self): response = self.get({'q': "Hello"}) @@ -67,20 +69,24 @@ class TestEditorsPicksIndexView(TestCase): self.assertEqual(response.status_code, 200) -class TestEditorsPicksAddView(TestCase): +class TestEditorsPicksAddView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get('/admin/search/editorspicks/add/', params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsearch/editorspicks/add.html') + + # TODO: Test posting -class TestEditorsPicksEditView(TestCase): +class TestEditorsPicksEditView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() # Create an editors pick to edit self.query = models.Query.get("Hello") @@ -89,13 +95,17 @@ class TestEditorsPicksEditView(TestCase): def get(self, params={}): return self.client.get('/admin/search/editorspicks/' + str(self.query.id) + '/', params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsearch/editorspicks/edit.html') + + # TODO: Test posting -class TestEditorsPicksDeleteView(TestCase): +class TestEditorsPicksDeleteView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() # Create an editors pick to delete self.query = models.Query.get("Hello") @@ -104,5 +114,9 @@ class TestEditorsPicksDeleteView(TestCase): def get(self, params={}): return self.client.get('/admin/search/editorspicks/' + str(self.query.id) + '/delete/', params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsearch/editorspicks/confirm_delete.html') + + # TODO: Test posting diff --git a/wagtail/wagtailsearch/tests/test_frontend.py b/wagtail/wagtailsearch/tests/test_frontend.py index 82189cfc9..8081c968d 100644 --- a/wagtail/wagtailsearch/tests/test_frontend.py +++ b/wagtail/wagtailsearch/tests/test_frontend.py @@ -5,8 +5,10 @@ class TestSearchView(TestCase): def get(self, params={}): return self.client.get('/search/', params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsearch/search_results.html') def test_search(self): response = self.get({'q': "Hello"}) @@ -24,8 +26,10 @@ class TestSuggestionsView(TestCase): def get(self, params={}): return self.client.get('/search/suggest/', params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + # TODO: Check that a valid JSON document was returned def test_search(self): response = self.get({'q': "Hello"}) diff --git a/wagtail/wagtailsearch/tests/test_queries.py b/wagtail/wagtailsearch/tests/test_queries.py index 7c65af6bf..5c341d7d6 100644 --- a/wagtail/wagtailsearch/tests/test_queries.py +++ b/wagtail/wagtailsearch/tests/test_queries.py @@ -1,7 +1,7 @@ from django.test import TestCase from django.core import management from wagtail.wagtailsearch import models -from wagtail.tests.utils import login, unittest +from wagtail.tests.utils import unittest, WagtailTestUtils from StringIO import StringIO @@ -149,15 +149,18 @@ class TestGarbageCollectCommand(TestCase): # TODO: Test that this command is acctually doing its job -class TestQueryChooserView(TestCase): +class TestQueryChooserView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get('/admin/search/queries/chooser/', params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsearch/queries/chooser/chooser.html') + self.assertTemplateUsed(response, 'wagtailsearch/queries/chooser/chooser.js') def test_search(self): response = self.get({'q': "Hello"}) diff --git a/wagtail/wagtailsearch/views/editorspicks.py b/wagtail/wagtailsearch/views/editorspicks.py index 97332818e..bb39c02ba 100644 --- a/wagtail/wagtailsearch/views/editorspicks.py +++ b/wagtail/wagtailsearch/views/editorspicks.py @@ -45,12 +45,12 @@ def index(request): def save_editorspicks(query, new_query, editors_pick_formset): - # Set sort_order - for i, form in enumerate(editors_pick_formset.ordered_forms): - form.instance.sort_order = i - # Save if editors_pick_formset.is_valid(): + # Set sort_order + for i, form in enumerate(editors_pick_formset.ordered_forms): + form.instance.sort_order = i + editors_pick_formset.save() # If query was changed, move all editors picks to the new query @@ -72,10 +72,14 @@ def add(request): # Save editors picks editors_pick_formset = forms.EditorsPickFormSet(request.POST, instance=query) - if save_editorspicks(query, query, editors_pick_formset): messages.success(request, _("Editor's picks for '{0}' created.").format(query)) return redirect('wagtailsearch_editorspicks_index') + else: + if len(editors_pick_formset.non_form_errors()): + messages.error(request, " ".join(error for error in editors_pick_formset.non_form_errors())) # formset level error (e.g. no forms submitted) + else: + messages.error(request, _("Recommendations have not been created due to errors")) # specific errors will be displayed within form fields else: editors_pick_formset = forms.EditorsPickFormSet() else: @@ -95,15 +99,22 @@ def edit(request, query_id): if request.POST: # Get query query_form = forms.QueryForm(request.POST) + # and the recommendations + editors_pick_formset = forms.EditorsPickFormSet(request.POST, instance=query) + if query_form.is_valid(): new_query = models.Query.get(query_form['query_string'].value()) # Save editors picks - editors_pick_formset = forms.EditorsPickFormSet(request.POST, instance=query) - if save_editorspicks(query, new_query, editors_pick_formset): messages.success(request, _("Editor's picks for '{0}' updated.").format(new_query)) return redirect('wagtailsearch_editorspicks_index') + else: + if len(editors_pick_formset.non_form_errors()): + messages.error(request, " ".join(error for error in editors_pick_formset.non_form_errors())) # formset level error (e.g. no forms submitted) + else: + messages.error(request, _("Recommendations have not been saved due to errors")) # specific errors will be displayed within form fields + else: query_form = forms.QueryForm(initial=dict(query_string=query.query_string)) editors_pick_formset = forms.EditorsPickFormSet(instance=query) diff --git a/wagtail/wagtailsnippets/tests.py b/wagtail/wagtailsnippets/tests.py index de5e60b9b..9e2587794 100644 --- a/wagtail/wagtailsnippets/tests.py +++ b/wagtail/wagtailsnippets/tests.py @@ -2,46 +2,50 @@ from django.test import TestCase from django.core.urlresolvers import reverse from django.contrib.auth.models import User -from wagtail.tests.utils import login, unittest +from wagtail.tests.utils import unittest, WagtailTestUtils from wagtail.tests.models import Advert, AlphaSnippet, ZuluSnippet from wagtail.wagtailsnippets.models import register_snippet, SNIPPET_MODELS from wagtail.wagtailsnippets.views.snippets import get_content_type_from_url_params, get_snippet_edit_handler from wagtail.wagtailsnippets.edit_handlers import SnippetChooserPanel -class TestSnippetIndexView(TestCase): +class TestSnippetIndexView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailsnippets_index'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsnippets/snippets/index.html') def test_displays_snippet(self): self.assertContains(self.get(), "Adverts") -class TestSnippetListView(TestCase): +class TestSnippetListView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailsnippets_list', args=('tests', 'advert')), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsnippets/snippets/type_index.html') def test_displays_add_button(self): self.assertContains(self.get(), "Add advert") -class TestSnippetCreateView(TestCase): +class TestSnippetCreateView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailsnippets_create', @@ -53,8 +57,10 @@ class TestSnippetCreateView(TestCase): args=('tests', 'advert')), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsnippets/snippets/create.html') def test_create_invalid(self): response = self.post(post_data={'foo': 'bar'}) @@ -65,20 +71,21 @@ class TestSnippetCreateView(TestCase): response = self.post(post_data={'text': 'test_advert', 'url': 'http://www.example.com/'}) self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailsnippets_list', args=('tests', 'advert'))) snippets = Advert.objects.filter(text='test_advert') self.assertEqual(snippets.count(), 1) self.assertEqual(snippets.first().url, 'http://www.example.com/') -class TestSnippetEditView(TestCase): +class TestSnippetEditView(TestCase, WagtailTestUtils): def setUp(self): self.test_snippet = Advert() self.test_snippet.text = 'test_advert' self.test_snippet.url = 'http://www.example.com/' self.test_snippet.save() - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailsnippets_edit', @@ -90,8 +97,10 @@ class TestSnippetEditView(TestCase): args=('tests', 'advert', self.test_snippet.id)), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailsnippets/snippets/edit.html') def test_non_existant_model(self): response = self.client.get(reverse('wagtailsnippets_edit', @@ -112,20 +121,21 @@ class TestSnippetEditView(TestCase): response = self.post(post_data={'text': 'edited_test_advert', 'url': 'http://www.example.com/edited'}) self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailsnippets_list', args=('tests', 'advert'))) snippets = Advert.objects.filter(text='edited_test_advert') self.assertEqual(snippets.count(), 1) self.assertEqual(snippets.first().url, 'http://www.example.com/edited') -class TestSnippetDelete(TestCase): +class TestSnippetDelete(TestCase, WagtailTestUtils): def setUp(self): self.test_snippet = Advert() self.test_snippet.text = 'test_advert' self.test_snippet.url = 'http://www.example.com/' self.test_snippet.save() - login(self.client) + self.login() def test_delete_get(self): response = self.client.get(reverse('wagtailsnippets_delete', args=('tests', 'advert', self.test_snippet.id, ))) @@ -137,6 +147,7 @@ class TestSnippetDelete(TestCase): # Should be redirected to explorer page self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailsnippets_list', args=('tests', 'advert'))) # Check that the page is gone self.assertEqual(Advert.objects.filter(text='test_advert').count(), 0) diff --git a/wagtail/wagtailusers/tests.py b/wagtail/wagtailusers/tests.py index bfe0fe4ef..6de97f202 100644 --- a/wagtail/wagtailusers/tests.py +++ b/wagtail/wagtailusers/tests.py @@ -1,18 +1,20 @@ from django.test import TestCase from django.core.urlresolvers import reverse from django.contrib.auth.models import User -from wagtail.tests.utils import login +from wagtail.tests.utils import WagtailTestUtils -class TestUserIndexView(TestCase): +class TestUserIndexView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailusers_index'), params) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailusers/index.html') def test_search(self): response = self.get({'q': "Hello"}) @@ -26,9 +28,9 @@ class TestUserIndexView(TestCase): self.assertEqual(response.status_code, 200) -class TestUserCreateView(TestCase): +class TestUserCreateView(TestCase, WagtailTestUtils): def setUp(self): - login(self.client) + self.login() def get(self, params={}): return self.client.get(reverse('wagtailusers_create'), params) @@ -36,8 +38,10 @@ class TestUserCreateView(TestCase): def post(self, post_data={}): return self.client.post(reverse('wagtailusers_create'), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailusers/create.html') def test_create(self): response = self.post({ @@ -51,6 +55,7 @@ class TestUserCreateView(TestCase): # Should redirect back to index self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailusers_index')) # Check that the user was created users = User.objects.filter(username='testuser') @@ -58,13 +63,13 @@ class TestUserCreateView(TestCase): self.assertEqual(users.first().email, 'test@user.com') -class TestUserEditView(TestCase): +class TestUserEditView(TestCase, WagtailTestUtils): def setUp(self): # Create a user to edit self.test_user = User.objects.create_user(username='testuser', email='testuser@email.com', password='password') # Login - login(self.client) + self.login() def get(self, params={}, user_id=None): return self.client.get(reverse('wagtailusers_edit', args=(user_id or self.test_user.id, )), params) @@ -72,8 +77,10 @@ class TestUserEditView(TestCase): def post(self, post_data={}, user_id=None): return self.client.post(reverse('wagtailusers_edit', args=(user_id or self.test_user.id, )), post_data) - def test_status_code(self): - self.assertEqual(self.get().status_code, 200) + def test_simple(self): + response = self.get() + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'wagtailusers/edit.html') def test_nonexistant_redirect(self): self.assertEqual(self.get(user_id=100000).status_code, 404) @@ -90,6 +97,7 @@ class TestUserEditView(TestCase): # Should redirect back to index self.assertEqual(response.status_code, 302) + self.assertURLEqual(response.url, reverse('wagtailusers_index')) # Check that the user was edited user = User.objects.get(id=self.test_user.id)