Commit a0abbd087c864053dcca55ff650bbc73e49ee9fa
Exists in
master
and in
5 other branches
Merge in dev
Showing
210 changed files
with
7256 additions
and
1923 deletions
Show diff stats
Too many changes.
To preserve performance only 100 of 210 files displayed.
amadeus/urls.py
| ... | ... | @@ -21,7 +21,7 @@ from django.contrib import admin |
| 21 | 21 | |
| 22 | 22 | urlpatterns = [ |
| 23 | 23 | url(r'^home/', include('app.urls', namespace = 'app')), |
| 24 | - url(r'^course/', include('courses.urls', namespace = 'course')), | |
| 24 | + url(r'^courses/', include('courses.urls', namespace = 'course')), | |
| 25 | 25 | url(r'^users/', include('users.urls', namespace = 'users')), |
| 26 | 26 | url(r'^admin/', admin.site.urls), |
| 27 | 27 | url(r'^', include('core.urls', namespace = 'core')), | ... | ... |
app/templates/home.html
| ... | ... | @@ -3,53 +3,55 @@ |
| 3 | 3 | {% load static i18n django_bootstrap_breadcrumbs permission_tags %} |
| 4 | 4 | |
| 5 | 5 | {% block javascript %} |
| 6 | - <script type="text/javascript"> | |
| 7 | - var pageNum = {{ page_obj.number }}; // The latest page loaded | |
| 8 | - var numberPages = {{ paginator.num_pages }}; // Indicates the number of pages | |
| 9 | - var baseUrl = '{% url "app:index" %}'; | |
| 6 | + {% if page_obj %} | |
| 7 | + <script type="text/javascript"> | |
| 8 | + var pageNum = {{ page_obj.number }}; // The latest page loaded | |
| 9 | + var numberPages = {{ paginator.num_pages }}; // Indicates the number of pages | |
| 10 | + var baseUrl = '{% url "app:index" %}'; | |
| 10 | 11 | |
| 11 | - // loadOnScroll handler | |
| 12 | - var loadOnScroll = function() { | |
| 13 | - // If the current scroll position is past out cutoff point... | |
| 14 | - if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) { | |
| 15 | - // temporarily unhook the scroll event watcher so we don't call a bunch of times in a row | |
| 16 | - $(window).unbind(); | |
| 17 | - // execute the load function below that will visit the view and return the content | |
| 18 | - loadItems(); | |
| 19 | - } | |
| 20 | - }; | |
| 12 | + // loadOnScroll handler | |
| 13 | + var loadOnScroll = function() { | |
| 14 | + // If the current scroll position is past out cutoff point... | |
| 15 | + if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) { | |
| 16 | + // temporarily unhook the scroll event watcher so we don't call a bunch of times in a row | |
| 17 | + $(window).unbind(); | |
| 18 | + // execute the load function below that will visit the view and return the content | |
| 19 | + loadItems(); | |
| 20 | + } | |
| 21 | + }; | |
| 21 | 22 | |
| 22 | - var loadItems = function() { | |
| 23 | - // Check if page is equal to the number of pages | |
| 24 | - if (pageNum == numberPages) { | |
| 25 | - return false | |
| 26 | - } | |
| 27 | - // Update the page number | |
| 28 | - pageNum = pageNum + 1; | |
| 23 | + var loadItems = function() { | |
| 24 | + // Check if page is equal to the number of pages | |
| 25 | + if (pageNum == numberPages) { | |
| 26 | + return false | |
| 27 | + } | |
| 28 | + // Update the page number | |
| 29 | + pageNum = pageNum + 1; | |
| 29 | 30 | |
| 30 | - $("#loading").show(); | |
| 31 | - // Configure the url we're about to hit | |
| 32 | - setTimeout(function (){ | |
| 33 | - $.ajax({ | |
| 34 | - url: baseUrl, | |
| 35 | - data: {'page': pageNum}, | |
| 36 | - success: function(data) { | |
| 37 | - $("#loading").hide(); | |
| 31 | + $("#loading").show(); | |
| 32 | + // Configure the url we're about to hit | |
| 33 | + setTimeout(function (){ | |
| 34 | + $.ajax({ | |
| 35 | + url: baseUrl, | |
| 36 | + data: {'page': pageNum}, | |
| 37 | + success: function(data) { | |
| 38 | + $("#loading").hide(); | |
| 38 | 39 | |
| 39 | - $("#timeline").append(data); | |
| 40 | - }, | |
| 41 | - complete: function(data, textStatus){ | |
| 42 | - // Turn the scroll monitor back on | |
| 43 | - $(window).bind('scroll', loadOnScroll); | |
| 44 | - } | |
| 45 | - }); | |
| 46 | - }, 1000) | |
| 47 | - }; | |
| 40 | + $("#timeline").append(data); | |
| 41 | + }, | |
| 42 | + complete: function(data, textStatus){ | |
| 43 | + // Turn the scroll monitor back on | |
| 44 | + $(window).bind('scroll', loadOnScroll); | |
| 45 | + } | |
| 46 | + }); | |
| 47 | + }, 1000) | |
| 48 | + }; | |
| 48 | 49 | |
| 49 | - $(document).ready(function(){ | |
| 50 | - $(window).bind('scroll', loadOnScroll); | |
| 51 | - }); | |
| 52 | - </script> | |
| 50 | + $(document).ready(function(){ | |
| 51 | + $(window).bind('scroll', loadOnScroll); | |
| 52 | + }); | |
| 53 | + </script> | |
| 54 | + {% endif %} | |
| 53 | 55 | {% endblock %} |
| 54 | 56 | |
| 55 | 57 | {% block breadcrumbs %} |
| ... | ... | @@ -73,6 +75,7 @@ |
| 73 | 75 | {% if user|has_role:'student' or not user.is_staff %} |
| 74 | 76 | <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li> |
| 75 | 77 | {% endif %} |
| 78 | + <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> | |
| 76 | 79 | {% if user|has_role:'system_admin' %} |
| 77 | 80 | <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li> |
| 78 | 81 | {% endif %} | ... | ... |
app/templates/home_student.html
| ... | ... | @@ -24,6 +24,7 @@ |
| 24 | 24 | <ul class="nav nav-pills nav-stacked"> |
| 25 | 25 | <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li> |
| 26 | 26 | <li><a href="{% url 'course:manage' %}">{% trans 'My Courses' %}</a></li> |
| 27 | + <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li> | |
| 27 | 28 | <li><a href="javascript:void(0)">{% trans 'Google accounts' %}</a></li> |
| 28 | 29 | </ul> |
| 29 | 30 | </div> | ... | ... |
app/templates/home_teacher_student_content.html
| ... | ... | @@ -4,19 +4,14 @@ |
| 4 | 4 | |
| 5 | 5 | |
| 6 | 6 | <div class="well timeLine"> |
| 7 | - <div class="row"> | |
| 8 | - <div class="col-md-12"> | |
| 9 | - <p><a href="#"></a></p><h6><a href="#"><i>Default Path to Notification</i></a></h6><p></p> | |
| 10 | - </div> | |
| 11 | - </div> | |
| 7 | + | |
| 12 | 8 | <div class="row"> |
| 13 | 9 | <div class="col-xs-2 col-md-1"> |
| 14 | - <img class="imgTimeLine" src="{{ notification.user.image_url }}"> | |
| 10 | + <img class="imgTimeLine" src="{{ notification.actor.image_url }}"> | |
| 15 | 11 | </div> |
| 16 | 12 | <div class="col-xs-10 col-md-11"> |
| 17 | - <i class="fa fa-pencil-square-o" aria-hidden="true"></i> | |
| 18 | - <a href=""><h4 class="resource_inline"><b>{{ notification.user }}</b></h4></a> | |
| 19 | - <p class="resource_inline">{{notification.message}} em : <a href="{% url 'core:notification_read' notification.id %}">Recurso</a></p> | |
| 13 | + <h4 class="resource_inline"><b>{{ notification.actor.username }}</b></h4> | |
| 14 | + <p class="resource_inline">{{notification.message}} em : <a href="{% url 'core:notification_read' notification.id %}">{{ notification.action_resource.resource.name }}</a></p> | |
| 20 | 15 | <p class="timePost"><i> {{ notification.datetime|timesince }} {% trans "ago" %} </i></p> |
| 21 | 16 | </div> |
| 22 | 17 | </div> | ... | ... |
app/views.py
| ... | ... | @@ -18,8 +18,6 @@ class AppIndex(LoginRequiredMixin, LogMixin, ListView, NotificationMixin): |
| 18 | 18 | context_object_name = 'objects' |
| 19 | 19 | paginate_by = 10 |
| 20 | 20 | |
| 21 | - | |
| 22 | - | |
| 23 | 21 | def get_queryset(self): |
| 24 | 22 | if self.request.user.is_staff: |
| 25 | 23 | objects = Course.objects.all() |
| ... | ... | @@ -42,7 +40,6 @@ class AppIndex(LoginRequiredMixin, LogMixin, ListView, NotificationMixin): |
| 42 | 40 | else: |
| 43 | 41 | self.template_name = "home_teacher_student_content.html" |
| 44 | 42 | |
| 45 | - super(AppIndex, self).createNotification("testando notificacao de login", resource_name="home", resource_link="/") | |
| 46 | 43 | return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs) |
| 47 | 44 | |
| 48 | 45 | ... | ... |
core/decorators.py
| ... | ... | @@ -60,7 +60,7 @@ def notification_decorator(read = False, message = '', actor = None, users = [], |
| 60 | 60 | if action.exists(): |
| 61 | 61 | action = action[0] |
| 62 | 62 | else: |
| 63 | - action = Action(name = not_action) | |
| 63 | + action = Action(name = not_action) | |
| 64 | 64 | action.save() |
| 65 | 65 | |
| 66 | 66 | if resource.exists(): | ... | ... |
core/locale/pt_BR/LC_MESSAGES/django.po
| ... | ... | @@ -20,7 +20,7 @@ msgstr "" |
| 20 | 20 | |
| 21 | 21 | #: core/models.py:15 core/models.py:36 |
| 22 | 22 | msgid "Name" |
| 23 | -msgstr "" | |
| 23 | +msgstr "Nome" | |
| 24 | 24 | |
| 25 | 25 | #: core/models.py:16 core/models.py:37 |
| 26 | 26 | msgid "Created Date" |
| ... | ... | @@ -36,7 +36,7 @@ msgstr "" |
| 36 | 36 | |
| 37 | 37 | #: core/models.py:61 |
| 38 | 38 | msgid "message" |
| 39 | -msgstr "" | |
| 39 | +msgstr "mensagem" | |
| 40 | 40 | |
| 41 | 41 | #: core/models.py:62 |
| 42 | 42 | msgid "Actor" |
| ... | ... | @@ -64,11 +64,11 @@ msgstr "Senha" |
| 64 | 64 | |
| 65 | 65 | #: core/templates/index.html:44 |
| 66 | 66 | msgid "Remember Email" |
| 67 | -msgstr "" | |
| 67 | +msgstr "Lembrar Senha" | |
| 68 | 68 | |
| 69 | 69 | #: core/templates/index.html:53 |
| 70 | 70 | msgid "Guest" |
| 71 | -msgstr "" | |
| 71 | +msgstr "Convidado" | |
| 72 | 72 | |
| 73 | 73 | #: core/templates/index.html:56 |
| 74 | 74 | msgid "Login" |
| ... | ... | @@ -80,11 +80,11 @@ msgstr "Cadastrar" |
| 80 | 80 | |
| 81 | 81 | #: core/templates/register_user.html:29 |
| 82 | 82 | msgid "User Register" |
| 83 | -msgstr "" | |
| 83 | +msgstr "Registrar Usuário" | |
| 84 | 84 | |
| 85 | 85 | #: core/templates/register_user.html:53 |
| 86 | 86 | msgid "Save" |
| 87 | -msgstr "" | |
| 87 | +msgstr "Salvar" | |
| 88 | 88 | |
| 89 | 89 | #: core/templates/remember_password.html:18 |
| 90 | 90 | msgid "E-mail" |
| ... | ... | @@ -92,7 +92,7 @@ msgstr "E-mail" |
| 92 | 92 | |
| 93 | 93 | #: core/templates/remember_password.html:22 |
| 94 | 94 | msgid "Registration" |
| 95 | -msgstr "" | |
| 95 | +msgstr "Registrar" | |
| 96 | 96 | |
| 97 | 97 | #: core/templates/remember_password.html:26 |
| 98 | 98 | msgid "Send" |
| ... | ... | @@ -100,7 +100,7 @@ msgstr "Enviar" |
| 100 | 100 | |
| 101 | 101 | #: core/views.py:31 |
| 102 | 102 | msgid "User successfully registered!" |
| 103 | -msgstr "" | |
| 103 | +msgstr "Usuario cadastrado com sucesso" | |
| 104 | 104 | |
| 105 | 105 | #: core/views.py:54 |
| 106 | 106 | msgid "E-mail or password are incorrect!" | ... | ... |
core/migrations/0001_initial.py
| 1 | 1 | # -*- coding: utf-8 -*- |
| 2 | -# Generated by Django 1.10 on 2016-10-18 21:42 | |
| 2 | +# Generated by Django 1.10 on 2016-10-24 18:59 | |
| 3 | 3 | from __future__ import unicode_literals |
| 4 | 4 | |
| 5 | 5 | import autoslug.fields |
| ... | ... | @@ -20,11 +20,12 @@ class Migration(migrations.Migration): |
| 20 | 20 | fields=[ |
| 21 | 21 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
| 22 | 22 | ('name', models.CharField(max_length=100, verbose_name='Name')), |
| 23 | + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')), | |
| 23 | 24 | ('created_date', models.DateField(auto_now_add=True, verbose_name='Created Date')), |
| 24 | 25 | ], |
| 25 | 26 | options={ |
| 26 | - 'verbose_name': 'Action', | |
| 27 | 27 | 'verbose_name_plural': 'Actions', |
| 28 | + 'verbose_name': 'Action', | |
| 28 | 29 | }, |
| 29 | 30 | ), |
| 30 | 31 | migrations.CreateModel( |
| ... | ... | @@ -33,8 +34,8 @@ class Migration(migrations.Migration): |
| 33 | 34 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
| 34 | 35 | ], |
| 35 | 36 | options={ |
| 36 | - 'verbose_name': 'Action_Resource', | |
| 37 | 37 | 'verbose_name_plural': 'Action_Resources', |
| 38 | + 'verbose_name': 'Action_Resource', | |
| 38 | 39 | }, |
| 39 | 40 | ), |
| 40 | 41 | migrations.CreateModel( |
| ... | ... | @@ -44,8 +45,8 @@ class Migration(migrations.Migration): |
| 44 | 45 | ('datetime', models.DateTimeField(auto_now_add=True, verbose_name='Date and Time of action')), |
| 45 | 46 | ], |
| 46 | 47 | options={ |
| 47 | - 'verbose_name': 'Log', | |
| 48 | 48 | 'verbose_name_plural': 'Logs', |
| 49 | + 'verbose_name': 'Log', | |
| 49 | 50 | }, |
| 50 | 51 | ), |
| 51 | 52 | migrations.CreateModel( |
| ... | ... | @@ -56,8 +57,8 @@ class Migration(migrations.Migration): |
| 56 | 57 | ('icon', models.CharField(max_length=50, unique=True, verbose_name='Icon')), |
| 57 | 58 | ], |
| 58 | 59 | options={ |
| 59 | - 'verbose_name': 'Amadeus Mime Type', | |
| 60 | 60 | 'verbose_name_plural': 'Amadeus Mime Types', |
| 61 | + 'verbose_name': 'Amadeus Mime Type', | |
| 61 | 62 | }, |
| 62 | 63 | ), |
| 63 | 64 | migrations.CreateModel( |
| ... | ... | @@ -70,8 +71,8 @@ class Migration(migrations.Migration): |
| 70 | 71 | ('action_resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action_Resource', verbose_name='Action_Resource')), |
| 71 | 72 | ], |
| 72 | 73 | options={ |
| 73 | - 'verbose_name': 'Notification', | |
| 74 | 74 | 'verbose_name_plural': 'Notifications', |
| 75 | + 'verbose_name': 'Notification', | |
| 75 | 76 | }, |
| 76 | 77 | ), |
| 77 | 78 | migrations.CreateModel( |
| ... | ... | @@ -84,8 +85,8 @@ class Migration(migrations.Migration): |
| 84 | 85 | ('url', models.CharField(default='', max_length=100, verbose_name='URL')), |
| 85 | 86 | ], |
| 86 | 87 | options={ |
| 87 | - 'verbose_name': 'Resource', | |
| 88 | 88 | 'verbose_name_plural': 'Resources', |
| 89 | + 'verbose_name': 'Resource', | |
| 89 | 90 | }, |
| 90 | 91 | ), |
| 91 | 92 | ] | ... | ... |
core/migrations/0002_auto_20161018_1842.py
| ... | ... | @@ -1,50 +0,0 @@ |
| 1 | -# -*- coding: utf-8 -*- | |
| 2 | -# Generated by Django 1.10 on 2016-10-18 21:42 | |
| 3 | -from __future__ import unicode_literals | |
| 4 | - | |
| 5 | -from django.conf import settings | |
| 6 | -from django.db import migrations, models | |
| 7 | -import django.db.models.deletion | |
| 8 | - | |
| 9 | - | |
| 10 | -class Migration(migrations.Migration): | |
| 11 | - | |
| 12 | - initial = True | |
| 13 | - | |
| 14 | - dependencies = [ | |
| 15 | - migrations.swappable_dependency(settings.AUTH_USER_MODEL), | |
| 16 | - ('core', '0001_initial'), | |
| 17 | - ] | |
| 18 | - | |
| 19 | - operations = [ | |
| 20 | - migrations.AddField( | |
| 21 | - model_name='notification', | |
| 22 | - name='actor', | |
| 23 | - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notification_Performer', to=settings.AUTH_USER_MODEL, verbose_name='Perfomer'), | |
| 24 | - ), | |
| 25 | - migrations.AddField( | |
| 26 | - model_name='notification', | |
| 27 | - name='user', | |
| 28 | - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_Actor', to=settings.AUTH_USER_MODEL, verbose_name='User'), | |
| 29 | - ), | |
| 30 | - migrations.AddField( | |
| 31 | - model_name='log', | |
| 32 | - name='action_resource', | |
| 33 | - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action_Resource', verbose_name='Action_Resource'), | |
| 34 | - ), | |
| 35 | - migrations.AddField( | |
| 36 | - model_name='log', | |
| 37 | - name='user', | |
| 38 | - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Actor'), | |
| 39 | - ), | |
| 40 | - migrations.AddField( | |
| 41 | - model_name='action_resource', | |
| 42 | - name='action', | |
| 43 | - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action', verbose_name='Action_Applied'), | |
| 44 | - ), | |
| 45 | - migrations.AddField( | |
| 46 | - model_name='action_resource', | |
| 47 | - name='resource', | |
| 48 | - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Resource', verbose_name='Resource'), | |
| 49 | - ), | |
| 50 | - ] |
| ... | ... | @@ -0,0 +1,50 @@ |
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | +# Generated by Django 1.10 on 2016-10-24 18:59 | |
| 3 | +from __future__ import unicode_literals | |
| 4 | + | |
| 5 | +from django.conf import settings | |
| 6 | +from django.db import migrations, models | |
| 7 | +import django.db.models.deletion | |
| 8 | + | |
| 9 | + | |
| 10 | +class Migration(migrations.Migration): | |
| 11 | + | |
| 12 | + initial = True | |
| 13 | + | |
| 14 | + dependencies = [ | |
| 15 | + migrations.swappable_dependency(settings.AUTH_USER_MODEL), | |
| 16 | + ('core', '0001_initial'), | |
| 17 | + ] | |
| 18 | + | |
| 19 | + operations = [ | |
| 20 | + migrations.AddField( | |
| 21 | + model_name='notification', | |
| 22 | + name='actor', | |
| 23 | + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notification_Performer', to=settings.AUTH_USER_MODEL, verbose_name='Perfomer'), | |
| 24 | + ), | |
| 25 | + migrations.AddField( | |
| 26 | + model_name='notification', | |
| 27 | + name='user', | |
| 28 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_Actor', to=settings.AUTH_USER_MODEL, verbose_name='User'), | |
| 29 | + ), | |
| 30 | + migrations.AddField( | |
| 31 | + model_name='log', | |
| 32 | + name='action_resource', | |
| 33 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action_Resource', verbose_name='Action_Resource'), | |
| 34 | + ), | |
| 35 | + migrations.AddField( | |
| 36 | + model_name='log', | |
| 37 | + name='user', | |
| 38 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Actor'), | |
| 39 | + ), | |
| 40 | + migrations.AddField( | |
| 41 | + model_name='action_resource', | |
| 42 | + name='action', | |
| 43 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Action', verbose_name='Action_Applied'), | |
| 44 | + ), | |
| 45 | + migrations.AddField( | |
| 46 | + model_name='action_resource', | |
| 47 | + name='resource', | |
| 48 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Resource', verbose_name='Resource'), | |
| 49 | + ), | |
| 50 | + ] | ... | ... |
core/mixins.py
| ... | ... | @@ -41,22 +41,25 @@ class LogMixin(object): |
| 41 | 41 | class NotificationMixin(object): |
| 42 | 42 | message = "" |
| 43 | 43 | read = False |
| 44 | - action_name = '' | |
| 44 | + action_slug = '' | |
| 45 | 45 | resource_name = '' |
| 46 | 46 | |
| 47 | - def createNotification(self, message='', actor=None, users = User.objects.all(), resource_slug='' ,action_name = '', resource_name='', resource_link=''): #the default will be a broadcast | |
| 48 | - action = Action.objects.filter(name = action_name) | |
| 47 | + def createNotification(self, message='', actor=None, users = User.objects.all(), resource_slug='' ,action_slug = '', | |
| 48 | + resource_name='', resource_link=''): #the default will be a broadcast | |
| 49 | + action = Action.objects.filter(slug = action_slug) | |
| 49 | 50 | resource = Resource.objects.filter(slug = resource_slug) |
| 50 | 51 | if action.exists(): |
| 51 | 52 | action = action[0] |
| 52 | 53 | else: |
| 53 | - action = Action(name = self.action_name) | |
| 54 | + action = Action(name = action_slug) | |
| 54 | 55 | action.save() |
| 55 | 56 | |
| 56 | 57 | if resource.exists(): |
| 57 | 58 | resource = resource[0] |
| 59 | + resource.url = resource_link | |
| 60 | + resource.save() | |
| 58 | 61 | else: |
| 59 | - resource = Resource(name = self.resource_name, url= resource_link) | |
| 62 | + resource = Resource(name = resource_name, url= resource_link) | |
| 60 | 63 | resource.save() |
| 61 | 64 | |
| 62 | 65 | action_resource = Action_Resource.objects.filter(action = action, resource = resource) |
| ... | ... | @@ -76,3 +79,9 @@ class NotificationMixin(object): |
| 76 | 79 | """ |
| 77 | 80 | Not quite sure how to do about it""" |
| 78 | 81 | return super(NotificationMixin, self).dispatch(request, *args, **kwargs) |
| 82 | + | |
| 83 | + def createorRetrieveAction(self, action_name): | |
| 84 | + action = Action.objects.filter(name=action_name) | |
| 85 | + if action is None: | |
| 86 | + action = Action(name=action_name) | |
| 87 | + return action | |
| 79 | 88 | \ No newline at end of file | ... | ... |
core/models.py
| ... | ... | @@ -25,6 +25,7 @@ class Action(models.Model): |
| 25 | 25 | """ |
| 26 | 26 | |
| 27 | 27 | name = models.CharField(_('Name'), max_length = 100) |
| 28 | + slug = AutoSlugField(_("Slug"), populate_from=('name'), unique=True) | |
| 28 | 29 | created_date = models.DateField(_('Created Date'), auto_now_add=True) |
| 29 | 30 | |
| 30 | 31 | class Meta: |
| ... | ... | @@ -84,7 +85,7 @@ class Notification(models.Model): |
| 84 | 85 | @action_resource: The Object that holds the information about which action was perfomed on the Resource |
| 85 | 86 | @actor: The user who applied the action |
| 86 | 87 | """ |
| 87 | - | |
| 88 | + | |
| 88 | 89 | message = models.TextField(_('Message')) |
| 89 | 90 | user = models.ForeignKey(User, related_name = _('%(class)s_Actor'), verbose_name= _('User')) |
| 90 | 91 | read = models.BooleanField(_('Read'), default = False) | ... | ... |
core/static/css/base/amadeus.css
| ... | ... | @@ -12,7 +12,11 @@ |
| 12 | 12 | #notification-dropdown{ |
| 13 | 13 | max-height: 500%; |
| 14 | 14 | overflow: auto; |
| 15 | - width: 200px; | |
| 15 | + width: 300px; | |
| 16 | +} | |
| 17 | + | |
| 18 | +.user-notification-img{ | |
| 19 | + width:40%; | |
| 16 | 20 | } |
| 17 | 21 | |
| 18 | 22 | /* HEADER */ |
| ... | ... | @@ -359,4 +363,35 @@ ul, li { |
| 359 | 363 | .block-register-inline{ |
| 360 | 364 | float: left; |
| 361 | 365 | display: inline-block; |
| 366 | +} | |
| 367 | + | |
| 368 | +/* core/reset_password.html classes*/ | |
| 369 | +.send-reset-email{ | |
| 370 | + float: right; | |
| 371 | +} | |
| 372 | + | |
| 373 | +/* forum post loaded */ | |
| 374 | +@-webkit-keyframes loaded { | |
| 375 | + 0% { | |
| 376 | + background-color: Yellow; | |
| 377 | + opacity: 0.2; | |
| 378 | + } | |
| 379 | + 22% { | |
| 380 | + background-color: Yellow; | |
| 381 | + opacity: 0.3; | |
| 382 | + } | |
| 383 | + 77% { | |
| 384 | + background-color: Yellow; | |
| 385 | + opacity: 0.6; | |
| 386 | + } | |
| 387 | + 100% { | |
| 388 | + background-color: White; | |
| 389 | + } | |
| 390 | +} | |
| 391 | + | |
| 392 | +.loaded { | |
| 393 | + -webkit-animation-name: loaded; | |
| 394 | + -webkit-animation-duration: 900ms; | |
| 395 | + -webkit-animation-iteration-count: 3; | |
| 396 | + -webkit-animation-timing-function: ease-in-out; | |
| 362 | 397 | } |
| 363 | 398 | \ No newline at end of file | ... | ... |
core/static/css/vendor/bootstrap-datepicker.standalone.css
0 → 100644
| ... | ... | @@ -0,0 +1,510 @@ |
| 1 | +/*! | |
| 2 | + * Datepicker for Bootstrap v1.7.0-dev (https://github.com/uxsolutions/bootstrap-datepicker) | |
| 3 | + * | |
| 4 | + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) | |
| 5 | + */ | |
| 6 | + | |
| 7 | +.datepicker { | |
| 8 | + padding: 4px; | |
| 9 | + -webkit-border-radius: 4px; | |
| 10 | + -moz-border-radius: 4px; | |
| 11 | + border-radius: 4px; | |
| 12 | + direction: ltr; | |
| 13 | +} | |
| 14 | +.datepicker-inline { | |
| 15 | + width: 220px; | |
| 16 | +} | |
| 17 | +.datepicker.datepicker-rtl { | |
| 18 | + direction: rtl; | |
| 19 | +} | |
| 20 | +.datepicker.datepicker-rtl.dropdown-menu { | |
| 21 | + left: auto; | |
| 22 | +} | |
| 23 | +.datepicker.datepicker-rtl table tr td span { | |
| 24 | + float: right; | |
| 25 | +} | |
| 26 | +.datepicker-dropdown { | |
| 27 | + top: 0; | |
| 28 | + left: 0; | |
| 29 | +} | |
| 30 | +.datepicker-dropdown:before { | |
| 31 | + content: ''; | |
| 32 | + display: inline-block; | |
| 33 | + border-left: 7px solid transparent; | |
| 34 | + border-right: 7px solid transparent; | |
| 35 | + border-bottom: 7px solid #999999; | |
| 36 | + border-top: 0; | |
| 37 | + border-bottom-color: rgba(0, 0, 0, 0.2); | |
| 38 | + position: absolute; | |
| 39 | +} | |
| 40 | +.datepicker-dropdown:after { | |
| 41 | + content: ''; | |
| 42 | + display: inline-block; | |
| 43 | + border-left: 6px solid transparent; | |
| 44 | + border-right: 6px solid transparent; | |
| 45 | + border-bottom: 6px solid #ffffff; | |
| 46 | + border-top: 0; | |
| 47 | + position: absolute; | |
| 48 | +} | |
| 49 | +.datepicker-dropdown.datepicker-orient-left:before { | |
| 50 | + left: 6px; | |
| 51 | +} | |
| 52 | +.datepicker-dropdown.datepicker-orient-left:after { | |
| 53 | + left: 7px; | |
| 54 | +} | |
| 55 | +.datepicker-dropdown.datepicker-orient-right:before { | |
| 56 | + right: 6px; | |
| 57 | +} | |
| 58 | +.datepicker-dropdown.datepicker-orient-right:after { | |
| 59 | + right: 7px; | |
| 60 | +} | |
| 61 | +.datepicker-dropdown.datepicker-orient-bottom:before { | |
| 62 | + top: -7px; | |
| 63 | +} | |
| 64 | +.datepicker-dropdown.datepicker-orient-bottom:after { | |
| 65 | + top: -6px; | |
| 66 | +} | |
| 67 | +.datepicker-dropdown.datepicker-orient-top:before { | |
| 68 | + bottom: -7px; | |
| 69 | + border-bottom: 0; | |
| 70 | + border-top: 7px solid #999999; | |
| 71 | +} | |
| 72 | +.datepicker-dropdown.datepicker-orient-top:after { | |
| 73 | + bottom: -6px; | |
| 74 | + border-bottom: 0; | |
| 75 | + border-top: 6px solid #ffffff; | |
| 76 | +} | |
| 77 | +.datepicker table { | |
| 78 | + margin: 0; | |
| 79 | + -webkit-touch-callout: none; | |
| 80 | + -webkit-user-select: none; | |
| 81 | + -khtml-user-select: none; | |
| 82 | + -moz-user-select: none; | |
| 83 | + -ms-user-select: none; | |
| 84 | + user-select: none; | |
| 85 | +} | |
| 86 | +.datepicker td, | |
| 87 | +.datepicker th { | |
| 88 | + text-align: center; | |
| 89 | + width: 20px; | |
| 90 | + height: 20px; | |
| 91 | + -webkit-border-radius: 4px; | |
| 92 | + -moz-border-radius: 4px; | |
| 93 | + border-radius: 4px; | |
| 94 | + border: none; | |
| 95 | +} | |
| 96 | +.table-striped .datepicker table tr td, | |
| 97 | +.table-striped .datepicker table tr th { | |
| 98 | + background-color: transparent; | |
| 99 | +} | |
| 100 | +.datepicker table tr td.day:hover, | |
| 101 | +.datepicker table tr td.day.focused { | |
| 102 | + background: #eeeeee; | |
| 103 | + cursor: pointer; | |
| 104 | +} | |
| 105 | +.datepicker table tr td.old, | |
| 106 | +.datepicker table tr td.new { | |
| 107 | + color: #999999; | |
| 108 | +} | |
| 109 | +.datepicker table tr td.disabled, | |
| 110 | +.datepicker table tr td.disabled:hover { | |
| 111 | + background: none; | |
| 112 | + color: #999999; | |
| 113 | + cursor: default; | |
| 114 | +} | |
| 115 | +.datepicker table tr td.highlighted { | |
| 116 | + background: #d9edf7; | |
| 117 | + border-radius: 0; | |
| 118 | +} | |
| 119 | +.datepicker table tr td.today, | |
| 120 | +.datepicker table tr td.today:hover, | |
| 121 | +.datepicker table tr td.today.disabled, | |
| 122 | +.datepicker table tr td.today.disabled:hover { | |
| 123 | + background-color: #fde19a; | |
| 124 | + background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a); | |
| 125 | + background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a); | |
| 126 | + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); | |
| 127 | + background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a); | |
| 128 | + background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a); | |
| 129 | + background-image: linear-gradient(to bottom, #fdd49a, #fdf59a); | |
| 130 | + background-repeat: repeat-x; | |
| 131 | + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); | |
| 132 | + border-color: #fdf59a #fdf59a #fbed50; | |
| 133 | + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |
| 134 | + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); | |
| 135 | + color: #000; | |
| 136 | +} | |
| 137 | +.datepicker table tr td.today:hover, | |
| 138 | +.datepicker table tr td.today:hover:hover, | |
| 139 | +.datepicker table tr td.today.disabled:hover, | |
| 140 | +.datepicker table tr td.today.disabled:hover:hover, | |
| 141 | +.datepicker table tr td.today:active, | |
| 142 | +.datepicker table tr td.today:hover:active, | |
| 143 | +.datepicker table tr td.today.disabled:active, | |
| 144 | +.datepicker table tr td.today.disabled:hover:active, | |
| 145 | +.datepicker table tr td.today.active, | |
| 146 | +.datepicker table tr td.today:hover.active, | |
| 147 | +.datepicker table tr td.today.disabled.active, | |
| 148 | +.datepicker table tr td.today.disabled:hover.active, | |
| 149 | +.datepicker table tr td.today.disabled, | |
| 150 | +.datepicker table tr td.today:hover.disabled, | |
| 151 | +.datepicker table tr td.today.disabled.disabled, | |
| 152 | +.datepicker table tr td.today.disabled:hover.disabled, | |
| 153 | +.datepicker table tr td.today[disabled], | |
| 154 | +.datepicker table tr td.today:hover[disabled], | |
| 155 | +.datepicker table tr td.today.disabled[disabled], | |
| 156 | +.datepicker table tr td.today.disabled:hover[disabled] { | |
| 157 | + background-color: #fdf59a; | |
| 158 | +} | |
| 159 | +.datepicker table tr td.today:active, | |
| 160 | +.datepicker table tr td.today:hover:active, | |
| 161 | +.datepicker table tr td.today.disabled:active, | |
| 162 | +.datepicker table tr td.today.disabled:hover:active, | |
| 163 | +.datepicker table tr td.today.active, | |
| 164 | +.datepicker table tr td.today:hover.active, | |
| 165 | +.datepicker table tr td.today.disabled.active, | |
| 166 | +.datepicker table tr td.today.disabled:hover.active { | |
| 167 | + background-color: #fbf069 \9; | |
| 168 | +} | |
| 169 | +.datepicker table tr td.today:hover:hover { | |
| 170 | + color: #000; | |
| 171 | +} | |
| 172 | +.datepicker table tr td.today.active:hover { | |
| 173 | + color: #fff; | |
| 174 | +} | |
| 175 | +.datepicker table tr td.range, | |
| 176 | +.datepicker table tr td.range:hover, | |
| 177 | +.datepicker table tr td.range.disabled, | |
| 178 | +.datepicker table tr td.range.disabled:hover { | |
| 179 | + background: #eeeeee; | |
| 180 | + -webkit-border-radius: 0; | |
| 181 | + -moz-border-radius: 0; | |
| 182 | + border-radius: 0; | |
| 183 | +} | |
| 184 | +.datepicker table tr td.range.today, | |
| 185 | +.datepicker table tr td.range.today:hover, | |
| 186 | +.datepicker table tr td.range.today.disabled, | |
| 187 | +.datepicker table tr td.range.today.disabled:hover { | |
| 188 | + background-color: #f3d17a; | |
| 189 | + background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a); | |
| 190 | + background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a); | |
| 191 | + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a)); | |
| 192 | + background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a); | |
| 193 | + background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a); | |
| 194 | + background-image: linear-gradient(to bottom, #f3c17a, #f3e97a); | |
| 195 | + background-repeat: repeat-x; | |
| 196 | + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0); | |
| 197 | + border-color: #f3e97a #f3e97a #edde34; | |
| 198 | + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |
| 199 | + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); | |
| 200 | + -webkit-border-radius: 0; | |
| 201 | + -moz-border-radius: 0; | |
| 202 | + border-radius: 0; | |
| 203 | +} | |
| 204 | +.datepicker table tr td.range.today:hover, | |
| 205 | +.datepicker table tr td.range.today:hover:hover, | |
| 206 | +.datepicker table tr td.range.today.disabled:hover, | |
| 207 | +.datepicker table tr td.range.today.disabled:hover:hover, | |
| 208 | +.datepicker table tr td.range.today:active, | |
| 209 | +.datepicker table tr td.range.today:hover:active, | |
| 210 | +.datepicker table tr td.range.today.disabled:active, | |
| 211 | +.datepicker table tr td.range.today.disabled:hover:active, | |
| 212 | +.datepicker table tr td.range.today.active, | |
| 213 | +.datepicker table tr td.range.today:hover.active, | |
| 214 | +.datepicker table tr td.range.today.disabled.active, | |
| 215 | +.datepicker table tr td.range.today.disabled:hover.active, | |
| 216 | +.datepicker table tr td.range.today.disabled, | |
| 217 | +.datepicker table tr td.range.today:hover.disabled, | |
| 218 | +.datepicker table tr td.range.today.disabled.disabled, | |
| 219 | +.datepicker table tr td.range.today.disabled:hover.disabled, | |
| 220 | +.datepicker table tr td.range.today[disabled], | |
| 221 | +.datepicker table tr td.range.today:hover[disabled], | |
| 222 | +.datepicker table tr td.range.today.disabled[disabled], | |
| 223 | +.datepicker table tr td.range.today.disabled:hover[disabled] { | |
| 224 | + background-color: #f3e97a; | |
| 225 | +} | |
| 226 | +.datepicker table tr td.range.today:active, | |
| 227 | +.datepicker table tr td.range.today:hover:active, | |
| 228 | +.datepicker table tr td.range.today.disabled:active, | |
| 229 | +.datepicker table tr td.range.today.disabled:hover:active, | |
| 230 | +.datepicker table tr td.range.today.active, | |
| 231 | +.datepicker table tr td.range.today:hover.active, | |
| 232 | +.datepicker table tr td.range.today.disabled.active, | |
| 233 | +.datepicker table tr td.range.today.disabled:hover.active { | |
| 234 | + background-color: #efe24b \9; | |
| 235 | +} | |
| 236 | +.datepicker table tr td.selected, | |
| 237 | +.datepicker table tr td.selected:hover, | |
| 238 | +.datepicker table tr td.selected.disabled, | |
| 239 | +.datepicker table tr td.selected.disabled:hover { | |
| 240 | + background-color: #9e9e9e; | |
| 241 | + background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080); | |
| 242 | + background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080); | |
| 243 | + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080)); | |
| 244 | + background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080); | |
| 245 | + background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080); | |
| 246 | + background-image: linear-gradient(to bottom, #b3b3b3, #808080); | |
| 247 | + background-repeat: repeat-x; | |
| 248 | + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0); | |
| 249 | + border-color: #808080 #808080 #595959; | |
| 250 | + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |
| 251 | + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); | |
| 252 | + color: #fff; | |
| 253 | + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | |
| 254 | +} | |
| 255 | +.datepicker table tr td.selected:hover, | |
| 256 | +.datepicker table tr td.selected:hover:hover, | |
| 257 | +.datepicker table tr td.selected.disabled:hover, | |
| 258 | +.datepicker table tr td.selected.disabled:hover:hover, | |
| 259 | +.datepicker table tr td.selected:active, | |
| 260 | +.datepicker table tr td.selected:hover:active, | |
| 261 | +.datepicker table tr td.selected.disabled:active, | |
| 262 | +.datepicker table tr td.selected.disabled:hover:active, | |
| 263 | +.datepicker table tr td.selected.active, | |
| 264 | +.datepicker table tr td.selected:hover.active, | |
| 265 | +.datepicker table tr td.selected.disabled.active, | |
| 266 | +.datepicker table tr td.selected.disabled:hover.active, | |
| 267 | +.datepicker table tr td.selected.disabled, | |
| 268 | +.datepicker table tr td.selected:hover.disabled, | |
| 269 | +.datepicker table tr td.selected.disabled.disabled, | |
| 270 | +.datepicker table tr td.selected.disabled:hover.disabled, | |
| 271 | +.datepicker table tr td.selected[disabled], | |
| 272 | +.datepicker table tr td.selected:hover[disabled], | |
| 273 | +.datepicker table tr td.selected.disabled[disabled], | |
| 274 | +.datepicker table tr td.selected.disabled:hover[disabled] { | |
| 275 | + background-color: #808080; | |
| 276 | +} | |
| 277 | +.datepicker table tr td.selected:active, | |
| 278 | +.datepicker table tr td.selected:hover:active, | |
| 279 | +.datepicker table tr td.selected.disabled:active, | |
| 280 | +.datepicker table tr td.selected.disabled:hover:active, | |
| 281 | +.datepicker table tr td.selected.active, | |
| 282 | +.datepicker table tr td.selected:hover.active, | |
| 283 | +.datepicker table tr td.selected.disabled.active, | |
| 284 | +.datepicker table tr td.selected.disabled:hover.active { | |
| 285 | + background-color: #666666 \9; | |
| 286 | +} | |
| 287 | +.datepicker table tr td.active, | |
| 288 | +.datepicker table tr td.active:hover, | |
| 289 | +.datepicker table tr td.active.disabled, | |
| 290 | +.datepicker table tr td.active.disabled:hover { | |
| 291 | + background-color: #006dcc; | |
| 292 | + background-image: -moz-linear-gradient(to bottom, #0088cc, #0044cc); | |
| 293 | + background-image: -ms-linear-gradient(to bottom, #0088cc, #0044cc); | |
| 294 | + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); | |
| 295 | + background-image: -webkit-linear-gradient(to bottom, #0088cc, #0044cc); | |
| 296 | + background-image: -o-linear-gradient(to bottom, #0088cc, #0044cc); | |
| 297 | + background-image: linear-gradient(to bottom, #0088cc, #0044cc); | |
| 298 | + background-repeat: repeat-x; | |
| 299 | + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); | |
| 300 | + border-color: #0044cc #0044cc #002a80; | |
| 301 | + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |
| 302 | + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); | |
| 303 | + color: #fff; | |
| 304 | + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | |
| 305 | +} | |
| 306 | +.datepicker table tr td.active:hover, | |
| 307 | +.datepicker table tr td.active:hover:hover, | |
| 308 | +.datepicker table tr td.active.disabled:hover, | |
| 309 | +.datepicker table tr td.active.disabled:hover:hover, | |
| 310 | +.datepicker table tr td.active:active, | |
| 311 | +.datepicker table tr td.active:hover:active, | |
| 312 | +.datepicker table tr td.active.disabled:active, | |
| 313 | +.datepicker table tr td.active.disabled:hover:active, | |
| 314 | +.datepicker table tr td.active.active, | |
| 315 | +.datepicker table tr td.active:hover.active, | |
| 316 | +.datepicker table tr td.active.disabled.active, | |
| 317 | +.datepicker table tr td.active.disabled:hover.active, | |
| 318 | +.datepicker table tr td.active.disabled, | |
| 319 | +.datepicker table tr td.active:hover.disabled, | |
| 320 | +.datepicker table tr td.active.disabled.disabled, | |
| 321 | +.datepicker table tr td.active.disabled:hover.disabled, | |
| 322 | +.datepicker table tr td.active[disabled], | |
| 323 | +.datepicker table tr td.active:hover[disabled], | |
| 324 | +.datepicker table tr td.active.disabled[disabled], | |
| 325 | +.datepicker table tr td.active.disabled:hover[disabled] { | |
| 326 | + background-color: #0044cc; | |
| 327 | +} | |
| 328 | +.datepicker table tr td.active:active, | |
| 329 | +.datepicker table tr td.active:hover:active, | |
| 330 | +.datepicker table tr td.active.disabled:active, | |
| 331 | +.datepicker table tr td.active.disabled:hover:active, | |
| 332 | +.datepicker table tr td.active.active, | |
| 333 | +.datepicker table tr td.active:hover.active, | |
| 334 | +.datepicker table tr td.active.disabled.active, | |
| 335 | +.datepicker table tr td.active.disabled:hover.active { | |
| 336 | + background-color: #003399 \9; | |
| 337 | +} | |
| 338 | +.datepicker table tr td span { | |
| 339 | + display: block; | |
| 340 | + width: 23%; | |
| 341 | + height: 54px; | |
| 342 | + line-height: 54px; | |
| 343 | + float: left; | |
| 344 | + margin: 1%; | |
| 345 | + cursor: pointer; | |
| 346 | + -webkit-border-radius: 4px; | |
| 347 | + -moz-border-radius: 4px; | |
| 348 | + border-radius: 4px; | |
| 349 | +} | |
| 350 | +.datepicker table tr td span:hover, | |
| 351 | +.datepicker table tr td span.focused { | |
| 352 | + background: #eeeeee; | |
| 353 | +} | |
| 354 | +.datepicker table tr td span.disabled, | |
| 355 | +.datepicker table tr td span.disabled:hover { | |
| 356 | + background: none; | |
| 357 | + color: #999999; | |
| 358 | + cursor: default; | |
| 359 | +} | |
| 360 | +.datepicker table tr td span.active, | |
| 361 | +.datepicker table tr td span.active:hover, | |
| 362 | +.datepicker table tr td span.active.disabled, | |
| 363 | +.datepicker table tr td span.active.disabled:hover { | |
| 364 | + background-color: #006dcc; | |
| 365 | + background-image: -moz-linear-gradient(to bottom, #0088cc, #0044cc); | |
| 366 | + background-image: -ms-linear-gradient(to bottom, #0088cc, #0044cc); | |
| 367 | + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); | |
| 368 | + background-image: -webkit-linear-gradient(to bottom, #0088cc, #0044cc); | |
| 369 | + background-image: -o-linear-gradient(to bottom, #0088cc, #0044cc); | |
| 370 | + background-image: linear-gradient(to bottom, #0088cc, #0044cc); | |
| 371 | + background-repeat: repeat-x; | |
| 372 | + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); | |
| 373 | + border-color: #0044cc #0044cc #002a80; | |
| 374 | + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |
| 375 | + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); | |
| 376 | + color: #fff; | |
| 377 | + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | |
| 378 | +} | |
| 379 | +.datepicker table tr td span.active:hover, | |
| 380 | +.datepicker table tr td span.active:hover:hover, | |
| 381 | +.datepicker table tr td span.active.disabled:hover, | |
| 382 | +.datepicker table tr td span.active.disabled:hover:hover, | |
| 383 | +.datepicker table tr td span.active:active, | |
| 384 | +.datepicker table tr td span.active:hover:active, | |
| 385 | +.datepicker table tr td span.active.disabled:active, | |
| 386 | +.datepicker table tr td span.active.disabled:hover:active, | |
| 387 | +.datepicker table tr td span.active.active, | |
| 388 | +.datepicker table tr td span.active:hover.active, | |
| 389 | +.datepicker table tr td span.active.disabled.active, | |
| 390 | +.datepicker table tr td span.active.disabled:hover.active, | |
| 391 | +.datepicker table tr td span.active.disabled, | |
| 392 | +.datepicker table tr td span.active:hover.disabled, | |
| 393 | +.datepicker table tr td span.active.disabled.disabled, | |
| 394 | +.datepicker table tr td span.active.disabled:hover.disabled, | |
| 395 | +.datepicker table tr td span.active[disabled], | |
| 396 | +.datepicker table tr td span.active:hover[disabled], | |
| 397 | +.datepicker table tr td span.active.disabled[disabled], | |
| 398 | +.datepicker table tr td span.active.disabled:hover[disabled] { | |
| 399 | + background-color: #0044cc; | |
| 400 | +} | |
| 401 | +.datepicker table tr td span.active:active, | |
| 402 | +.datepicker table tr td span.active:hover:active, | |
| 403 | +.datepicker table tr td span.active.disabled:active, | |
| 404 | +.datepicker table tr td span.active.disabled:hover:active, | |
| 405 | +.datepicker table tr td span.active.active, | |
| 406 | +.datepicker table tr td span.active:hover.active, | |
| 407 | +.datepicker table tr td span.active.disabled.active, | |
| 408 | +.datepicker table tr td span.active.disabled:hover.active { | |
| 409 | + background-color: #003399 \9; | |
| 410 | +} | |
| 411 | +.datepicker table tr td span.old, | |
| 412 | +.datepicker table tr td span.new { | |
| 413 | + color: #999999; | |
| 414 | +} | |
| 415 | +.datepicker .datepicker-switch { | |
| 416 | + width: 145px; | |
| 417 | +} | |
| 418 | +.datepicker .datepicker-switch, | |
| 419 | +.datepicker .prev, | |
| 420 | +.datepicker .next, | |
| 421 | +.datepicker tfoot tr th { | |
| 422 | + cursor: pointer; | |
| 423 | +} | |
| 424 | +.datepicker .datepicker-switch:hover, | |
| 425 | +.datepicker .prev:hover, | |
| 426 | +.datepicker .next:hover, | |
| 427 | +.datepicker tfoot tr th:hover { | |
| 428 | + background: #eeeeee; | |
| 429 | +} | |
| 430 | +.datepicker .prev.disabled, | |
| 431 | +.datepicker .next.disabled { | |
| 432 | + visibility: hidden; | |
| 433 | +} | |
| 434 | +.datepicker .cw { | |
| 435 | + font-size: 10px; | |
| 436 | + width: 12px; | |
| 437 | + padding: 0 2px 0 5px; | |
| 438 | + vertical-align: middle; | |
| 439 | +} | |
| 440 | +.input-append.date .add-on, | |
| 441 | +.input-prepend.date .add-on { | |
| 442 | + cursor: pointer; | |
| 443 | +} | |
| 444 | +.input-append.date .add-on i, | |
| 445 | +.input-prepend.date .add-on i { | |
| 446 | + margin-top: 3px; | |
| 447 | +} | |
| 448 | +.input-daterange input { | |
| 449 | + text-align: center; | |
| 450 | +} | |
| 451 | +.input-daterange input:first-child { | |
| 452 | + -webkit-border-radius: 3px 0 0 3px; | |
| 453 | + -moz-border-radius: 3px 0 0 3px; | |
| 454 | + border-radius: 3px 0 0 3px; | |
| 455 | +} | |
| 456 | +.input-daterange input:last-child { | |
| 457 | + -webkit-border-radius: 0 3px 3px 0; | |
| 458 | + -moz-border-radius: 0 3px 3px 0; | |
| 459 | + border-radius: 0 3px 3px 0; | |
| 460 | +} | |
| 461 | +.input-daterange .add-on { | |
| 462 | + display: inline-block; | |
| 463 | + width: auto; | |
| 464 | + min-width: 16px; | |
| 465 | + height: 20px; | |
| 466 | + padding: 4px 5px; | |
| 467 | + font-weight: normal; | |
| 468 | + line-height: 20px; | |
| 469 | + text-align: center; | |
| 470 | + text-shadow: 0 1px 0 #ffffff; | |
| 471 | + vertical-align: middle; | |
| 472 | + background-color: #eeeeee; | |
| 473 | + border: 1px solid #ccc; | |
| 474 | + margin-left: -5px; | |
| 475 | + margin-right: -5px; | |
| 476 | +} | |
| 477 | +.datepicker.dropdown-menu { | |
| 478 | + position: absolute; | |
| 479 | + top: 100%; | |
| 480 | + left: 0; | |
| 481 | + z-index: 1000; | |
| 482 | + float: left; | |
| 483 | + display: none; | |
| 484 | + min-width: 160px; | |
| 485 | + list-style: none; | |
| 486 | + background-color: #ffffff; | |
| 487 | + border: 1px solid #ccc; | |
| 488 | + border: 1px solid rgba(0, 0, 0, 0.2); | |
| 489 | + -webkit-border-radius: 5px; | |
| 490 | + -moz-border-radius: 5px; | |
| 491 | + border-radius: 5px; | |
| 492 | + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); | |
| 493 | + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); | |
| 494 | + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); | |
| 495 | + -webkit-background-clip: padding-box; | |
| 496 | + -moz-background-clip: padding; | |
| 497 | + background-clip: padding-box; | |
| 498 | + *border-right-width: 2px; | |
| 499 | + *border-bottom-width: 2px; | |
| 500 | + color: #333333; | |
| 501 | + font-size: 13px; | |
| 502 | + line-height: 20px; | |
| 503 | +} | |
| 504 | +.datepicker.dropdown-menu th, | |
| 505 | +.datepicker.datepicker-inline th, | |
| 506 | +.datepicker.dropdown-menu td, | |
| 507 | +.datepicker.datepicker-inline td { | |
| 508 | + padding: 4px 5px; | |
| 509 | +} | |
| 510 | +/*# sourceMappingURL=bootstrap-datepicker.standalone.css.map */ | |
| 0 | 511 | \ No newline at end of file | ... | ... |
core/static/css/vendor/datepicker.css
| ... | ... | @@ -1,182 +0,0 @@ |
| 1 | -/*! | |
| 2 | - * Datepicker for Bootstrap | |
| 3 | - * | |
| 4 | - * Copyright 2012 Stefan Petre | |
| 5 | - * Licensed under the Apache License v2.0 | |
| 6 | - * http://www.apache.org/licenses/LICENSE-2.0 | |
| 7 | - * | |
| 8 | - */ | |
| 9 | -.datepicker { | |
| 10 | - top: 0; | |
| 11 | - left: 0; | |
| 12 | - padding: 4px; | |
| 13 | - margin-top: 1px; | |
| 14 | - -webkit-border-radius: 4px; | |
| 15 | - -moz-border-radius: 4px; | |
| 16 | - border-radius: 4px; | |
| 17 | - /*.dow { | |
| 18 | - border-top: 1px solid #ddd !important; | |
| 19 | - }*/ | |
| 20 | - | |
| 21 | -} | |
| 22 | -.datepicker:before { | |
| 23 | - content: ''; | |
| 24 | - display: inline-block; | |
| 25 | - border-left: 7px solid transparent; | |
| 26 | - border-right: 7px solid transparent; | |
| 27 | - border-bottom: 7px solid #ccc; | |
| 28 | - border-bottom-color: rgba(0, 0, 0, 0.2); | |
| 29 | - position: absolute; | |
| 30 | - top: -7px; | |
| 31 | - left: 6px; | |
| 32 | -} | |
| 33 | -.datepicker:after { | |
| 34 | - content: ''; | |
| 35 | - display: inline-block; | |
| 36 | - border-left: 6px solid transparent; | |
| 37 | - border-right: 6px solid transparent; | |
| 38 | - border-bottom: 6px solid #ffffff; | |
| 39 | - position: absolute; | |
| 40 | - top: -6px; | |
| 41 | - left: 7px; | |
| 42 | -} | |
| 43 | -.datepicker > div { | |
| 44 | - display: none; | |
| 45 | -} | |
| 46 | -.datepicker table { | |
| 47 | - width: 100%; | |
| 48 | - margin: 0; | |
| 49 | -} | |
| 50 | -.datepicker td, | |
| 51 | -.datepicker th { | |
| 52 | - text-align: center; | |
| 53 | - width: 20px; | |
| 54 | - height: 20px; | |
| 55 | - -webkit-border-radius: 4px; | |
| 56 | - -moz-border-radius: 4px; | |
| 57 | - border-radius: 4px; | |
| 58 | -} | |
| 59 | -.datepicker td.day:hover { | |
| 60 | - background: #eeeeee; | |
| 61 | - cursor: pointer; | |
| 62 | -} | |
| 63 | -.datepicker td.day.disabled { | |
| 64 | - color: #eeeeee; | |
| 65 | -} | |
| 66 | -.datepicker td.old, | |
| 67 | -.datepicker td.new { | |
| 68 | - color: #999999; | |
| 69 | -} | |
| 70 | -.datepicker td.active, | |
| 71 | -.datepicker td.active:hover { | |
| 72 | - color: #ffffff; | |
| 73 | - background-color: #006dcc; | |
| 74 | - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); | |
| 75 | - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); | |
| 76 | - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); | |
| 77 | - background-image: -o-linear-gradient(top, #0088cc, #0044cc); | |
| 78 | - background-image: linear-gradient(to bottom, #0088cc, #0044cc); | |
| 79 | - background-repeat: repeat-x; | |
| 80 | - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); | |
| 81 | - border-color: #0044cc #0044cc #002a80; | |
| 82 | - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |
| 83 | - *background-color: #0044cc; | |
| 84 | - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ | |
| 85 | - | |
| 86 | - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); | |
| 87 | - color: #fff; | |
| 88 | - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | |
| 89 | -} | |
| 90 | -.datepicker td.active:hover, | |
| 91 | -.datepicker td.active:hover:hover, | |
| 92 | -.datepicker td.active:focus, | |
| 93 | -.datepicker td.active:hover:focus, | |
| 94 | -.datepicker td.active:active, | |
| 95 | -.datepicker td.active:hover:active, | |
| 96 | -.datepicker td.active.active, | |
| 97 | -.datepicker td.active:hover.active, | |
| 98 | -.datepicker td.active.disabled, | |
| 99 | -.datepicker td.active:hover.disabled, | |
| 100 | -.datepicker td.active[disabled], | |
| 101 | -.datepicker td.active:hover[disabled] { | |
| 102 | - color: #ffffff; | |
| 103 | - background-color: #0044cc; | |
| 104 | - *background-color: #003bb3; | |
| 105 | -} | |
| 106 | -.datepicker td.active:active, | |
| 107 | -.datepicker td.active:hover:active, | |
| 108 | -.datepicker td.active.active, | |
| 109 | -.datepicker td.active:hover.active { | |
| 110 | - background-color: #003399 \9; | |
| 111 | -} | |
| 112 | -.datepicker td span { | |
| 113 | - display: block; | |
| 114 | - width: 47px; | |
| 115 | - height: 54px; | |
| 116 | - line-height: 54px; | |
| 117 | - float: left; | |
| 118 | - margin: 2px; | |
| 119 | - cursor: pointer; | |
| 120 | - -webkit-border-radius: 4px; | |
| 121 | - -moz-border-radius: 4px; | |
| 122 | - border-radius: 4px; | |
| 123 | -} | |
| 124 | -.datepicker td span:hover { | |
| 125 | - background: #eeeeee; | |
| 126 | -} | |
| 127 | -.datepicker td span.active { | |
| 128 | - color: #ffffff; | |
| 129 | - background-color: #006dcc; | |
| 130 | - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); | |
| 131 | - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); | |
| 132 | - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); | |
| 133 | - background-image: -o-linear-gradient(top, #0088cc, #0044cc); | |
| 134 | - background-image: linear-gradient(to bottom, #0088cc, #0044cc); | |
| 135 | - background-repeat: repeat-x; | |
| 136 | - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); | |
| 137 | - border-color: #0044cc #0044cc #002a80; | |
| 138 | - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |
| 139 | - *background-color: #0044cc; | |
| 140 | - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ | |
| 141 | - | |
| 142 | - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); | |
| 143 | - color: #fff; | |
| 144 | - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | |
| 145 | -} | |
| 146 | -.datepicker td span.active:hover, | |
| 147 | -.datepicker td span.active:focus, | |
| 148 | -.datepicker td span.active:active, | |
| 149 | -.datepicker td span.active.active, | |
| 150 | -.datepicker td span.active.disabled, | |
| 151 | -.datepicker td span.active[disabled] { | |
| 152 | - color: #ffffff; | |
| 153 | - background-color: #0044cc; | |
| 154 | - *background-color: #003bb3; | |
| 155 | -} | |
| 156 | -.datepicker td span.active:active, | |
| 157 | -.datepicker td span.active.active { | |
| 158 | - background-color: #003399 \9; | |
| 159 | -} | |
| 160 | -.datepicker td span.old { | |
| 161 | - color: #999999; | |
| 162 | -} | |
| 163 | -.datepicker th.switch { | |
| 164 | - width: 145px; | |
| 165 | -} | |
| 166 | -.datepicker th.next, | |
| 167 | -.datepicker th.prev { | |
| 168 | - font-size: 21px; | |
| 169 | -} | |
| 170 | -.datepicker thead tr:first-child th { | |
| 171 | - cursor: pointer; | |
| 172 | -} | |
| 173 | -.datepicker thead tr:first-child th:hover { | |
| 174 | - background: #eeeeee; | |
| 175 | -} | |
| 176 | -.input-append.date .add-on i, | |
| 177 | -.input-prepend.date .add-on i { | |
| 178 | - display: block; | |
| 179 | - cursor: pointer; | |
| 180 | - width: 16px; | |
| 181 | - height: 16px; | |
| 182 | -} | |
| 183 | 0 | \ No newline at end of file |
core/static/js/main.js
core/static/js/vendor/bootstrap-datepicker.js
| 1 | 1 | /* ========================================================= |
| 2 | - * bootstrap-datepicker.js | |
| 3 | - * http://www.eyecon.ro/bootstrap-datepicker | |
| 2 | + * bootstrap-datepicker.js | |
| 3 | + * Repo: https://github.com/uxsolutions/bootstrap-datepicker/ | |
| 4 | + * Demo: https://eternicode.github.io/bootstrap-datepicker/ | |
| 5 | + * Docs: https://bootstrap-datepicker.readthedocs.org/ | |
| 4 | 6 | * ========================================================= |
| 5 | - * Copyright 2012 Stefan Petre | |
| 6 | - * | |
| 7 | 7 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | 8 | * you may not use this file except in compliance with the License. |
| 9 | 9 | * You may obtain a copy of the License at |
| ... | ... | @@ -16,459 +16,2021 @@ |
| 16 | 16 | * See the License for the specific language governing permissions and |
| 17 | 17 | * limitations under the License. |
| 18 | 18 | * ========================================================= */ |
| 19 | - | |
| 20 | -!function( $ ) { | |
| 21 | - | |
| 19 | + | |
| 20 | +(function(factory){ | |
| 21 | + if (typeof define === "function" && define.amd) { | |
| 22 | + define(["jquery"], factory); | |
| 23 | + } else if (typeof exports === 'object') { | |
| 24 | + factory(require('jquery')); | |
| 25 | + } else { | |
| 26 | + factory(jQuery); | |
| 27 | + } | |
| 28 | +}(function($, undefined){ | |
| 29 | + | |
| 30 | + function UTCDate(){ | |
| 31 | + return new Date(Date.UTC.apply(Date, arguments)); | |
| 32 | + } | |
| 33 | + function UTCToday(){ | |
| 34 | + var today = new Date(); | |
| 35 | + return UTCDate(today.getFullYear(), today.getMonth(), today.getDate()); | |
| 36 | + } | |
| 37 | + function isUTCEquals(date1, date2) { | |
| 38 | + return ( | |
| 39 | + date1.getUTCFullYear() === date2.getUTCFullYear() && | |
| 40 | + date1.getUTCMonth() === date2.getUTCMonth() && | |
| 41 | + date1.getUTCDate() === date2.getUTCDate() | |
| 42 | + ); | |
| 43 | + } | |
| 44 | + function alias(method){ | |
| 45 | + return function(){ | |
| 46 | + return this[method].apply(this, arguments); | |
| 47 | + }; | |
| 48 | + } | |
| 49 | + function isValidDate(d) { | |
| 50 | + return d && !isNaN(d.getTime()); | |
| 51 | + } | |
| 52 | + | |
| 53 | + var DateArray = (function(){ | |
| 54 | + var extras = { | |
| 55 | + get: function(i){ | |
| 56 | + return this.slice(i)[0]; | |
| 57 | + }, | |
| 58 | + contains: function(d){ | |
| 59 | + // Array.indexOf is not cross-browser; | |
| 60 | + // $.inArray doesn't work with Dates | |
| 61 | + var val = d && d.valueOf(); | |
| 62 | + for (var i=0, l=this.length; i < l; i++) | |
| 63 | + // Use date arithmetic to allow dates with different times to match | |
| 64 | + if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24) | |
| 65 | + return i; | |
| 66 | + return -1; | |
| 67 | + }, | |
| 68 | + remove: function(i){ | |
| 69 | + this.splice(i,1); | |
| 70 | + }, | |
| 71 | + replace: function(new_array){ | |
| 72 | + if (!new_array) | |
| 73 | + return; | |
| 74 | + if (!$.isArray(new_array)) | |
| 75 | + new_array = [new_array]; | |
| 76 | + this.clear(); | |
| 77 | + this.push.apply(this, new_array); | |
| 78 | + }, | |
| 79 | + clear: function(){ | |
| 80 | + this.length = 0; | |
| 81 | + }, | |
| 82 | + copy: function(){ | |
| 83 | + var a = new DateArray(); | |
| 84 | + a.replace(this); | |
| 85 | + return a; | |
| 86 | + } | |
| 87 | + }; | |
| 88 | + | |
| 89 | + return function(){ | |
| 90 | + var a = []; | |
| 91 | + a.push.apply(a, arguments); | |
| 92 | + $.extend(a, extras); | |
| 93 | + return a; | |
| 94 | + }; | |
| 95 | + })(); | |
| 96 | + | |
| 97 | + | |
| 22 | 98 | // Picker object |
| 23 | - | |
| 99 | + | |
| 24 | 100 | var Datepicker = function(element, options){ |
| 101 | + $.data(element, 'datepicker', this); | |
| 102 | + this._process_options(options); | |
| 103 | + | |
| 104 | + this.dates = new DateArray(); | |
| 105 | + this.viewDate = this.o.defaultViewDate; | |
| 106 | + this.focusDate = null; | |
| 107 | + | |
| 25 | 108 | this.element = $(element); |
| 26 | - this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy'); | |
| 27 | - this.picker = $(DPGlobal.template) | |
| 28 | - .appendTo('body') | |
| 29 | - .on({ | |
| 30 | - click: $.proxy(this.click, this)//, | |
| 31 | - //mousedown: $.proxy(this.mousedown, this) | |
| 32 | - }); | |
| 33 | 109 | this.isInput = this.element.is('input'); |
| 34 | - this.component = this.element.is('.date') ? this.element.find('.add-on') : false; | |
| 35 | - | |
| 36 | - if (this.isInput) { | |
| 37 | - this.element.on({ | |
| 38 | - focus: $.proxy(this.show, this), | |
| 39 | - //blur: $.proxy(this.hide, this), | |
| 40 | - keyup: $.proxy(this.update, this) | |
| 41 | - }); | |
| 42 | - } else { | |
| 43 | - if (this.component){ | |
| 44 | - this.component.on('click', $.proxy(this.show, this)); | |
| 45 | - } else { | |
| 46 | - this.element.on('click', $.proxy(this.show, this)); | |
| 47 | - } | |
| 110 | + this.inputField = this.isInput ? this.element : this.element.find('input'); | |
| 111 | + this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false; | |
| 112 | + if (this.component && this.component.length === 0) | |
| 113 | + this.component = false; | |
| 114 | + this.isInline = !this.component && this.element.is('div'); | |
| 115 | + | |
| 116 | + this.picker = $(DPGlobal.template); | |
| 117 | + | |
| 118 | + // Checking templates and inserting | |
| 119 | + if (this._check_template(this.o.templates.leftArrow)) { | |
| 120 | + this.picker.find('.prev').html(this.o.templates.leftArrow); | |
| 48 | 121 | } |
| 49 | - | |
| 50 | - this.minViewMode = options.minViewMode||this.element.data('date-minviewmode')||0; | |
| 51 | - if (typeof this.minViewMode === 'string') { | |
| 52 | - switch (this.minViewMode) { | |
| 53 | - case 'months': | |
| 54 | - this.minViewMode = 1; | |
| 55 | - break; | |
| 56 | - case 'years': | |
| 57 | - this.minViewMode = 2; | |
| 58 | - break; | |
| 59 | - default: | |
| 60 | - this.minViewMode = 0; | |
| 61 | - break; | |
| 62 | - } | |
| 122 | + | |
| 123 | + if (this._check_template(this.o.templates.rightArrow)) { | |
| 124 | + this.picker.find('.next').html(this.o.templates.rightArrow); | |
| 63 | 125 | } |
| 64 | - this.viewMode = options.viewMode||this.element.data('date-viewmode')||0; | |
| 65 | - if (typeof this.viewMode === 'string') { | |
| 66 | - switch (this.viewMode) { | |
| 67 | - case 'months': | |
| 68 | - this.viewMode = 1; | |
| 69 | - break; | |
| 70 | - case 'years': | |
| 71 | - this.viewMode = 2; | |
| 72 | - break; | |
| 73 | - default: | |
| 74 | - this.viewMode = 0; | |
| 75 | - break; | |
| 76 | - } | |
| 126 | + | |
| 127 | + this._buildEvents(); | |
| 128 | + this._attachEvents(); | |
| 129 | + | |
| 130 | + if (this.isInline){ | |
| 131 | + this.picker.addClass('datepicker-inline').appendTo(this.element); | |
| 132 | + } | |
| 133 | + else { | |
| 134 | + this.picker.addClass('datepicker-dropdown dropdown-menu'); | |
| 135 | + } | |
| 136 | + | |
| 137 | + if (this.o.rtl){ | |
| 138 | + this.picker.addClass('datepicker-rtl'); | |
| 139 | + } | |
| 140 | + | |
| 141 | + if (this.o.calendarWeeks) { | |
| 142 | + this.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear') | |
| 143 | + .attr('colspan', function(i, val){ | |
| 144 | + return Number(val) + 1; | |
| 145 | + }); | |
| 77 | 146 | } |
| 78 | - this.startViewMode = this.viewMode; | |
| 79 | - this.weekStart = options.weekStart||this.element.data('date-weekstart')||0; | |
| 80 | - this.weekEnd = this.weekStart === 0 ? 6 : this.weekStart - 1; | |
| 81 | - this.onRender = options.onRender; | |
| 147 | + | |
| 148 | + this._allow_update = false; | |
| 149 | + | |
| 150 | + this.setStartDate(this._o.startDate); | |
| 151 | + this.setEndDate(this._o.endDate); | |
| 152 | + this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled); | |
| 153 | + this.setDaysOfWeekHighlighted(this.o.daysOfWeekHighlighted); | |
| 154 | + this.setDatesDisabled(this.o.datesDisabled); | |
| 155 | + | |
| 156 | + this.setViewMode(this.o.startView); | |
| 82 | 157 | this.fillDow(); |
| 83 | 158 | this.fillMonths(); |
| 159 | + | |
| 160 | + this._allow_update = true; | |
| 161 | + | |
| 84 | 162 | this.update(); |
| 85 | - this.showMode(); | |
| 163 | + | |
| 164 | + if (this.isInline){ | |
| 165 | + this.show(); | |
| 166 | + } | |
| 86 | 167 | }; |
| 87 | - | |
| 168 | + | |
| 88 | 169 | Datepicker.prototype = { |
| 89 | 170 | constructor: Datepicker, |
| 90 | - | |
| 91 | - show: function(e) { | |
| 92 | - this.picker.show(); | |
| 93 | - this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); | |
| 94 | - this.place(); | |
| 95 | - $(window).on('resize', $.proxy(this.place, this)); | |
| 96 | - if (e ) { | |
| 97 | - e.stopPropagation(); | |
| 98 | - e.preventDefault(); | |
| 171 | + | |
| 172 | + _resolveViewName: function(view){ | |
| 173 | + $.each(DPGlobal.viewModes, function(i, viewMode){ | |
| 174 | + if (view === i || $.inArray(view, viewMode.names) !== -1){ | |
| 175 | + view = i; | |
| 176 | + return false; | |
| 177 | + } | |
| 178 | + }); | |
| 179 | + | |
| 180 | + return view; | |
| 181 | + }, | |
| 182 | + | |
| 183 | + _resolveDaysOfWeek: function(daysOfWeek){ | |
| 184 | + if (!$.isArray(daysOfWeek)) | |
| 185 | + daysOfWeek = daysOfWeek.split(/[,\s]*/); | |
| 186 | + return $.map(daysOfWeek, Number); | |
| 187 | + }, | |
| 188 | + | |
| 189 | + _check_template: function(tmp){ | |
| 190 | + try { | |
| 191 | + // If empty | |
| 192 | + if (tmp === undefined || tmp === "") { | |
| 193 | + return false; | |
| 194 | + } | |
| 195 | + // If no html, everything ok | |
| 196 | + if ((tmp.match(/[<>]/g) || []).length <= 0) { | |
| 197 | + return true; | |
| 198 | + } | |
| 199 | + // Checking if html is fine | |
| 200 | + var jDom = $(tmp); | |
| 201 | + return jDom.length > 0; | |
| 99 | 202 | } |
| 100 | - if (!this.isInput) { | |
| 203 | + catch (ex) { | |
| 204 | + return false; | |
| 101 | 205 | } |
| 102 | - var that = this; | |
| 103 | - $(document).on('mousedown', function(ev){ | |
| 104 | - if ($(ev.target).closest('.datepicker').length == 0) { | |
| 105 | - that.hide(); | |
| 206 | + }, | |
| 207 | + | |
| 208 | + _process_options: function(opts){ | |
| 209 | + // Store raw options for reference | |
| 210 | + this._o = $.extend({}, this._o, opts); | |
| 211 | + // Processed options | |
| 212 | + var o = this.o = $.extend({}, this._o); | |
| 213 | + | |
| 214 | + // Check if "de-DE" style date is available, if not language should | |
| 215 | + // fallback to 2 letter code eg "de" | |
| 216 | + var lang = o.language; | |
| 217 | + if (!dates[lang]){ | |
| 218 | + lang = lang.split('-')[0]; | |
| 219 | + if (!dates[lang]) | |
| 220 | + lang = defaults.language; | |
| 221 | + } | |
| 222 | + o.language = lang; | |
| 223 | + | |
| 224 | + // Retrieve view index from any aliases | |
| 225 | + o.startView = this._resolveViewName(o.startView); | |
| 226 | + o.minViewMode = this._resolveViewName(o.minViewMode); | |
| 227 | + o.maxViewMode = this._resolveViewName(o.maxViewMode); | |
| 228 | + | |
| 229 | + // Check view is between min and max | |
| 230 | + o.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView)); | |
| 231 | + | |
| 232 | + // true, false, or Number > 0 | |
| 233 | + if (o.multidate !== true){ | |
| 234 | + o.multidate = Number(o.multidate) || false; | |
| 235 | + if (o.multidate !== false) | |
| 236 | + o.multidate = Math.max(0, o.multidate); | |
| 237 | + } | |
| 238 | + o.multidateSeparator = String(o.multidateSeparator); | |
| 239 | + | |
| 240 | + o.weekStart %= 7; | |
| 241 | + o.weekEnd = (o.weekStart + 6) % 7; | |
| 242 | + | |
| 243 | + var format = DPGlobal.parseFormat(o.format); | |
| 244 | + if (o.startDate !== -Infinity){ | |
| 245 | + if (!!o.startDate){ | |
| 246 | + if (o.startDate instanceof Date) | |
| 247 | + o.startDate = this._local_to_utc(this._zero_time(o.startDate)); | |
| 248 | + else | |
| 249 | + o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear); | |
| 250 | + } | |
| 251 | + else { | |
| 252 | + o.startDate = -Infinity; | |
| 253 | + } | |
| 254 | + } | |
| 255 | + if (o.endDate !== Infinity){ | |
| 256 | + if (!!o.endDate){ | |
| 257 | + if (o.endDate instanceof Date) | |
| 258 | + o.endDate = this._local_to_utc(this._zero_time(o.endDate)); | |
| 259 | + else | |
| 260 | + o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear); | |
| 106 | 261 | } |
| 262 | + else { | |
| 263 | + o.endDate = Infinity; | |
| 264 | + } | |
| 265 | + } | |
| 266 | + | |
| 267 | + o.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]); | |
| 268 | + o.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]); | |
| 269 | + | |
| 270 | + o.datesDisabled = o.datesDisabled||[]; | |
| 271 | + if (!$.isArray(o.datesDisabled)) { | |
| 272 | + o.datesDisabled = o.datesDisabled.split(','); | |
| 273 | + } | |
| 274 | + o.datesDisabled = $.map(o.datesDisabled, function(d){ | |
| 275 | + return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear); | |
| 107 | 276 | }); |
| 108 | - this.element.trigger({ | |
| 109 | - type: 'show', | |
| 110 | - date: this.date | |
| 277 | + | |
| 278 | + var plc = String(o.orientation).toLowerCase().split(/\s+/g), | |
| 279 | + _plc = o.orientation.toLowerCase(); | |
| 280 | + plc = $.grep(plc, function(word){ | |
| 281 | + return /^auto|left|right|top|bottom$/.test(word); | |
| 111 | 282 | }); |
| 283 | + o.orientation = {x: 'auto', y: 'auto'}; | |
| 284 | + if (!_plc || _plc === 'auto') | |
| 285 | + ; // no action | |
| 286 | + else if (plc.length === 1){ | |
| 287 | + switch (plc[0]){ | |
| 288 | + case 'top': | |
| 289 | + case 'bottom': | |
| 290 | + o.orientation.y = plc[0]; | |
| 291 | + break; | |
| 292 | + case 'left': | |
| 293 | + case 'right': | |
| 294 | + o.orientation.x = plc[0]; | |
| 295 | + break; | |
| 296 | + } | |
| 297 | + } | |
| 298 | + else { | |
| 299 | + _plc = $.grep(plc, function(word){ | |
| 300 | + return /^left|right$/.test(word); | |
| 301 | + }); | |
| 302 | + o.orientation.x = _plc[0] || 'auto'; | |
| 303 | + | |
| 304 | + _plc = $.grep(plc, function(word){ | |
| 305 | + return /^top|bottom$/.test(word); | |
| 306 | + }); | |
| 307 | + o.orientation.y = _plc[0] || 'auto'; | |
| 308 | + } | |
| 309 | + if (o.defaultViewDate) { | |
| 310 | + var year = o.defaultViewDate.year || new Date().getFullYear(); | |
| 311 | + var month = o.defaultViewDate.month || 0; | |
| 312 | + var day = o.defaultViewDate.day || 1; | |
| 313 | + o.defaultViewDate = UTCDate(year, month, day); | |
| 314 | + } else { | |
| 315 | + o.defaultViewDate = UTCToday(); | |
| 316 | + } | |
| 112 | 317 | }, |
| 113 | - | |
| 114 | - hide: function(){ | |
| 115 | - this.picker.hide(); | |
| 116 | - $(window).off('resize', this.place); | |
| 117 | - this.viewMode = this.startViewMode; | |
| 118 | - this.showMode(); | |
| 119 | - if (!this.isInput) { | |
| 120 | - $(document).off('mousedown', this.hide); | |
| 121 | - } | |
| 122 | - //this.set(); | |
| 318 | + _events: [], | |
| 319 | + _secondaryEvents: [], | |
| 320 | + _applyEvents: function(evs){ | |
| 321 | + for (var i=0, el, ch, ev; i < evs.length; i++){ | |
| 322 | + el = evs[i][0]; | |
| 323 | + if (evs[i].length === 2){ | |
| 324 | + ch = undefined; | |
| 325 | + ev = evs[i][1]; | |
| 326 | + } else if (evs[i].length === 3){ | |
| 327 | + ch = evs[i][1]; | |
| 328 | + ev = evs[i][2]; | |
| 329 | + } | |
| 330 | + el.on(ev, ch); | |
| 331 | + } | |
| 332 | + }, | |
| 333 | + _unapplyEvents: function(evs){ | |
| 334 | + for (var i=0, el, ev, ch; i < evs.length; i++){ | |
| 335 | + el = evs[i][0]; | |
| 336 | + if (evs[i].length === 2){ | |
| 337 | + ch = undefined; | |
| 338 | + ev = evs[i][1]; | |
| 339 | + } else if (evs[i].length === 3){ | |
| 340 | + ch = evs[i][1]; | |
| 341 | + ev = evs[i][2]; | |
| 342 | + } | |
| 343 | + el.off(ev, ch); | |
| 344 | + } | |
| 345 | + }, | |
| 346 | + _buildEvents: function(){ | |
| 347 | + var events = { | |
| 348 | + keyup: $.proxy(function(e){ | |
| 349 | + if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1) | |
| 350 | + this.update(); | |
| 351 | + }, this), | |
| 352 | + keydown: $.proxy(this.keydown, this), | |
| 353 | + paste: $.proxy(this.paste, this) | |
| 354 | + }; | |
| 355 | + | |
| 356 | + if (this.o.showOnFocus === true) { | |
| 357 | + events.focus = $.proxy(this.show, this); | |
| 358 | + } | |
| 359 | + | |
| 360 | + if (this.isInput) { // single input | |
| 361 | + this._events = [ | |
| 362 | + [this.element, events] | |
| 363 | + ]; | |
| 364 | + } | |
| 365 | + // component: input + button | |
| 366 | + else if (this.component && this.inputField.length) { | |
| 367 | + this._events = [ | |
| 368 | + // For components that are not readonly, allow keyboard nav | |
| 369 | + [this.inputField, events], | |
| 370 | + [this.component, { | |
| 371 | + click: $.proxy(this.show, this) | |
| 372 | + }] | |
| 373 | + ]; | |
| 374 | + } | |
| 375 | + else { | |
| 376 | + this._events = [ | |
| 377 | + [this.element, { | |
| 378 | + click: $.proxy(this.show, this), | |
| 379 | + keydown: $.proxy(this.keydown, this) | |
| 380 | + }] | |
| 381 | + ]; | |
| 382 | + } | |
| 383 | + this._events.push( | |
| 384 | + // Component: listen for blur on element descendants | |
| 385 | + [this.element, '*', { | |
| 386 | + blur: $.proxy(function(e){ | |
| 387 | + this._focused_from = e.target; | |
| 388 | + }, this) | |
| 389 | + }], | |
| 390 | + // Input: listen for blur on element | |
| 391 | + [this.element, { | |
| 392 | + blur: $.proxy(function(e){ | |
| 393 | + this._focused_from = e.target; | |
| 394 | + }, this) | |
| 395 | + }] | |
| 396 | + ); | |
| 397 | + | |
| 398 | + if (this.o.immediateUpdates) { | |
| 399 | + // Trigger input updates immediately on changed year/month | |
| 400 | + this._events.push([this.element, { | |
| 401 | + 'changeYear changeMonth': $.proxy(function(e){ | |
| 402 | + this.update(e.date); | |
| 403 | + }, this) | |
| 404 | + }]); | |
| 405 | + } | |
| 406 | + | |
| 407 | + this._secondaryEvents = [ | |
| 408 | + [this.picker, { | |
| 409 | + click: $.proxy(this.click, this) | |
| 410 | + }], | |
| 411 | + [this.picker, '.prev, .next', { | |
| 412 | + click: $.proxy(this.navArrowsClick, this) | |
| 413 | + }], | |
| 414 | + [$(window), { | |
| 415 | + resize: $.proxy(this.place, this) | |
| 416 | + }], | |
| 417 | + [$(document), { | |
| 418 | + 'mousedown touchstart': $.proxy(function(e){ | |
| 419 | + // Clicked outside the datepicker, hide it | |
| 420 | + if (!( | |
| 421 | + this.element.is(e.target) || | |
| 422 | + this.element.find(e.target).length || | |
| 423 | + this.picker.is(e.target) || | |
| 424 | + this.picker.find(e.target).length || | |
| 425 | + this.isInline | |
| 426 | + )){ | |
| 427 | + this.hide(); | |
| 428 | + } | |
| 429 | + }, this) | |
| 430 | + }] | |
| 431 | + ]; | |
| 432 | + }, | |
| 433 | + _attachEvents: function(){ | |
| 434 | + this._detachEvents(); | |
| 435 | + this._applyEvents(this._events); | |
| 436 | + }, | |
| 437 | + _detachEvents: function(){ | |
| 438 | + this._unapplyEvents(this._events); | |
| 439 | + }, | |
| 440 | + _attachSecondaryEvents: function(){ | |
| 441 | + this._detachSecondaryEvents(); | |
| 442 | + this._applyEvents(this._secondaryEvents); | |
| 443 | + }, | |
| 444 | + _detachSecondaryEvents: function(){ | |
| 445 | + this._unapplyEvents(this._secondaryEvents); | |
| 446 | + }, | |
| 447 | + _trigger: function(event, altdate){ | |
| 448 | + var date = altdate || this.dates.get(-1), | |
| 449 | + local_date = this._utc_to_local(date); | |
| 450 | + | |
| 123 | 451 | this.element.trigger({ |
| 124 | - type: 'hide', | |
| 125 | - date: this.date | |
| 452 | + type: event, | |
| 453 | + date: local_date, | |
| 454 | + viewMode: this.viewMode, | |
| 455 | + dates: $.map(this.dates, this._utc_to_local), | |
| 456 | + format: $.proxy(function(ix, format){ | |
| 457 | + if (arguments.length === 0){ | |
| 458 | + ix = this.dates.length - 1; | |
| 459 | + format = this.o.format; | |
| 460 | + } else if (typeof ix === 'string'){ | |
| 461 | + format = ix; | |
| 462 | + ix = this.dates.length - 1; | |
| 463 | + } | |
| 464 | + format = format || this.o.format; | |
| 465 | + var date = this.dates.get(ix); | |
| 466 | + return DPGlobal.formatDate(date, format, this.o.language); | |
| 467 | + }, this) | |
| 126 | 468 | }); |
| 127 | 469 | }, |
| 128 | - | |
| 129 | - set: function() { | |
| 130 | - var formated = DPGlobal.formatDate(this.date, this.format); | |
| 131 | - if (!this.isInput) { | |
| 132 | - if (this.component){ | |
| 133 | - this.element.find('input').prop('value', formated); | |
| 134 | - } | |
| 135 | - this.element.data('date', formated); | |
| 470 | + | |
| 471 | + show: function(){ | |
| 472 | + if (this.inputField.prop('disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false)) | |
| 473 | + return; | |
| 474 | + if (!this.isInline) | |
| 475 | + this.picker.appendTo(this.o.container); | |
| 476 | + this.place(); | |
| 477 | + this.picker.show(); | |
| 478 | + this._attachSecondaryEvents(); | |
| 479 | + this._trigger('show'); | |
| 480 | + if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) { | |
| 481 | + $(this.element).blur(); | |
| 482 | + } | |
| 483 | + return this; | |
| 484 | + }, | |
| 485 | + | |
| 486 | + hide: function(){ | |
| 487 | + if (this.isInline || !this.picker.is(':visible')) | |
| 488 | + return this; | |
| 489 | + this.focusDate = null; | |
| 490 | + this.picker.hide().detach(); | |
| 491 | + this._detachSecondaryEvents(); | |
| 492 | + this.setViewMode(this.o.startView); | |
| 493 | + | |
| 494 | + if (this.o.forceParse && this.inputField.val()) | |
| 495 | + this.setValue(); | |
| 496 | + this._trigger('hide'); | |
| 497 | + return this; | |
| 498 | + }, | |
| 499 | + | |
| 500 | + destroy: function(){ | |
| 501 | + this.hide(); | |
| 502 | + this._detachEvents(); | |
| 503 | + this._detachSecondaryEvents(); | |
| 504 | + this.picker.remove(); | |
| 505 | + delete this.element.data().datepicker; | |
| 506 | + if (!this.isInput){ | |
| 507 | + delete this.element.data().date; | |
| 508 | + } | |
| 509 | + return this; | |
| 510 | + }, | |
| 511 | + | |
| 512 | + paste: function(e){ | |
| 513 | + var dateString; | |
| 514 | + if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types | |
| 515 | + && $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) { | |
| 516 | + dateString = e.originalEvent.clipboardData.getData('text/plain'); | |
| 517 | + } else if (window.clipboardData) { | |
| 518 | + dateString = window.clipboardData.getData('Text'); | |
| 136 | 519 | } else { |
| 137 | - this.element.prop('value', formated); | |
| 520 | + return; | |
| 138 | 521 | } |
| 522 | + this.setDate(dateString); | |
| 523 | + this.update(); | |
| 524 | + e.preventDefault(); | |
| 525 | + }, | |
| 526 | + | |
| 527 | + _utc_to_local: function(utc){ | |
| 528 | + if (!utc) { | |
| 529 | + return utc; | |
| 530 | + } | |
| 531 | + | |
| 532 | + var local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000)); | |
| 533 | + | |
| 534 | + if (local.getTimezoneOffset() !== utc.getTimezoneOffset()) { | |
| 535 | + local = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000)); | |
| 536 | + } | |
| 537 | + | |
| 538 | + return local; | |
| 539 | + }, | |
| 540 | + _local_to_utc: function(local){ | |
| 541 | + return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000)); | |
| 139 | 542 | }, |
| 140 | - | |
| 141 | - setValue: function(newDate) { | |
| 142 | - if (typeof newDate === 'string') { | |
| 143 | - this.date = DPGlobal.parseDate(newDate, this.format); | |
| 543 | + _zero_time: function(local){ | |
| 544 | + return local && new Date(local.getFullYear(), local.getMonth(), local.getDate()); | |
| 545 | + }, | |
| 546 | + _zero_utc_time: function(utc){ | |
| 547 | + return utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()); | |
| 548 | + }, | |
| 549 | + | |
| 550 | + getDates: function(){ | |
| 551 | + return $.map(this.dates, this._utc_to_local); | |
| 552 | + }, | |
| 553 | + | |
| 554 | + getUTCDates: function(){ | |
| 555 | + return $.map(this.dates, function(d){ | |
| 556 | + return new Date(d); | |
| 557 | + }); | |
| 558 | + }, | |
| 559 | + | |
| 560 | + getDate: function(){ | |
| 561 | + return this._utc_to_local(this.getUTCDate()); | |
| 562 | + }, | |
| 563 | + | |
| 564 | + getUTCDate: function(){ | |
| 565 | + var selected_date = this.dates.get(-1); | |
| 566 | + if (selected_date !== undefined) { | |
| 567 | + return new Date(selected_date); | |
| 144 | 568 | } else { |
| 145 | - this.date = new Date(newDate); | |
| 569 | + return null; | |
| 146 | 570 | } |
| 147 | - this.set(); | |
| 148 | - this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); | |
| 149 | - this.fill(); | |
| 150 | 571 | }, |
| 151 | - | |
| 572 | + | |
| 573 | + clearDates: function(){ | |
| 574 | + this.inputField.val(''); | |
| 575 | + this.update(); | |
| 576 | + this._trigger('changeDate'); | |
| 577 | + | |
| 578 | + if (this.o.autoclose) { | |
| 579 | + this.hide(); | |
| 580 | + } | |
| 581 | + }, | |
| 582 | + | |
| 583 | + setDates: function(){ | |
| 584 | + var args = $.isArray(arguments[0]) ? arguments[0] : arguments; | |
| 585 | + this.update.apply(this, args); | |
| 586 | + this._trigger('changeDate'); | |
| 587 | + this.setValue(); | |
| 588 | + return this; | |
| 589 | + }, | |
| 590 | + | |
| 591 | + setUTCDates: function(){ | |
| 592 | + var args = $.isArray(arguments[0]) ? arguments[0] : arguments; | |
| 593 | + this.setDates.apply(this, $.map(args, this._utc_to_local)); | |
| 594 | + return this; | |
| 595 | + }, | |
| 596 | + | |
| 597 | + setDate: alias('setDates'), | |
| 598 | + setUTCDate: alias('setUTCDates'), | |
| 599 | + remove: alias('destroy'), | |
| 600 | + | |
| 601 | + setValue: function(){ | |
| 602 | + var formatted = this.getFormattedDate(); | |
| 603 | + this.inputField.val(formatted); | |
| 604 | + return this; | |
| 605 | + }, | |
| 606 | + | |
| 607 | + getFormattedDate: function(format){ | |
| 608 | + if (format === undefined) | |
| 609 | + format = this.o.format; | |
| 610 | + | |
| 611 | + var lang = this.o.language; | |
| 612 | + return $.map(this.dates, function(d){ | |
| 613 | + return DPGlobal.formatDate(d, format, lang); | |
| 614 | + }).join(this.o.multidateSeparator); | |
| 615 | + }, | |
| 616 | + | |
| 617 | + getStartDate: function(){ | |
| 618 | + return this.o.startDate; | |
| 619 | + }, | |
| 620 | + | |
| 621 | + setStartDate: function(startDate){ | |
| 622 | + this._process_options({startDate: startDate}); | |
| 623 | + this.update(); | |
| 624 | + this.updateNavArrows(); | |
| 625 | + return this; | |
| 626 | + }, | |
| 627 | + | |
| 628 | + getEndDate: function(){ | |
| 629 | + return this.o.endDate; | |
| 630 | + }, | |
| 631 | + | |
| 632 | + setEndDate: function(endDate){ | |
| 633 | + this._process_options({endDate: endDate}); | |
| 634 | + this.update(); | |
| 635 | + this.updateNavArrows(); | |
| 636 | + return this; | |
| 637 | + }, | |
| 638 | + | |
| 639 | + setDaysOfWeekDisabled: function(daysOfWeekDisabled){ | |
| 640 | + this._process_options({daysOfWeekDisabled: daysOfWeekDisabled}); | |
| 641 | + this.update(); | |
| 642 | + return this; | |
| 643 | + }, | |
| 644 | + | |
| 645 | + setDaysOfWeekHighlighted: function(daysOfWeekHighlighted){ | |
| 646 | + this._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted}); | |
| 647 | + this.update(); | |
| 648 | + return this; | |
| 649 | + }, | |
| 650 | + | |
| 651 | + setDatesDisabled: function(datesDisabled){ | |
| 652 | + this._process_options({datesDisabled: datesDisabled}); | |
| 653 | + this.update(); | |
| 654 | + return this; | |
| 655 | + }, | |
| 656 | + | |
| 152 | 657 | place: function(){ |
| 153 | - var offset = this.component ? this.component.offset() : this.element.offset(); | |
| 154 | - this.picker.css({ | |
| 155 | - top: offset.top + this.height, | |
| 156 | - left: offset.left | |
| 658 | + if (this.isInline) | |
| 659 | + return this; | |
| 660 | + var calendarWidth = this.picker.outerWidth(), | |
| 661 | + calendarHeight = this.picker.outerHeight(), | |
| 662 | + visualPadding = 10, | |
| 663 | + container = $(this.o.container), | |
| 664 | + windowWidth = container.width(), | |
| 665 | + scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(), | |
| 666 | + appendOffset = container.offset(); | |
| 667 | + | |
| 668 | + var parentsZindex = []; | |
| 669 | + this.element.parents().each(function(){ | |
| 670 | + var itemZIndex = $(this).css('z-index'); | |
| 671 | + if (itemZIndex !== 'auto' && itemZIndex !== 0) parentsZindex.push(parseInt(itemZIndex)); | |
| 157 | 672 | }); |
| 158 | - }, | |
| 159 | - | |
| 160 | - update: function(newDate){ | |
| 161 | - this.date = DPGlobal.parseDate( | |
| 162 | - typeof newDate === 'string' ? newDate : (this.isInput ? this.element.prop('value') : this.element.data('date')), | |
| 163 | - this.format | |
| 673 | + var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset; | |
| 674 | + var offset = this.component ? this.component.parent().offset() : this.element.offset(); | |
| 675 | + var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false); | |
| 676 | + var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false); | |
| 677 | + var left = offset.left - appendOffset.left, | |
| 678 | + top = offset.top - appendOffset.top; | |
| 679 | + | |
| 680 | + if (this.o.container !== 'body') { | |
| 681 | + top += scrollTop; | |
| 682 | + } | |
| 683 | + | |
| 684 | + this.picker.removeClass( | |
| 685 | + 'datepicker-orient-top datepicker-orient-bottom '+ | |
| 686 | + 'datepicker-orient-right datepicker-orient-left' | |
| 164 | 687 | ); |
| 165 | - this.viewDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1, 0, 0, 0, 0); | |
| 688 | + | |
| 689 | + if (this.o.orientation.x !== 'auto'){ | |
| 690 | + this.picker.addClass('datepicker-orient-' + this.o.orientation.x); | |
| 691 | + if (this.o.orientation.x === 'right') | |
| 692 | + left -= calendarWidth - width; | |
| 693 | + } | |
| 694 | + // auto x orientation is best-placement: if it crosses a window | |
| 695 | + // edge, fudge it sideways | |
| 696 | + else { | |
| 697 | + if (offset.left < 0) { | |
| 698 | + // component is outside the window on the left side. Move it into visible range | |
| 699 | + this.picker.addClass('datepicker-orient-left'); | |
| 700 | + left -= offset.left - visualPadding; | |
| 701 | + } else if (left + calendarWidth > windowWidth) { | |
| 702 | + // the calendar passes the widow right edge. Align it to component right side | |
| 703 | + this.picker.addClass('datepicker-orient-right'); | |
| 704 | + left += width - calendarWidth; | |
| 705 | + } else { | |
| 706 | + if (this.o.rtl) { | |
| 707 | + // Default to right | |
| 708 | + this.picker.addClass('datepicker-orient-right'); | |
| 709 | + } else { | |
| 710 | + // Default to left | |
| 711 | + this.picker.addClass('datepicker-orient-left'); | |
| 712 | + } | |
| 713 | + } | |
| 714 | + } | |
| 715 | + | |
| 716 | + // auto y orientation is best-situation: top or bottom, no fudging, | |
| 717 | + // decision based on which shows more of the calendar | |
| 718 | + var yorient = this.o.orientation.y, | |
| 719 | + top_overflow; | |
| 720 | + if (yorient === 'auto'){ | |
| 721 | + top_overflow = -scrollTop + top - calendarHeight; | |
| 722 | + yorient = top_overflow < 0 ? 'bottom' : 'top'; | |
| 723 | + } | |
| 724 | + | |
| 725 | + this.picker.addClass('datepicker-orient-' + yorient); | |
| 726 | + if (yorient === 'top') | |
| 727 | + top -= calendarHeight + parseInt(this.picker.css('padding-top')); | |
| 728 | + else | |
| 729 | + top += height; | |
| 730 | + | |
| 731 | + if (this.o.rtl) { | |
| 732 | + var right = windowWidth - (left + width); | |
| 733 | + this.picker.css({ | |
| 734 | + top: top, | |
| 735 | + right: right, | |
| 736 | + zIndex: zIndex | |
| 737 | + }); | |
| 738 | + } else { | |
| 739 | + this.picker.css({ | |
| 740 | + top: top, | |
| 741 | + left: left, | |
| 742 | + zIndex: zIndex | |
| 743 | + }); | |
| 744 | + } | |
| 745 | + return this; | |
| 746 | + }, | |
| 747 | + | |
| 748 | + _allow_update: true, | |
| 749 | + update: function(){ | |
| 750 | + if (!this._allow_update) | |
| 751 | + return this; | |
| 752 | + | |
| 753 | + var oldDates = this.dates.copy(), | |
| 754 | + dates = [], | |
| 755 | + fromArgs = false; | |
| 756 | + if (arguments.length){ | |
| 757 | + $.each(arguments, $.proxy(function(i, date){ | |
| 758 | + if (date instanceof Date) | |
| 759 | + date = this._local_to_utc(date); | |
| 760 | + dates.push(date); | |
| 761 | + }, this)); | |
| 762 | + fromArgs = true; | |
| 763 | + } else { | |
| 764 | + dates = this.isInput | |
| 765 | + ? this.element.val() | |
| 766 | + : this.element.data('date') || this.inputField.val(); | |
| 767 | + if (dates && this.o.multidate) | |
| 768 | + dates = dates.split(this.o.multidateSeparator); | |
| 769 | + else | |
| 770 | + dates = [dates]; | |
| 771 | + delete this.element.data().date; | |
| 772 | + } | |
| 773 | + | |
| 774 | + dates = $.map(dates, $.proxy(function(date){ | |
| 775 | + return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear); | |
| 776 | + }, this)); | |
| 777 | + dates = $.grep(dates, $.proxy(function(date){ | |
| 778 | + return ( | |
| 779 | + !this.dateWithinRange(date) || | |
| 780 | + !date | |
| 781 | + ); | |
| 782 | + }, this), true); | |
| 783 | + this.dates.replace(dates); | |
| 784 | + | |
| 785 | + if (this.o.updateViewDate) { | |
| 786 | + if (this.dates.length) | |
| 787 | + this.viewDate = new Date(this.dates.get(-1)); | |
| 788 | + else if (this.viewDate < this.o.startDate) | |
| 789 | + this.viewDate = new Date(this.o.startDate); | |
| 790 | + else if (this.viewDate > this.o.endDate) | |
| 791 | + this.viewDate = new Date(this.o.endDate); | |
| 792 | + else | |
| 793 | + this.viewDate = this.o.defaultViewDate; | |
| 794 | + } | |
| 795 | + | |
| 796 | + if (fromArgs){ | |
| 797 | + // setting date by clicking | |
| 798 | + this.setValue(); | |
| 799 | + this.element.change(); | |
| 800 | + } | |
| 801 | + else if (this.dates.length){ | |
| 802 | + // setting date by typing | |
| 803 | + if (String(oldDates) !== String(this.dates) && fromArgs) { | |
| 804 | + this._trigger('changeDate'); | |
| 805 | + this.element.change(); | |
| 806 | + } | |
| 807 | + } | |
| 808 | + if (!this.dates.length && oldDates.length) { | |
| 809 | + this._trigger('clearDate'); | |
| 810 | + this.element.change(); | |
| 811 | + } | |
| 812 | + | |
| 166 | 813 | this.fill(); |
| 814 | + return this; | |
| 167 | 815 | }, |
| 168 | - | |
| 816 | + | |
| 169 | 817 | fillDow: function(){ |
| 170 | - var dowCnt = this.weekStart; | |
| 171 | - var html = '<tr>'; | |
| 172 | - while (dowCnt < this.weekStart + 7) { | |
| 173 | - html += '<th class="dow">'+DPGlobal.dates.daysMin[(dowCnt++)%7]+'</th>'; | |
| 818 | + var dowCnt = this.o.weekStart, | |
| 819 | + html = '<tr>'; | |
| 820 | + if (this.o.calendarWeeks){ | |
| 821 | + html += '<th class="cw"> </th>'; | |
| 822 | + } | |
| 823 | + while (dowCnt < this.o.weekStart + 7){ | |
| 824 | + html += '<th class="dow'; | |
| 825 | + if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1) | |
| 826 | + html += ' disabled'; | |
| 827 | + html += '">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>'; | |
| 174 | 828 | } |
| 175 | 829 | html += '</tr>'; |
| 176 | 830 | this.picker.find('.datepicker-days thead').append(html); |
| 177 | 831 | }, |
| 178 | - | |
| 832 | + | |
| 179 | 833 | fillMonths: function(){ |
| 180 | - var html = ''; | |
| 181 | - var i = 0 | |
| 182 | - while (i < 12) { | |
| 183 | - html += '<span class="month">'+DPGlobal.dates.monthsShort[i++]+'</span>'; | |
| 834 | + var localDate = this._utc_to_local(this.viewDate); | |
| 835 | + var html = '', | |
| 836 | + i = 0; | |
| 837 | + while (i < 12){ | |
| 838 | + var focused = localDate && localDate.getMonth() === i ? ' focused' : ''; | |
| 839 | + html += '<span class="month' + focused + '">' + dates[this.o.language].monthsShort[i++]+'</span>'; | |
| 840 | + } | |
| 841 | + this.picker.find('.datepicker-months td').html(html); | |
| 842 | + }, | |
| 843 | + | |
| 844 | + setRange: function(range){ | |
| 845 | + if (!range || !range.length) | |
| 846 | + delete this.range; | |
| 847 | + else | |
| 848 | + this.range = $.map(range, function(d){ | |
| 849 | + return d.valueOf(); | |
| 850 | + }); | |
| 851 | + this.fill(); | |
| 852 | + }, | |
| 853 | + | |
| 854 | + getClassNames: function(date){ | |
| 855 | + var cls = [], | |
| 856 | + year = this.viewDate.getUTCFullYear(), | |
| 857 | + month = this.viewDate.getUTCMonth(), | |
| 858 | + today = UTCToday(); | |
| 859 | + if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){ | |
| 860 | + cls.push('old'); | |
| 861 | + } else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){ | |
| 862 | + cls.push('new'); | |
| 863 | + } | |
| 864 | + if (this.focusDate && date.valueOf() === this.focusDate.valueOf()) | |
| 865 | + cls.push('focused'); | |
| 866 | + // Compare internal UTC date with UTC today, not local today | |
| 867 | + if (this.o.todayHighlight && isUTCEquals(date, today)) { | |
| 868 | + cls.push('today'); | |
| 869 | + } | |
| 870 | + if (this.dates.contains(date) !== -1) | |
| 871 | + cls.push('active'); | |
| 872 | + if (!this.dateWithinRange(date)){ | |
| 873 | + cls.push('disabled'); | |
| 874 | + } | |
| 875 | + if (this.dateIsDisabled(date)){ | |
| 876 | + cls.push('disabled', 'disabled-date'); | |
| 877 | + } | |
| 878 | + if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){ | |
| 879 | + cls.push('highlighted'); | |
| 880 | + } | |
| 881 | + | |
| 882 | + if (this.range){ | |
| 883 | + if (date > this.range[0] && date < this.range[this.range.length-1]){ | |
| 884 | + cls.push('range'); | |
| 885 | + } | |
| 886 | + if ($.inArray(date.valueOf(), this.range) !== -1){ | |
| 887 | + cls.push('selected'); | |
| 888 | + } | |
| 889 | + if (date.valueOf() === this.range[0]){ | |
| 890 | + cls.push('range-start'); | |
| 891 | + } | |
| 892 | + if (date.valueOf() === this.range[this.range.length-1]){ | |
| 893 | + cls.push('range-end'); | |
| 894 | + } | |
| 895 | + } | |
| 896 | + return cls; | |
| 897 | + }, | |
| 898 | + | |
| 899 | + _fill_yearsView: function(selector, cssClass, factor, step, currentYear, startYear, endYear, callback){ | |
| 900 | + var html, view, year, steps, startStep, endStep, thisYear, i, classes, tooltip, before; | |
| 901 | + | |
| 902 | + html = ''; | |
| 903 | + view = this.picker.find(selector); | |
| 904 | + year = parseInt(currentYear / factor, 10) * factor; | |
| 905 | + startStep = parseInt(startYear / step, 10) * step; | |
| 906 | + endStep = parseInt(endYear / step, 10) * step; | |
| 907 | + steps = $.map(this.dates, function(d){ | |
| 908 | + return parseInt(d.getUTCFullYear() / step, 10) * step; | |
| 909 | + }); | |
| 910 | + | |
| 911 | + view.find('.datepicker-switch').text(year + '-' + (year + step * 9)); | |
| 912 | + | |
| 913 | + thisYear = year - step; | |
| 914 | + for (i = -1; i < 11; i += 1) { | |
| 915 | + classes = [cssClass]; | |
| 916 | + tooltip = null; | |
| 917 | + | |
| 918 | + if (i === -1) { | |
| 919 | + classes.push('old'); | |
| 920 | + } else if (i === 10) { | |
| 921 | + classes.push('new'); | |
| 922 | + } | |
| 923 | + if ($.inArray(thisYear, steps) !== -1) { | |
| 924 | + classes.push('active'); | |
| 925 | + } | |
| 926 | + if (thisYear < startStep || thisYear > endStep) { | |
| 927 | + classes.push('disabled'); | |
| 928 | + } | |
| 929 | + if (thisYear === this.viewDate.getFullYear()) { | |
| 930 | + classes.push('focused'); | |
| 931 | + } | |
| 932 | + | |
| 933 | + if (callback !== $.noop) { | |
| 934 | + before = callback(new Date(thisYear, 0, 1)); | |
| 935 | + if (before === undefined) { | |
| 936 | + before = {}; | |
| 937 | + } else if (typeof before === 'boolean') { | |
| 938 | + before = {enabled: before}; | |
| 939 | + } else if (typeof before === 'string') { | |
| 940 | + before = {classes: before}; | |
| 941 | + } | |
| 942 | + if (before.enabled === false) { | |
| 943 | + classes.push('disabled'); | |
| 944 | + } | |
| 945 | + if (before.classes) { | |
| 946 | + classes = classes.concat(before.classes.split(/\s+/)); | |
| 947 | + } | |
| 948 | + if (before.tooltip) { | |
| 949 | + tooltip = before.tooltip; | |
| 950 | + } | |
| 951 | + } | |
| 952 | + | |
| 953 | + html += '<span class="' + classes.join(' ') + '"' + (tooltip ? ' title="' + tooltip + '"' : '') + '>' + thisYear + '</span>'; | |
| 954 | + thisYear += step; | |
| 184 | 955 | } |
| 185 | - this.picker.find('.datepicker-months td').append(html); | |
| 956 | + view.find('td').html(html); | |
| 186 | 957 | }, |
| 187 | - | |
| 188 | - fill: function() { | |
| 958 | + | |
| 959 | + fill: function(){ | |
| 189 | 960 | var d = new Date(this.viewDate), |
| 190 | - year = d.getFullYear(), | |
| 191 | - month = d.getMonth(), | |
| 192 | - currentDate = this.date.valueOf(); | |
| 193 | - this.picker.find('.datepicker-days th:eq(1)') | |
| 194 | - .text(DPGlobal.dates.months[month]+' '+year); | |
| 195 | - var prevMonth = new Date(year, month-1, 28,0,0,0,0), | |
| 196 | - day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth()); | |
| 197 | - prevMonth.setDate(day); | |
| 198 | - prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7); | |
| 961 | + year = d.getUTCFullYear(), | |
| 962 | + month = d.getUTCMonth(), | |
| 963 | + startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity, | |
| 964 | + startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity, | |
| 965 | + endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity, | |
| 966 | + endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity, | |
| 967 | + todaytxt = dates[this.o.language].today || dates['en'].today || '', | |
| 968 | + cleartxt = dates[this.o.language].clear || dates['en'].clear || '', | |
| 969 | + titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat, | |
| 970 | + tooltip, | |
| 971 | + before; | |
| 972 | + if (isNaN(year) || isNaN(month)) | |
| 973 | + return; | |
| 974 | + this.picker.find('.datepicker-days .datepicker-switch') | |
| 975 | + .text(DPGlobal.formatDate(d, titleFormat, this.o.language)); | |
| 976 | + this.picker.find('tfoot .today') | |
| 977 | + .text(todaytxt) | |
| 978 | + .toggle(this.o.todayBtn !== false); | |
| 979 | + this.picker.find('tfoot .clear') | |
| 980 | + .text(cleartxt) | |
| 981 | + .toggle(this.o.clearBtn !== false); | |
| 982 | + this.picker.find('thead .datepicker-title') | |
| 983 | + .text(this.o.title) | |
| 984 | + .toggle(this.o.title !== ''); | |
| 985 | + this.updateNavArrows(); | |
| 986 | + this.fillMonths(); | |
| 987 | + var prevMonth = UTCDate(year, month, 0), | |
| 988 | + day = prevMonth.getUTCDate(); | |
| 989 | + prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7); | |
| 199 | 990 | var nextMonth = new Date(prevMonth); |
| 200 | - nextMonth.setDate(nextMonth.getDate() + 42); | |
| 991 | + if (prevMonth.getUTCFullYear() < 100){ | |
| 992 | + nextMonth.setUTCFullYear(prevMonth.getUTCFullYear()); | |
| 993 | + } | |
| 994 | + nextMonth.setUTCDate(nextMonth.getUTCDate() + 42); | |
| 201 | 995 | nextMonth = nextMonth.valueOf(); |
| 202 | 996 | var html = []; |
| 203 | - var clsName, | |
| 204 | - prevY, | |
| 205 | - prevM; | |
| 206 | - while(prevMonth.valueOf() < nextMonth) { | |
| 207 | - if (prevMonth.getDay() === this.weekStart) { | |
| 997 | + var weekDay, clsName; | |
| 998 | + while (prevMonth.valueOf() < nextMonth){ | |
| 999 | + weekDay = prevMonth.getUTCDay(); | |
| 1000 | + if (weekDay === this.o.weekStart){ | |
| 208 | 1001 | html.push('<tr>'); |
| 1002 | + if (this.o.calendarWeeks){ | |
| 1003 | + // ISO 8601: First week contains first thursday. | |
| 1004 | + // ISO also states week starts on Monday, but we can be more abstract here. | |
| 1005 | + var | |
| 1006 | + // Start of current week: based on weekstart/current date | |
| 1007 | + ws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5), | |
| 1008 | + // Thursday of this week | |
| 1009 | + th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5), | |
| 1010 | + // First Thursday of year, year from thursday | |
| 1011 | + yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5), | |
| 1012 | + // Calendar week: ms between thursdays, div ms per day, div 7 days | |
| 1013 | + calWeek = (th - yth) / 864e5 / 7 + 1; | |
| 1014 | + html.push('<td class="cw">'+ calWeek +'</td>'); | |
| 1015 | + } | |
| 209 | 1016 | } |
| 210 | - clsName = this.onRender(prevMonth); | |
| 211 | - prevY = prevMonth.getFullYear(); | |
| 212 | - prevM = prevMonth.getMonth(); | |
| 213 | - if ((prevM < month && prevY === year) || prevY < year) { | |
| 214 | - clsName += ' old'; | |
| 215 | - } else if ((prevM > month && prevY === year) || prevY > year) { | |
| 216 | - clsName += ' new'; | |
| 1017 | + clsName = this.getClassNames(prevMonth); | |
| 1018 | + clsName.push('day'); | |
| 1019 | + | |
| 1020 | + if (this.o.beforeShowDay !== $.noop){ | |
| 1021 | + before = this.o.beforeShowDay(this._utc_to_local(prevMonth)); | |
| 1022 | + if (before === undefined) | |
| 1023 | + before = {}; | |
| 1024 | + else if (typeof before === 'boolean') | |
| 1025 | + before = {enabled: before}; | |
| 1026 | + else if (typeof before === 'string') | |
| 1027 | + before = {classes: before}; | |
| 1028 | + if (before.enabled === false) | |
| 1029 | + clsName.push('disabled'); | |
| 1030 | + if (before.classes) | |
| 1031 | + clsName = clsName.concat(before.classes.split(/\s+/)); | |
| 1032 | + if (before.tooltip) | |
| 1033 | + tooltip = before.tooltip; | |
| 217 | 1034 | } |
| 218 | - if (prevMonth.valueOf() === currentDate) { | |
| 219 | - clsName += ' active'; | |
| 1035 | + | |
| 1036 | + //Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2) | |
| 1037 | + //Fallback to unique function for older jquery versions | |
| 1038 | + if ($.isFunction($.uniqueSort)) { | |
| 1039 | + clsName = $.uniqueSort(clsName); | |
| 1040 | + } else { | |
| 1041 | + clsName = $.unique(clsName); | |
| 220 | 1042 | } |
| 221 | - html.push('<td class="day '+clsName+'">'+prevMonth.getDate() + '</td>'); | |
| 222 | - if (prevMonth.getDay() === this.weekEnd) { | |
| 1043 | + | |
| 1044 | + html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + (this.o.dateCells ? ' data-date="'+(prevMonth.getTime().toString())+'"' : '') + '>'+prevMonth.getUTCDate() + '</td>'); | |
| 1045 | + tooltip = null; | |
| 1046 | + if (weekDay === this.o.weekEnd){ | |
| 223 | 1047 | html.push('</tr>'); |
| 224 | 1048 | } |
| 225 | - prevMonth.setDate(prevMonth.getDate()+1); | |
| 1049 | + prevMonth.setUTCDate(prevMonth.getUTCDate() + 1); | |
| 226 | 1050 | } |
| 227 | - this.picker.find('.datepicker-days tbody').empty().append(html.join('')); | |
| 228 | - var currentYear = this.date.getFullYear(); | |
| 229 | - | |
| 1051 | + this.picker.find('.datepicker-days tbody').html(html.join('')); | |
| 1052 | + | |
| 1053 | + var monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months'; | |
| 230 | 1054 | var months = this.picker.find('.datepicker-months') |
| 231 | - .find('th:eq(1)') | |
| 232 | - .text(year) | |
| 1055 | + .find('.datepicker-switch') | |
| 1056 | + .text(this.o.maxViewMode < 2 ? monthsTitle : year) | |
| 233 | 1057 | .end() |
| 234 | - .find('span').removeClass('active'); | |
| 235 | - if (currentYear === year) { | |
| 236 | - months.eq(this.date.getMonth()).addClass('active'); | |
| 237 | - } | |
| 238 | - | |
| 239 | - html = ''; | |
| 240 | - year = parseInt(year/10, 10) * 10; | |
| 241 | - var yearCont = this.picker.find('.datepicker-years') | |
| 242 | - .find('th:eq(1)') | |
| 243 | - .text(year + '-' + (year + 9)) | |
| 244 | - .end() | |
| 245 | - .find('td'); | |
| 246 | - year -= 1; | |
| 247 | - for (var i = -1; i < 11; i++) { | |
| 248 | - html += '<span class="year'+(i === -1 || i === 10 ? ' old' : '')+(currentYear === year ? ' active' : '')+'">'+year+'</span>'; | |
| 249 | - year += 1; | |
| 250 | - } | |
| 251 | - yearCont.html(html); | |
| 252 | - }, | |
| 253 | - | |
| 254 | - click: function(e) { | |
| 255 | - e.stopPropagation(); | |
| 1058 | + .find('tbody span').removeClass('active'); | |
| 1059 | + | |
| 1060 | + $.each(this.dates, function(i, d){ | |
| 1061 | + if (d.getUTCFullYear() === year) | |
| 1062 | + months.eq(d.getUTCMonth()).addClass('active'); | |
| 1063 | + }); | |
| 1064 | + | |
| 1065 | + if (year < startYear || year > endYear){ | |
| 1066 | + months.addClass('disabled'); | |
| 1067 | + } | |
| 1068 | + if (year === startYear){ | |
| 1069 | + months.slice(0, startMonth).addClass('disabled'); | |
| 1070 | + } | |
| 1071 | + if (year === endYear){ | |
| 1072 | + months.slice(endMonth+1).addClass('disabled'); | |
| 1073 | + } | |
| 1074 | + | |
| 1075 | + if (this.o.beforeShowMonth !== $.noop){ | |
| 1076 | + var that = this; | |
| 1077 | + $.each(months, function(i, month){ | |
| 1078 | + var moDate = new Date(year, i, 1); | |
| 1079 | + var before = that.o.beforeShowMonth(moDate); | |
| 1080 | + if (before === undefined) | |
| 1081 | + before = {}; | |
| 1082 | + else if (typeof before === 'boolean') | |
| 1083 | + before = {enabled: before}; | |
| 1084 | + else if (typeof before === 'string') | |
| 1085 | + before = {classes: before}; | |
| 1086 | + if (before.enabled === false && !$(month).hasClass('disabled')) | |
| 1087 | + $(month).addClass('disabled'); | |
| 1088 | + if (before.classes) | |
| 1089 | + $(month).addClass(before.classes); | |
| 1090 | + if (before.tooltip) | |
| 1091 | + $(month).prop('title', before.tooltip); | |
| 1092 | + }); | |
| 1093 | + } | |
| 1094 | + | |
| 1095 | + // Generating decade/years picker | |
| 1096 | + this._fill_yearsView( | |
| 1097 | + '.datepicker-years', | |
| 1098 | + 'year', | |
| 1099 | + 10, | |
| 1100 | + 1, | |
| 1101 | + year, | |
| 1102 | + startYear, | |
| 1103 | + endYear, | |
| 1104 | + this.o.beforeShowYear | |
| 1105 | + ); | |
| 1106 | + | |
| 1107 | + // Generating century/decades picker | |
| 1108 | + this._fill_yearsView( | |
| 1109 | + '.datepicker-decades', | |
| 1110 | + 'decade', | |
| 1111 | + 100, | |
| 1112 | + 10, | |
| 1113 | + year, | |
| 1114 | + startYear, | |
| 1115 | + endYear, | |
| 1116 | + this.o.beforeShowDecade | |
| 1117 | + ); | |
| 1118 | + | |
| 1119 | + // Generating millennium/centuries picker | |
| 1120 | + this._fill_yearsView( | |
| 1121 | + '.datepicker-centuries', | |
| 1122 | + 'century', | |
| 1123 | + 1000, | |
| 1124 | + 100, | |
| 1125 | + year, | |
| 1126 | + startYear, | |
| 1127 | + endYear, | |
| 1128 | + this.o.beforeShowCentury | |
| 1129 | + ); | |
| 1130 | + }, | |
| 1131 | + | |
| 1132 | + updateNavArrows: function(){ | |
| 1133 | + if (!this._allow_update) | |
| 1134 | + return; | |
| 1135 | + | |
| 1136 | + var d = new Date(this.viewDate), | |
| 1137 | + year = d.getUTCFullYear(), | |
| 1138 | + month = d.getUTCMonth(), | |
| 1139 | + prevState, | |
| 1140 | + nextState; | |
| 1141 | + switch (this.viewMode){ | |
| 1142 | + case 0: | |
| 1143 | + prevState = ( | |
| 1144 | + this.o.startDate !== -Infinity && | |
| 1145 | + year <= this.o.startDate.getUTCFullYear() && | |
| 1146 | + month <= this.o.startDate.getUTCMonth() | |
| 1147 | + ); | |
| 1148 | + | |
| 1149 | + nextState = ( | |
| 1150 | + this.o.endDate !== Infinity && | |
| 1151 | + year >= this.o.endDate.getUTCFullYear() && | |
| 1152 | + month >= this.o.endDate.getUTCMonth() | |
| 1153 | + ); | |
| 1154 | + break; | |
| 1155 | + case 1: | |
| 1156 | + case 2: | |
| 1157 | + case 3: | |
| 1158 | + case 4: | |
| 1159 | + prevState = ( | |
| 1160 | + this.o.startDate !== -Infinity && | |
| 1161 | + year <= this.o.startDate.getUTCFullYear() | |
| 1162 | + ); | |
| 1163 | + | |
| 1164 | + nextState = ( | |
| 1165 | + this.o.endDate !== Infinity && | |
| 1166 | + year >= this.o.endDate.getUTCFullYear() | |
| 1167 | + ); | |
| 1168 | + break; | |
| 1169 | + } | |
| 1170 | + | |
| 1171 | + this.picker.find('.prev').toggleClass('disabled', prevState); | |
| 1172 | + this.picker.find('.next').toggleClass('disabled', nextState); | |
| 1173 | + }, | |
| 1174 | + | |
| 1175 | + click: function(e){ | |
| 256 | 1176 | e.preventDefault(); |
| 257 | - var target = $(e.target).closest('span, td, th'); | |
| 258 | - if (target.length === 1) { | |
| 259 | - switch(target[0].nodeName.toLowerCase()) { | |
| 260 | - case 'th': | |
| 261 | - switch(target[0].className) { | |
| 262 | - case 'switch': | |
| 263 | - this.showMode(1); | |
| 264 | - break; | |
| 265 | - case 'prev': | |
| 266 | - case 'next': | |
| 267 | - this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call( | |
| 268 | - this.viewDate, | |
| 269 | - this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) + | |
| 270 | - DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1) | |
| 271 | - ); | |
| 272 | - this.fill(); | |
| 273 | - this.set(); | |
| 274 | - break; | |
| 275 | - } | |
| 276 | - break; | |
| 277 | - case 'span': | |
| 278 | - if (target.is('.month')) { | |
| 279 | - var month = target.parent().find('span').index(target); | |
| 280 | - this.viewDate.setMonth(month); | |
| 281 | - } else { | |
| 282 | - var year = parseInt(target.text(), 10)||0; | |
| 283 | - this.viewDate.setFullYear(year); | |
| 1177 | + e.stopPropagation(); | |
| 1178 | + | |
| 1179 | + var target, dir, day, year, month; | |
| 1180 | + target = $(e.target); | |
| 1181 | + | |
| 1182 | + // Clicked on the switch | |
| 1183 | + if (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){ | |
| 1184 | + this.setViewMode(this.viewMode + 1); | |
| 1185 | + } | |
| 1186 | + | |
| 1187 | + // Clicked on today button | |
| 1188 | + if (target.hasClass('today') && !target.hasClass('day')){ | |
| 1189 | + this.setViewMode(0); | |
| 1190 | + this._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view'); | |
| 1191 | + } | |
| 1192 | + | |
| 1193 | + // Clicked on clear button | |
| 1194 | + if (target.hasClass('clear')){ | |
| 1195 | + this.clearDates(); | |
| 1196 | + } | |
| 1197 | + | |
| 1198 | + if (!target.hasClass('disabled')){ | |
| 1199 | + // Clicked on a day | |
| 1200 | + if (target.hasClass('day')){ | |
| 1201 | + day = Number(target.text()); | |
| 1202 | + year = this.viewDate.getUTCFullYear(); | |
| 1203 | + month = this.viewDate.getUTCMonth(); | |
| 1204 | + | |
| 1205 | + if (target.hasClass('old') || target.hasClass('new')){ | |
| 1206 | + dir = target.hasClass('old') ? -1 : 1; | |
| 1207 | + month = (month + dir + 12) % 12; | |
| 1208 | + if ((dir === -1 && month === 11) || (dir === 1 && month === 0)) { | |
| 1209 | + year += dir; | |
| 1210 | + if (this.o.updateViewDate) { | |
| 1211 | + this._trigger('changeYear', this.viewDate); | |
| 1212 | + } | |
| 284 | 1213 | } |
| 285 | - if (this.viewMode !== 0) { | |
| 286 | - this.date = new Date(this.viewDate); | |
| 287 | - this.element.trigger({ | |
| 288 | - type: 'changeDate', | |
| 289 | - date: this.date, | |
| 290 | - viewMode: DPGlobal.modes[this.viewMode].clsName | |
| 291 | - }); | |
| 1214 | + if (this.o.updateViewDate) { | |
| 1215 | + this._trigger('changeMonth', this.viewDate); | |
| 292 | 1216 | } |
| 293 | - this.showMode(-1); | |
| 1217 | + } | |
| 1218 | + this._setDate(UTCDate(year, month, day)); | |
| 1219 | + } | |
| 1220 | + | |
| 1221 | + // Clicked on a month, year, decade, century | |
| 1222 | + if (target.hasClass('month') | |
| 1223 | + || target.hasClass('year') | |
| 1224 | + || target.hasClass('decade') | |
| 1225 | + || target.hasClass('century')) { | |
| 1226 | + this.viewDate.setUTCDate(1); | |
| 1227 | + | |
| 1228 | + day = 1; | |
| 1229 | + if (this.viewMode === 1){ | |
| 1230 | + month = target.parent().find('span').index(target); | |
| 1231 | + year = this.viewDate.getUTCFullYear(); | |
| 1232 | + this.viewDate.setUTCMonth(month); | |
| 1233 | + } else { | |
| 1234 | + month = 0; | |
| 1235 | + year = Number(target.text()); | |
| 1236 | + this.viewDate.setUTCFullYear(year); | |
| 1237 | + } | |
| 1238 | + | |
| 1239 | + this._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate); | |
| 1240 | + | |
| 1241 | + if (this.viewMode === this.o.minViewMode){ | |
| 1242 | + this._setDate(UTCDate(year, month, day)); | |
| 1243 | + } else { | |
| 1244 | + this.setViewMode(this.viewMode - 1); | |
| 1245 | + this.fill(); | |
| 1246 | + } | |
| 1247 | + } | |
| 1248 | + } | |
| 1249 | + | |
| 1250 | + if (this.picker.is(':visible') && this._focused_from){ | |
| 1251 | + this._focused_from.focus(); | |
| 1252 | + } | |
| 1253 | + delete this._focused_from; | |
| 1254 | + }, | |
| 1255 | + | |
| 1256 | + // Clicked on prev or next | |
| 1257 | + navArrowsClick: function(e){ | |
| 1258 | + var target = $(e.target); | |
| 1259 | + var dir = target.hasClass('prev') ? -1 : 1; | |
| 1260 | + if (this.viewMode !== 0){ | |
| 1261 | + dir *= DPGlobal.viewModes[this.viewMode].navStep * 12; | |
| 1262 | + } | |
| 1263 | + this.viewDate = this.moveMonth(this.viewDate, dir); | |
| 1264 | + this._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate); | |
| 1265 | + this.fill(); | |
| 1266 | + }, | |
| 1267 | + | |
| 1268 | + _toggle_multidate: function(date){ | |
| 1269 | + var ix = this.dates.contains(date); | |
| 1270 | + if (!date){ | |
| 1271 | + this.dates.clear(); | |
| 1272 | + } | |
| 1273 | + | |
| 1274 | + if (ix !== -1){ | |
| 1275 | + if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){ | |
| 1276 | + this.dates.remove(ix); | |
| 1277 | + } | |
| 1278 | + } else if (this.o.multidate === false) { | |
| 1279 | + this.dates.clear(); | |
| 1280 | + this.dates.push(date); | |
| 1281 | + } | |
| 1282 | + else { | |
| 1283 | + this.dates.push(date); | |
| 1284 | + } | |
| 1285 | + | |
| 1286 | + if (typeof this.o.multidate === 'number') | |
| 1287 | + while (this.dates.length > this.o.multidate) | |
| 1288 | + this.dates.remove(0); | |
| 1289 | + }, | |
| 1290 | + | |
| 1291 | + _setDate: function(date, which){ | |
| 1292 | + if (!which || which === 'date') | |
| 1293 | + this._toggle_multidate(date && new Date(date)); | |
| 1294 | + if ((!which && this.o.updateViewDate) || which === 'view') | |
| 1295 | + this.viewDate = date && new Date(date); | |
| 1296 | + | |
| 1297 | + this.fill(); | |
| 1298 | + this.setValue(); | |
| 1299 | + if (!which || which !== 'view') { | |
| 1300 | + this._trigger('changeDate'); | |
| 1301 | + } | |
| 1302 | + this.inputField.trigger('change'); | |
| 1303 | + if (this.o.autoclose && (!which || which === 'date')){ | |
| 1304 | + this.hide(); | |
| 1305 | + } | |
| 1306 | + }, | |
| 1307 | + | |
| 1308 | + moveDay: function(date, dir){ | |
| 1309 | + var newDate = new Date(date); | |
| 1310 | + newDate.setUTCDate(date.getUTCDate() + dir); | |
| 1311 | + | |
| 1312 | + return newDate; | |
| 1313 | + }, | |
| 1314 | + | |
| 1315 | + moveWeek: function(date, dir){ | |
| 1316 | + return this.moveDay(date, dir * 7); | |
| 1317 | + }, | |
| 1318 | + | |
| 1319 | + moveMonth: function(date, dir){ | |
| 1320 | + if (!isValidDate(date)) | |
| 1321 | + return this.o.defaultViewDate; | |
| 1322 | + if (!dir) | |
| 1323 | + return date; | |
| 1324 | + var new_date = new Date(date.valueOf()), | |
| 1325 | + day = new_date.getUTCDate(), | |
| 1326 | + month = new_date.getUTCMonth(), | |
| 1327 | + mag = Math.abs(dir), | |
| 1328 | + new_month, test; | |
| 1329 | + dir = dir > 0 ? 1 : -1; | |
| 1330 | + if (mag === 1){ | |
| 1331 | + test = dir === -1 | |
| 1332 | + // If going back one month, make sure month is not current month | |
| 1333 | + // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02) | |
| 1334 | + ? function(){ | |
| 1335 | + return new_date.getUTCMonth() === month; | |
| 1336 | + } | |
| 1337 | + // If going forward one month, make sure month is as expected | |
| 1338 | + // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02) | |
| 1339 | + : function(){ | |
| 1340 | + return new_date.getUTCMonth() !== new_month; | |
| 1341 | + }; | |
| 1342 | + new_month = month + dir; | |
| 1343 | + new_date.setUTCMonth(new_month); | |
| 1344 | + // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11 | |
| 1345 | + new_month = (new_month + 12) % 12; | |
| 1346 | + } | |
| 1347 | + else { | |
| 1348 | + // For magnitudes >1, move one month at a time... | |
| 1349 | + for (var i=0; i < mag; i++) | |
| 1350 | + // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)... | |
| 1351 | + new_date = this.moveMonth(new_date, dir); | |
| 1352 | + // ...then reset the day, keeping it in the new month | |
| 1353 | + new_month = new_date.getUTCMonth(); | |
| 1354 | + new_date.setUTCDate(day); | |
| 1355 | + test = function(){ | |
| 1356 | + return new_month !== new_date.getUTCMonth(); | |
| 1357 | + }; | |
| 1358 | + } | |
| 1359 | + // Common date-resetting loop -- if date is beyond end of month, make it | |
| 1360 | + // end of month | |
| 1361 | + while (test()){ | |
| 1362 | + new_date.setUTCDate(--day); | |
| 1363 | + new_date.setUTCMonth(new_month); | |
| 1364 | + } | |
| 1365 | + return new_date; | |
| 1366 | + }, | |
| 1367 | + | |
| 1368 | + moveYear: function(date, dir){ | |
| 1369 | + return this.moveMonth(date, dir*12); | |
| 1370 | + }, | |
| 1371 | + | |
| 1372 | + moveAvailableDate: function(date, dir, fn){ | |
| 1373 | + do { | |
| 1374 | + date = this[fn](date, dir); | |
| 1375 | + | |
| 1376 | + if (!this.dateWithinRange(date)) | |
| 1377 | + return false; | |
| 1378 | + | |
| 1379 | + fn = 'moveDay'; | |
| 1380 | + } | |
| 1381 | + while (this.dateIsDisabled(date)); | |
| 1382 | + | |
| 1383 | + return date; | |
| 1384 | + }, | |
| 1385 | + | |
| 1386 | + weekOfDateIsDisabled: function(date){ | |
| 1387 | + return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1; | |
| 1388 | + }, | |
| 1389 | + | |
| 1390 | + dateIsDisabled: function(date){ | |
| 1391 | + return ( | |
| 1392 | + this.weekOfDateIsDisabled(date) || | |
| 1393 | + $.grep(this.o.datesDisabled, function(d){ | |
| 1394 | + return isUTCEquals(date, d); | |
| 1395 | + }).length > 0 | |
| 1396 | + ); | |
| 1397 | + }, | |
| 1398 | + | |
| 1399 | + dateWithinRange: function(date){ | |
| 1400 | + return date >= this.o.startDate && date <= this.o.endDate; | |
| 1401 | + }, | |
| 1402 | + | |
| 1403 | + keydown: function(e){ | |
| 1404 | + if (!this.picker.is(':visible')){ | |
| 1405 | + if (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker | |
| 1406 | + this.show(); | |
| 1407 | + e.stopPropagation(); | |
| 1408 | + } | |
| 1409 | + return; | |
| 1410 | + } | |
| 1411 | + var dateChanged = false, | |
| 1412 | + dir, newViewDate, | |
| 1413 | + focusDate = this.focusDate || this.viewDate; | |
| 1414 | + switch (e.keyCode){ | |
| 1415 | + case 27: // escape | |
| 1416 | + if (this.focusDate){ | |
| 1417 | + this.focusDate = null; | |
| 1418 | + this.viewDate = this.dates.get(-1) || this.viewDate; | |
| 294 | 1419 | this.fill(); |
| 295 | - this.set(); | |
| 1420 | + } | |
| 1421 | + else | |
| 1422 | + this.hide(); | |
| 1423 | + e.preventDefault(); | |
| 1424 | + e.stopPropagation(); | |
| 1425 | + break; | |
| 1426 | + case 37: // left | |
| 1427 | + case 38: // up | |
| 1428 | + case 39: // right | |
| 1429 | + case 40: // down | |
| 1430 | + if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7) | |
| 296 | 1431 | break; |
| 297 | - case 'td': | |
| 298 | - if (target.is('.day') && !target.is('.disabled')){ | |
| 299 | - var day = parseInt(target.text(), 10)||1; | |
| 300 | - var month = this.viewDate.getMonth(); | |
| 301 | - if (target.is('.old')) { | |
| 302 | - month -= 1; | |
| 303 | - } else if (target.is('.new')) { | |
| 304 | - month += 1; | |
| 305 | - } | |
| 306 | - var year = this.viewDate.getFullYear(); | |
| 307 | - this.date = new Date(year, month, day,0,0,0,0); | |
| 308 | - this.viewDate = new Date(year, month, Math.min(28, day),0,0,0,0); | |
| 309 | - this.fill(); | |
| 310 | - this.set(); | |
| 311 | - this.element.trigger({ | |
| 312 | - type: 'changeDate', | |
| 313 | - date: this.date, | |
| 314 | - viewMode: DPGlobal.modes[this.viewMode].clsName | |
| 315 | - }); | |
| 316 | - } | |
| 1432 | + dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1; | |
| 1433 | + if (this.viewMode === 0) { | |
| 1434 | + if (e.ctrlKey){ | |
| 1435 | + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear'); | |
| 1436 | + | |
| 1437 | + if (newViewDate) | |
| 1438 | + this._trigger('changeYear', this.viewDate); | |
| 1439 | + } else if (e.shiftKey){ | |
| 1440 | + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth'); | |
| 1441 | + | |
| 1442 | + if (newViewDate) | |
| 1443 | + this._trigger('changeMonth', this.viewDate); | |
| 1444 | + } else if (e.keyCode === 37 || e.keyCode === 39){ | |
| 1445 | + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay'); | |
| 1446 | + } else if (!this.weekOfDateIsDisabled(focusDate)){ | |
| 1447 | + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek'); | |
| 1448 | + } | |
| 1449 | + } else if (this.viewMode === 1) { | |
| 1450 | + if (e.keyCode === 38 || e.keyCode === 40) { | |
| 1451 | + dir = dir * 4; | |
| 1452 | + } | |
| 1453 | + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth'); | |
| 1454 | + } else if (this.viewMode === 2) { | |
| 1455 | + if (e.keyCode === 38 || e.keyCode === 40) { | |
| 1456 | + dir = dir * 4; | |
| 1457 | + } | |
| 1458 | + newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear'); | |
| 1459 | + } | |
| 1460 | + if (newViewDate){ | |
| 1461 | + this.focusDate = this.viewDate = newViewDate; | |
| 1462 | + this.setValue(); | |
| 1463 | + this.fill(); | |
| 1464 | + e.preventDefault(); | |
| 1465 | + } | |
| 1466 | + break; | |
| 1467 | + case 13: // enter | |
| 1468 | + if (!this.o.forceParse) | |
| 317 | 1469 | break; |
| 1470 | + focusDate = this.focusDate || this.dates.get(-1) || this.viewDate; | |
| 1471 | + if (this.o.keyboardNavigation) { | |
| 1472 | + this._toggle_multidate(focusDate); | |
| 1473 | + dateChanged = true; | |
| 1474 | + } | |
| 1475 | + this.focusDate = null; | |
| 1476 | + this.viewDate = this.dates.get(-1) || this.viewDate; | |
| 1477 | + this.setValue(); | |
| 1478 | + this.fill(); | |
| 1479 | + if (this.picker.is(':visible')){ | |
| 1480 | + e.preventDefault(); | |
| 1481 | + e.stopPropagation(); | |
| 1482 | + if (this.o.autoclose) | |
| 1483 | + this.hide(); | |
| 1484 | + } | |
| 1485 | + break; | |
| 1486 | + case 9: // tab | |
| 1487 | + this.focusDate = null; | |
| 1488 | + this.viewDate = this.dates.get(-1) || this.viewDate; | |
| 1489 | + this.fill(); | |
| 1490 | + this.hide(); | |
| 1491 | + break; | |
| 1492 | + } | |
| 1493 | + if (dateChanged){ | |
| 1494 | + if (this.dates.length) | |
| 1495 | + this._trigger('changeDate'); | |
| 1496 | + else | |
| 1497 | + this._trigger('clearDate'); | |
| 1498 | + this.inputField.trigger('change'); | |
| 1499 | + } | |
| 1500 | + }, | |
| 1501 | + | |
| 1502 | + setViewMode: function(viewMode){ | |
| 1503 | + this.viewMode = viewMode; | |
| 1504 | + this.picker | |
| 1505 | + .children('div') | |
| 1506 | + .hide() | |
| 1507 | + .filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName) | |
| 1508 | + .show(); | |
| 1509 | + this.updateNavArrows(); | |
| 1510 | + this._trigger('changeViewMode', new Date(this.viewDate)); | |
| 1511 | + } | |
| 1512 | + }; | |
| 1513 | + | |
| 1514 | + var DateRangePicker = function(element, options){ | |
| 1515 | + $.data(element, 'datepicker', this); | |
| 1516 | + this.element = $(element); | |
| 1517 | + this.inputs = $.map(options.inputs, function(i){ | |
| 1518 | + return i.jquery ? i[0] : i; | |
| 1519 | + }); | |
| 1520 | + delete options.inputs; | |
| 1521 | + | |
| 1522 | + this.keepEmptyValues = options.keepEmptyValues; | |
| 1523 | + delete options.keepEmptyValues; | |
| 1524 | + | |
| 1525 | + datepickerPlugin.call($(this.inputs), options) | |
| 1526 | + .on('changeDate', $.proxy(this.dateUpdated, this)); | |
| 1527 | + | |
| 1528 | + this.pickers = $.map(this.inputs, function(i){ | |
| 1529 | + return $.data(i, 'datepicker'); | |
| 1530 | + }); | |
| 1531 | + this.updateDates(); | |
| 1532 | + }; | |
| 1533 | + DateRangePicker.prototype = { | |
| 1534 | + updateDates: function(){ | |
| 1535 | + this.dates = $.map(this.pickers, function(i){ | |
| 1536 | + return i.getUTCDate(); | |
| 1537 | + }); | |
| 1538 | + this.updateRanges(); | |
| 1539 | + }, | |
| 1540 | + updateRanges: function(){ | |
| 1541 | + var range = $.map(this.dates, function(d){ | |
| 1542 | + return d.valueOf(); | |
| 1543 | + }); | |
| 1544 | + $.each(this.pickers, function(i, p){ | |
| 1545 | + p.setRange(range); | |
| 1546 | + }); | |
| 1547 | + }, | |
| 1548 | + dateUpdated: function(e){ | |
| 1549 | + // `this.updating` is a workaround for preventing infinite recursion | |
| 1550 | + // between `changeDate` triggering and `setUTCDate` calling. Until | |
| 1551 | + // there is a better mechanism. | |
| 1552 | + if (this.updating) | |
| 1553 | + return; | |
| 1554 | + this.updating = true; | |
| 1555 | + | |
| 1556 | + var dp = $.data(e.target, 'datepicker'); | |
| 1557 | + | |
| 1558 | + if (dp === undefined) { | |
| 1559 | + return; | |
| 1560 | + } | |
| 1561 | + | |
| 1562 | + var new_date = dp.getUTCDate(), | |
| 1563 | + keep_empty_values = this.keepEmptyValues, | |
| 1564 | + i = $.inArray(e.target, this.inputs), | |
| 1565 | + j = i - 1, | |
| 1566 | + k = i + 1, | |
| 1567 | + l = this.inputs.length; | |
| 1568 | + if (i === -1) | |
| 1569 | + return; | |
| 1570 | + | |
| 1571 | + $.each(this.pickers, function(i, p){ | |
| 1572 | + if (!p.getUTCDate() && (p === dp || !keep_empty_values)) | |
| 1573 | + p.setUTCDate(new_date); | |
| 1574 | + }); | |
| 1575 | + | |
| 1576 | + if (new_date < this.dates[j]){ | |
| 1577 | + // Date being moved earlier/left | |
| 1578 | + while (j >= 0 && new_date < this.dates[j]){ | |
| 1579 | + this.pickers[j--].setUTCDate(new_date); | |
| 1580 | + } | |
| 1581 | + } else if (new_date > this.dates[k]){ | |
| 1582 | + // Date being moved later/right | |
| 1583 | + while (k < l && new_date > this.dates[k]){ | |
| 1584 | + this.pickers[k++].setUTCDate(new_date); | |
| 318 | 1585 | } |
| 319 | 1586 | } |
| 1587 | + this.updateDates(); | |
| 1588 | + | |
| 1589 | + delete this.updating; | |
| 320 | 1590 | }, |
| 321 | - | |
| 322 | - mousedown: function(e){ | |
| 323 | - e.stopPropagation(); | |
| 324 | - e.preventDefault(); | |
| 1591 | + destroy: function(){ | |
| 1592 | + $.map(this.pickers, function(p){ p.destroy(); }); | |
| 1593 | + $(this.inputs).off('changeDate', this.dateUpdated); | |
| 1594 | + delete this.element.data().datepicker; | |
| 325 | 1595 | }, |
| 326 | - | |
| 327 | - showMode: function(dir) { | |
| 328 | - if (dir) { | |
| 329 | - this.viewMode = Math.max(this.minViewMode, Math.min(2, this.viewMode + dir)); | |
| 1596 | + remove: alias('destroy') | |
| 1597 | + }; | |
| 1598 | + | |
| 1599 | + function opts_from_el(el, prefix){ | |
| 1600 | + // Derive options from element data-attrs | |
| 1601 | + var data = $(el).data(), | |
| 1602 | + out = {}, inkey, | |
| 1603 | + replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])'); | |
| 1604 | + prefix = new RegExp('^' + prefix.toLowerCase()); | |
| 1605 | + function re_lower(_,a){ | |
| 1606 | + return a.toLowerCase(); | |
| 1607 | + } | |
| 1608 | + for (var key in data) | |
| 1609 | + if (prefix.test(key)){ | |
| 1610 | + inkey = key.replace(replace, re_lower); | |
| 1611 | + out[inkey] = data[key]; | |
| 330 | 1612 | } |
| 331 | - this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show(); | |
| 1613 | + return out; | |
| 1614 | + } | |
| 1615 | + | |
| 1616 | + function opts_from_locale(lang){ | |
| 1617 | + // Derive options from locale plugins | |
| 1618 | + var out = {}; | |
| 1619 | + // Check if "de-DE" style date is available, if not language should | |
| 1620 | + // fallback to 2 letter code eg "de" | |
| 1621 | + if (!dates[lang]){ | |
| 1622 | + lang = lang.split('-')[0]; | |
| 1623 | + if (!dates[lang]) | |
| 1624 | + return; | |
| 332 | 1625 | } |
| 333 | - }; | |
| 334 | - | |
| 335 | - $.fn.datepicker = function ( option, val ) { | |
| 336 | - return this.each(function () { | |
| 1626 | + var d = dates[lang]; | |
| 1627 | + $.each(locale_opts, function(i,k){ | |
| 1628 | + if (k in d) | |
| 1629 | + out[k] = d[k]; | |
| 1630 | + }); | |
| 1631 | + return out; | |
| 1632 | + } | |
| 1633 | + | |
| 1634 | + var old = $.fn.datepicker; | |
| 1635 | + var datepickerPlugin = function(option){ | |
| 1636 | + var args = Array.apply(null, arguments); | |
| 1637 | + args.shift(); | |
| 1638 | + var internal_return; | |
| 1639 | + this.each(function(){ | |
| 337 | 1640 | var $this = $(this), |
| 338 | 1641 | data = $this.data('datepicker'), |
| 339 | 1642 | options = typeof option === 'object' && option; |
| 340 | - if (!data) { | |
| 341 | - $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options)))); | |
| 1643 | + if (!data){ | |
| 1644 | + var elopts = opts_from_el(this, 'date'), | |
| 1645 | + // Preliminary otions | |
| 1646 | + xopts = $.extend({}, defaults, elopts, options), | |
| 1647 | + locopts = opts_from_locale(xopts.language), | |
| 1648 | + // Options priority: js args, data-attrs, locales, defaults | |
| 1649 | + opts = $.extend({}, defaults, locopts, elopts, options); | |
| 1650 | + if ($this.hasClass('input-daterange') || opts.inputs){ | |
| 1651 | + $.extend(opts, { | |
| 1652 | + inputs: opts.inputs || $this.find('input').toArray() | |
| 1653 | + }); | |
| 1654 | + data = new DateRangePicker(this, opts); | |
| 1655 | + } | |
| 1656 | + else { | |
| 1657 | + data = new Datepicker(this, opts); | |
| 1658 | + } | |
| 1659 | + $this.data('datepicker', data); | |
| 1660 | + } | |
| 1661 | + if (typeof option === 'string' && typeof data[option] === 'function'){ | |
| 1662 | + internal_return = data[option].apply(data, args); | |
| 342 | 1663 | } |
| 343 | - if (typeof option === 'string') data[option](val); | |
| 344 | 1664 | }); |
| 1665 | + | |
| 1666 | + if ( | |
| 1667 | + internal_return === undefined || | |
| 1668 | + internal_return instanceof Datepicker || | |
| 1669 | + internal_return instanceof DateRangePicker | |
| 1670 | + ) | |
| 1671 | + return this; | |
| 1672 | + | |
| 1673 | + if (this.length > 1) | |
| 1674 | + throw new Error('Using only allowed for the collection of a single element (' + option + ' function)'); | |
| 1675 | + else | |
| 1676 | + return internal_return; | |
| 345 | 1677 | }; |
| 1678 | + $.fn.datepicker = datepickerPlugin; | |
| 346 | 1679 | |
| 347 | - $.fn.datepicker.defaults = { | |
| 348 | - onRender: function(date) { | |
| 349 | - return ''; | |
| 1680 | + var defaults = $.fn.datepicker.defaults = { | |
| 1681 | + assumeNearbyYear: false, | |
| 1682 | + autoclose: false, | |
| 1683 | + beforeShowDay: $.noop, | |
| 1684 | + beforeShowMonth: $.noop, | |
| 1685 | + beforeShowYear: $.noop, | |
| 1686 | + beforeShowDecade: $.noop, | |
| 1687 | + beforeShowCentury: $.noop, | |
| 1688 | + calendarWeeks: false, | |
| 1689 | + clearBtn: false, | |
| 1690 | + toggleActive: false, | |
| 1691 | + daysOfWeekDisabled: [], | |
| 1692 | + daysOfWeekHighlighted: [], | |
| 1693 | + datesDisabled: [], | |
| 1694 | + endDate: Infinity, | |
| 1695 | + forceParse: true, | |
| 1696 | + format: 'mm/dd/yyyy', | |
| 1697 | + keepEmptyValues: false, | |
| 1698 | + keyboardNavigation: true, | |
| 1699 | + language: 'en', | |
| 1700 | + minViewMode: 0, | |
| 1701 | + maxViewMode: 4, | |
| 1702 | + multidate: false, | |
| 1703 | + multidateSeparator: ',', | |
| 1704 | + orientation: "auto", | |
| 1705 | + rtl: false, | |
| 1706 | + startDate: -Infinity, | |
| 1707 | + startView: 0, | |
| 1708 | + todayBtn: false, | |
| 1709 | + todayHighlight: false, | |
| 1710 | + updateViewDate: true, | |
| 1711 | + weekStart: 0, | |
| 1712 | + disableTouchKeyboard: false, | |
| 1713 | + enableOnReadonly: true, | |
| 1714 | + showOnFocus: true, | |
| 1715 | + zIndexOffset: 10, | |
| 1716 | + container: 'body', | |
| 1717 | + immediateUpdates: false, | |
| 1718 | + dateCells:false, | |
| 1719 | + title: '', | |
| 1720 | + templates: { | |
| 1721 | + leftArrow: '«', | |
| 1722 | + rightArrow: '»' | |
| 350 | 1723 | } |
| 351 | 1724 | }; |
| 1725 | + var locale_opts = $.fn.datepicker.locale_opts = [ | |
| 1726 | + 'format', | |
| 1727 | + 'rtl', | |
| 1728 | + 'weekStart' | |
| 1729 | + ]; | |
| 352 | 1730 | $.fn.datepicker.Constructor = Datepicker; |
| 353 | - | |
| 1731 | + var dates = $.fn.datepicker.dates = { | |
| 1732 | + en: { | |
| 1733 | + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], | |
| 1734 | + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], | |
| 1735 | + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], | |
| 1736 | + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |
| 1737 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | |
| 1738 | + today: "Today", | |
| 1739 | + clear: "Clear", | |
| 1740 | + titleFormat: "MM yyyy" | |
| 1741 | + } | |
| 1742 | + }; | |
| 1743 | + | |
| 354 | 1744 | var DPGlobal = { |
| 355 | - modes: [ | |
| 1745 | + viewModes: [ | |
| 356 | 1746 | { |
| 1747 | + names: ['days', 'month'], | |
| 357 | 1748 | clsName: 'days', |
| 358 | - navFnc: 'Month', | |
| 359 | - navStep: 1 | |
| 1749 | + e: 'changeMonth' | |
| 360 | 1750 | }, |
| 361 | 1751 | { |
| 1752 | + names: ['months', 'year'], | |
| 362 | 1753 | clsName: 'months', |
| 363 | - navFnc: 'FullYear', | |
| 1754 | + e: 'changeYear', | |
| 364 | 1755 | navStep: 1 |
| 365 | 1756 | }, |
| 366 | 1757 | { |
| 1758 | + names: ['years', 'decade'], | |
| 367 | 1759 | clsName: 'years', |
| 368 | - navFnc: 'FullYear', | |
| 1760 | + e: 'changeDecade', | |
| 369 | 1761 | navStep: 10 |
| 370 | - }], | |
| 371 | - dates:{ | |
| 372 | - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], | |
| 373 | - daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], | |
| 374 | - daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], | |
| 375 | - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |
| 376 | - monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] | |
| 377 | - }, | |
| 378 | - isLeapYear: function (year) { | |
| 379 | - return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) | |
| 380 | - }, | |
| 381 | - getDaysInMonth: function (year, month) { | |
| 382 | - return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] | |
| 383 | - }, | |
| 1762 | + }, | |
| 1763 | + { | |
| 1764 | + names: ['decades', 'century'], | |
| 1765 | + clsName: 'decades', | |
| 1766 | + e: 'changeCentury', | |
| 1767 | + navStep: 100 | |
| 1768 | + }, | |
| 1769 | + { | |
| 1770 | + names: ['centuries', 'millennium'], | |
| 1771 | + clsName: 'centuries', | |
| 1772 | + e: 'changeMillennium', | |
| 1773 | + navStep: 1000 | |
| 1774 | + } | |
| 1775 | + ], | |
| 1776 | + validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g, | |
| 1777 | + nonpunctuation: /[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g, | |
| 384 | 1778 | parseFormat: function(format){ |
| 385 | - var separator = format.match(/[.\/\-\s].*?/), | |
| 386 | - parts = format.split(/\W+/); | |
| 387 | - if (!separator || !parts || parts.length === 0){ | |
| 1779 | + if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function') | |
| 1780 | + return format; | |
| 1781 | + // IE treats \0 as a string end in inputs (truncating the value), | |
| 1782 | + // so it's a bad format delimiter, anyway | |
| 1783 | + var separators = format.replace(this.validParts, '\0').split('\0'), | |
| 1784 | + parts = format.match(this.validParts); | |
| 1785 | + if (!separators || !separators.length || !parts || parts.length === 0){ | |
| 388 | 1786 | throw new Error("Invalid date format."); |
| 389 | 1787 | } |
| 390 | - return {separator: separator, parts: parts}; | |
| 391 | - }, | |
| 392 | - parseDate: function(date, format) { | |
| 393 | - var parts = date.split(format.separator), | |
| 394 | - date = new Date(), | |
| 395 | - val; | |
| 396 | - date.setHours(0); | |
| 397 | - date.setMinutes(0); | |
| 398 | - date.setSeconds(0); | |
| 399 | - date.setMilliseconds(0); | |
| 400 | - if (parts.length === format.parts.length) { | |
| 401 | - var year = date.getFullYear(), day = date.getDate(), month = date.getMonth(); | |
| 402 | - for (var i=0, cnt = format.parts.length; i < cnt; i++) { | |
| 403 | - val = parseInt(parts[i], 10)||1; | |
| 404 | - switch(format.parts[i]) { | |
| 405 | - case 'dd': | |
| 406 | - case 'd': | |
| 407 | - day = val; | |
| 408 | - date.setDate(val); | |
| 409 | - break; | |
| 410 | - case 'mm': | |
| 411 | - case 'm': | |
| 412 | - month = val - 1; | |
| 413 | - date.setMonth(val - 1); | |
| 414 | - break; | |
| 415 | - case 'yy': | |
| 416 | - year = 2000 + val; | |
| 417 | - date.setFullYear(2000 + val); | |
| 418 | - break; | |
| 419 | - case 'yyyy': | |
| 420 | - year = val; | |
| 421 | - date.setFullYear(val); | |
| 422 | - break; | |
| 1788 | + return {separators: separators, parts: parts}; | |
| 1789 | + }, | |
| 1790 | + parseDate: function(date, format, language, assumeNearby){ | |
| 1791 | + if (!date) | |
| 1792 | + return undefined; | |
| 1793 | + if (date instanceof Date) | |
| 1794 | + return date; | |
| 1795 | + if (typeof format === 'string') | |
| 1796 | + format = DPGlobal.parseFormat(format); | |
| 1797 | + if (format.toValue) | |
| 1798 | + return format.toValue(date, format, language); | |
| 1799 | + var fn_map = { | |
| 1800 | + d: 'moveDay', | |
| 1801 | + m: 'moveMonth', | |
| 1802 | + w: 'moveWeek', | |
| 1803 | + y: 'moveYear' | |
| 1804 | + }, | |
| 1805 | + dateAliases = { | |
| 1806 | + yesterday: '-1d', | |
| 1807 | + today: '+0d', | |
| 1808 | + tomorrow: '+1d' | |
| 1809 | + }, | |
| 1810 | + parts, part, dir, i, fn; | |
| 1811 | + if (date in dateAliases){ | |
| 1812 | + date = dateAliases[date]; | |
| 1813 | + } | |
| 1814 | + if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/i.test(date)){ | |
| 1815 | + parts = date.match(/([\-+]\d+)([dmwy])/gi); | |
| 1816 | + date = new Date(); | |
| 1817 | + for (i=0; i < parts.length; i++){ | |
| 1818 | + part = parts[i].match(/([\-+]\d+)([dmwy])/i); | |
| 1819 | + dir = Number(part[1]); | |
| 1820 | + fn = fn_map[part[2].toLowerCase()]; | |
| 1821 | + date = Datepicker.prototype[fn](date, dir); | |
| 1822 | + } | |
| 1823 | + return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()); | |
| 1824 | + } | |
| 1825 | + | |
| 1826 | + parts = date && date.match(this.nonpunctuation) || []; | |
| 1827 | + date = new Date(); | |
| 1828 | + | |
| 1829 | + function applyNearbyYear(year, threshold){ | |
| 1830 | + if (threshold === true) | |
| 1831 | + threshold = 10; | |
| 1832 | + | |
| 1833 | + // if year is 2 digits or less, than the user most likely is trying to get a recent century | |
| 1834 | + if (year < 100){ | |
| 1835 | + year += 2000; | |
| 1836 | + // if the new year is more than threshold years in advance, use last century | |
| 1837 | + if (year > ((new Date()).getFullYear()+threshold)){ | |
| 1838 | + year -= 100; | |
| 1839 | + } | |
| 1840 | + } | |
| 1841 | + | |
| 1842 | + return year; | |
| 1843 | + } | |
| 1844 | + | |
| 1845 | + var parsed = {}, | |
| 1846 | + setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'], | |
| 1847 | + setters_map = { | |
| 1848 | + yyyy: function(d,v){ | |
| 1849 | + return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v); | |
| 1850 | + }, | |
| 1851 | + m: function(d,v){ | |
| 1852 | + if (isNaN(d)) | |
| 1853 | + return d; | |
| 1854 | + v -= 1; | |
| 1855 | + while (v < 0) v += 12; | |
| 1856 | + v %= 12; | |
| 1857 | + d.setUTCMonth(v); | |
| 1858 | + while (d.getUTCMonth() !== v) | |
| 1859 | + d.setUTCDate(d.getUTCDate()-1); | |
| 1860 | + return d; | |
| 1861 | + }, | |
| 1862 | + d: function(d,v){ | |
| 1863 | + return d.setUTCDate(v); | |
| 1864 | + } | |
| 1865 | + }, | |
| 1866 | + val, filtered; | |
| 1867 | + setters_map['yy'] = setters_map['yyyy']; | |
| 1868 | + setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m']; | |
| 1869 | + setters_map['dd'] = setters_map['d']; | |
| 1870 | + date = UTCToday(); | |
| 1871 | + var fparts = format.parts.slice(); | |
| 1872 | + // Remove noop parts | |
| 1873 | + if (parts.length !== fparts.length){ | |
| 1874 | + fparts = $(fparts).filter(function(i,p){ | |
| 1875 | + return $.inArray(p, setters_order) !== -1; | |
| 1876 | + }).toArray(); | |
| 1877 | + } | |
| 1878 | + // Process remainder | |
| 1879 | + function match_part(){ | |
| 1880 | + var m = this.slice(0, parts[i].length), | |
| 1881 | + p = parts[i].slice(0, m.length); | |
| 1882 | + return m.toLowerCase() === p.toLowerCase(); | |
| 1883 | + } | |
| 1884 | + if (parts.length === fparts.length){ | |
| 1885 | + var cnt; | |
| 1886 | + for (i=0, cnt = fparts.length; i < cnt; i++){ | |
| 1887 | + val = parseInt(parts[i], 10); | |
| 1888 | + part = fparts[i]; | |
| 1889 | + if (isNaN(val)){ | |
| 1890 | + switch (part){ | |
| 1891 | + case 'MM': | |
| 1892 | + filtered = $(dates[language].months).filter(match_part); | |
| 1893 | + val = $.inArray(filtered[0], dates[language].months) + 1; | |
| 1894 | + break; | |
| 1895 | + case 'M': | |
| 1896 | + filtered = $(dates[language].monthsShort).filter(match_part); | |
| 1897 | + val = $.inArray(filtered[0], dates[language].monthsShort) + 1; | |
| 1898 | + break; | |
| 1899 | + } | |
| 1900 | + } | |
| 1901 | + parsed[part] = val; | |
| 1902 | + } | |
| 1903 | + var _date, s; | |
| 1904 | + for (i=0; i < setters_order.length; i++){ | |
| 1905 | + s = setters_order[i]; | |
| 1906 | + if (s in parsed && !isNaN(parsed[s])){ | |
| 1907 | + _date = new Date(date); | |
| 1908 | + setters_map[s](_date, parsed[s]); | |
| 1909 | + if (!isNaN(_date)) | |
| 1910 | + date = _date; | |
| 423 | 1911 | } |
| 424 | 1912 | } |
| 425 | - date = new Date(year, month, day, 0 ,0 ,0); | |
| 426 | 1913 | } |
| 427 | 1914 | return date; |
| 428 | 1915 | }, |
| 429 | - formatDate: function(date, format){ | |
| 430 | - var val = { | |
| 431 | - d: date.getDate(), | |
| 432 | - m: date.getMonth() + 1, | |
| 433 | - yy: date.getFullYear().toString().substring(2), | |
| 434 | - yyyy: date.getFullYear() | |
| 1916 | + formatDate: function(date, format, language){ | |
| 1917 | + if (!date) | |
| 1918 | + return ''; | |
| 1919 | + if (typeof format === 'string') | |
| 1920 | + format = DPGlobal.parseFormat(format); | |
| 1921 | + if (format.toDisplay) | |
| 1922 | + return format.toDisplay(date, format, language); | |
| 1923 | + var val = { | |
| 1924 | + d: date.getUTCDate(), | |
| 1925 | + D: dates[language].daysShort[date.getUTCDay()], | |
| 1926 | + DD: dates[language].days[date.getUTCDay()], | |
| 1927 | + m: date.getUTCMonth() + 1, | |
| 1928 | + M: dates[language].monthsShort[date.getUTCMonth()], | |
| 1929 | + MM: dates[language].months[date.getUTCMonth()], | |
| 1930 | + yy: date.getUTCFullYear().toString().substring(2), | |
| 1931 | + yyyy: date.getUTCFullYear() | |
| 435 | 1932 | }; |
| 436 | 1933 | val.dd = (val.d < 10 ? '0' : '') + val.d; |
| 437 | 1934 | val.mm = (val.m < 10 ? '0' : '') + val.m; |
| 438 | - var date = []; | |
| 439 | - for (var i=0, cnt = format.parts.length; i < cnt; i++) { | |
| 1935 | + date = []; | |
| 1936 | + var seps = $.extend([], format.separators); | |
| 1937 | + for (var i=0, cnt = format.parts.length; i <= cnt; i++){ | |
| 1938 | + if (seps.length) | |
| 1939 | + date.push(seps.shift()); | |
| 440 | 1940 | date.push(val[format.parts[i]]); |
| 441 | 1941 | } |
| 442 | - return date.join(format.separator); | |
| 1942 | + return date.join(''); | |
| 443 | 1943 | }, |
| 444 | 1944 | headTemplate: '<thead>'+ |
| 1945 | + '<tr>'+ | |
| 1946 | + '<th colspan="7" class="datepicker-title"></th>'+ | |
| 1947 | + '</tr>'+ | |
| 445 | 1948 | '<tr>'+ |
| 446 | - '<th class="prev">‹</th>'+ | |
| 447 | - '<th colspan="5" class="switch"></th>'+ | |
| 448 | - '<th class="next">›</th>'+ | |
| 1949 | + '<th class="prev">«</th>'+ | |
| 1950 | + '<th colspan="5" class="datepicker-switch"></th>'+ | |
| 1951 | + '<th class="next">»</th>'+ | |
| 449 | 1952 | '</tr>'+ |
| 450 | 1953 | '</thead>', |
| 451 | - contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>' | |
| 1954 | + contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>', | |
| 1955 | + footTemplate: '<tfoot>'+ | |
| 1956 | + '<tr>'+ | |
| 1957 | + '<th colspan="7" class="today"></th>'+ | |
| 1958 | + '</tr>'+ | |
| 1959 | + '<tr>'+ | |
| 1960 | + '<th colspan="7" class="clear"></th>'+ | |
| 1961 | + '</tr>'+ | |
| 1962 | + '</tfoot>' | |
| 452 | 1963 | }; |
| 453 | - DPGlobal.template = '<div class="datepicker dropdown-menu">'+ | |
| 1964 | + DPGlobal.template = '<div class="datepicker">'+ | |
| 454 | 1965 | '<div class="datepicker-days">'+ |
| 455 | - '<table class=" table-condensed">'+ | |
| 1966 | + '<table class="table-condensed">'+ | |
| 456 | 1967 | DPGlobal.headTemplate+ |
| 457 | 1968 | '<tbody></tbody>'+ |
| 1969 | + DPGlobal.footTemplate+ | |
| 458 | 1970 | '</table>'+ |
| 459 | 1971 | '</div>'+ |
| 460 | 1972 | '<div class="datepicker-months">'+ |
| 461 | 1973 | '<table class="table-condensed">'+ |
| 462 | 1974 | DPGlobal.headTemplate+ |
| 463 | 1975 | DPGlobal.contTemplate+ |
| 1976 | + DPGlobal.footTemplate+ | |
| 464 | 1977 | '</table>'+ |
| 465 | 1978 | '</div>'+ |
| 466 | 1979 | '<div class="datepicker-years">'+ |
| 467 | 1980 | '<table class="table-condensed">'+ |
| 468 | 1981 | DPGlobal.headTemplate+ |
| 469 | 1982 | DPGlobal.contTemplate+ |
| 1983 | + DPGlobal.footTemplate+ | |
| 1984 | + '</table>'+ | |
| 1985 | + '</div>'+ | |
| 1986 | + '<div class="datepicker-decades">'+ | |
| 1987 | + '<table class="table-condensed">'+ | |
| 1988 | + DPGlobal.headTemplate+ | |
| 1989 | + DPGlobal.contTemplate+ | |
| 1990 | + DPGlobal.footTemplate+ | |
| 1991 | + '</table>'+ | |
| 1992 | + '</div>'+ | |
| 1993 | + '<div class="datepicker-centuries">'+ | |
| 1994 | + '<table class="table-condensed">'+ | |
| 1995 | + DPGlobal.headTemplate+ | |
| 1996 | + DPGlobal.contTemplate+ | |
| 1997 | + DPGlobal.footTemplate+ | |
| 470 | 1998 | '</table>'+ |
| 471 | 1999 | '</div>'+ |
| 472 | 2000 | '</div>'; |
| 473 | 2001 | |
| 474 | -}( window.jQuery ); | |
| 475 | 2002 | \ No newline at end of file |
| 2003 | + $.fn.datepicker.DPGlobal = DPGlobal; | |
| 2004 | + | |
| 2005 | + | |
| 2006 | + /* DATEPICKER NO CONFLICT | |
| 2007 | + * =================== */ | |
| 2008 | + | |
| 2009 | + $.fn.datepicker.noConflict = function(){ | |
| 2010 | + $.fn.datepicker = old; | |
| 2011 | + return this; | |
| 2012 | + }; | |
| 2013 | + | |
| 2014 | + /* DATEPICKER VERSION | |
| 2015 | + * =================== */ | |
| 2016 | + $.fn.datepicker.version = '1.7.0-dev'; | |
| 2017 | + | |
| 2018 | + /* DATEPICKER DATA-API | |
| 2019 | + * ================== */ | |
| 2020 | + | |
| 2021 | + $(document).on( | |
| 2022 | + 'focus.datepicker.data-api click.datepicker.data-api', | |
| 2023 | + '[data-provide="datepicker"]', | |
| 2024 | + function(e){ | |
| 2025 | + var $this = $(this); | |
| 2026 | + if ($this.data('datepicker')) | |
| 2027 | + return; | |
| 2028 | + e.preventDefault(); | |
| 2029 | + // component click requires us to explicitly show it | |
| 2030 | + datepickerPlugin.call($this, 'show'); | |
| 2031 | + } | |
| 2032 | + ); | |
| 2033 | + $(function(){ | |
| 2034 | + datepickerPlugin.call($('[data-provide="datepicker-inline"]')); | |
| 2035 | + }); | |
| 2036 | + | |
| 2037 | +})); | ... | ... |
| ... | ... | @@ -0,0 +1,156 @@ |
| 1 | +/*! | |
| 2 | + * JavaScript Cookie v2.1.3 | |
| 3 | + * https://github.com/js-cookie/js-cookie | |
| 4 | + * | |
| 5 | + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack | |
| 6 | + * Released under the MIT license | |
| 7 | + */ | |
| 8 | +;(function (factory) { | |
| 9 | + var registeredInModuleLoader = false; | |
| 10 | + if (typeof define === 'function' && define.amd) { | |
| 11 | + define(factory); | |
| 12 | + registeredInModuleLoader = true; | |
| 13 | + } | |
| 14 | + if (typeof exports === 'object') { | |
| 15 | + module.exports = factory(); | |
| 16 | + registeredInModuleLoader = true; | |
| 17 | + } | |
| 18 | + if (!registeredInModuleLoader) { | |
| 19 | + var OldCookies = window.Cookies; | |
| 20 | + var api = window.Cookies = factory(); | |
| 21 | + api.noConflict = function () { | |
| 22 | + window.Cookies = OldCookies; | |
| 23 | + return api; | |
| 24 | + }; | |
| 25 | + } | |
| 26 | +}(function () { | |
| 27 | + function extend () { | |
| 28 | + var i = 0; | |
| 29 | + var result = {}; | |
| 30 | + for (; i < arguments.length; i++) { | |
| 31 | + var attributes = arguments[ i ]; | |
| 32 | + for (var key in attributes) { | |
| 33 | + result[key] = attributes[key]; | |
| 34 | + } | |
| 35 | + } | |
| 36 | + return result; | |
| 37 | + } | |
| 38 | + | |
| 39 | + function init (converter) { | |
| 40 | + function api (key, value, attributes) { | |
| 41 | + var result; | |
| 42 | + if (typeof document === 'undefined') { | |
| 43 | + return; | |
| 44 | + } | |
| 45 | + | |
| 46 | + // Write | |
| 47 | + | |
| 48 | + if (arguments.length > 1) { | |
| 49 | + attributes = extend({ | |
| 50 | + path: '/' | |
| 51 | + }, api.defaults, attributes); | |
| 52 | + | |
| 53 | + if (typeof attributes.expires === 'number') { | |
| 54 | + var expires = new Date(); | |
| 55 | + expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); | |
| 56 | + attributes.expires = expires; | |
| 57 | + } | |
| 58 | + | |
| 59 | + try { | |
| 60 | + result = JSON.stringify(value); | |
| 61 | + if (/^[\{\[]/.test(result)) { | |
| 62 | + value = result; | |
| 63 | + } | |
| 64 | + } catch (e) {} | |
| 65 | + | |
| 66 | + if (!converter.write) { | |
| 67 | + value = encodeURIComponent(String(value)) | |
| 68 | + .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); | |
| 69 | + } else { | |
| 70 | + value = converter.write(value, key); | |
| 71 | + } | |
| 72 | + | |
| 73 | + key = encodeURIComponent(String(key)); | |
| 74 | + key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); | |
| 75 | + key = key.replace(/[\(\)]/g, escape); | |
| 76 | + | |
| 77 | + return (document.cookie = [ | |
| 78 | + key, '=', value, | |
| 79 | + attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE | |
| 80 | + attributes.path ? '; path=' + attributes.path : '', | |
| 81 | + attributes.domain ? '; domain=' + attributes.domain : '', | |
| 82 | + attributes.secure ? '; secure' : '' | |
| 83 | + ].join('')); | |
| 84 | + } | |
| 85 | + | |
| 86 | + // Read | |
| 87 | + | |
| 88 | + if (!key) { | |
| 89 | + result = {}; | |
| 90 | + } | |
| 91 | + | |
| 92 | + // To prevent the for loop in the first place assign an empty array | |
| 93 | + // in case there are no cookies at all. Also prevents odd result when | |
| 94 | + // calling "get()" | |
| 95 | + var cookies = document.cookie ? document.cookie.split('; ') : []; | |
| 96 | + var rdecode = /(%[0-9A-Z]{2})+/g; | |
| 97 | + var i = 0; | |
| 98 | + | |
| 99 | + for (; i < cookies.length; i++) { | |
| 100 | + var parts = cookies[i].split('='); | |
| 101 | + var cookie = parts.slice(1).join('='); | |
| 102 | + | |
| 103 | + if (cookie.charAt(0) === '"') { | |
| 104 | + cookie = cookie.slice(1, -1); | |
| 105 | + } | |
| 106 | + | |
| 107 | + try { | |
| 108 | + var name = parts[0].replace(rdecode, decodeURIComponent); | |
| 109 | + cookie = converter.read ? | |
| 110 | + converter.read(cookie, name) : converter(cookie, name) || | |
| 111 | + cookie.replace(rdecode, decodeURIComponent); | |
| 112 | + | |
| 113 | + if (this.json) { | |
| 114 | + try { | |
| 115 | + cookie = JSON.parse(cookie); | |
| 116 | + } catch (e) {} | |
| 117 | + } | |
| 118 | + | |
| 119 | + if (key === name) { | |
| 120 | + result = cookie; | |
| 121 | + break; | |
| 122 | + } | |
| 123 | + | |
| 124 | + if (!key) { | |
| 125 | + result[name] = cookie; | |
| 126 | + } | |
| 127 | + } catch (e) {} | |
| 128 | + } | |
| 129 | + | |
| 130 | + return result; | |
| 131 | + } | |
| 132 | + | |
| 133 | + api.set = api; | |
| 134 | + api.get = function (key) { | |
| 135 | + return api.call(api, key); | |
| 136 | + }; | |
| 137 | + api.getJSON = function () { | |
| 138 | + return api.apply({ | |
| 139 | + json: true | |
| 140 | + }, [].slice.call(arguments)); | |
| 141 | + }; | |
| 142 | + api.defaults = {}; | |
| 143 | + | |
| 144 | + api.remove = function (key, attributes) { | |
| 145 | + api(key, '', extend(attributes, { | |
| 146 | + expires: -1 | |
| 147 | + })); | |
| 148 | + }; | |
| 149 | + | |
| 150 | + api.withConverter = init; | |
| 151 | + | |
| 152 | + return api; | |
| 153 | + } | |
| 154 | + | |
| 155 | + return init(function () {}); | |
| 156 | +})); | |
| 0 | 157 | \ No newline at end of file | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker-en-ca.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Canadian English translation for bootstrap-datepicker | |
| 3 | + * Mike Nacey <mnacey@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['en-CA'] = { | |
| 7 | + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], | |
| 8 | + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], | |
| 9 | + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], | |
| 10 | + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | |
| 12 | + today: "Today", | |
| 13 | + monthsTitle: "Months", | |
| 14 | + clear: "Clear", | |
| 15 | + weekStart: 0, | |
| 16 | + format: "yyyy-mm-dd" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ar-tn.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Arabic-Tunisia translation for bootstrap-datepicker | |
| 3 | + * Souhaieb Besbes <besbes.souhaieb@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ar-tn'] = { | |
| 7 | + days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"], | |
| 8 | + daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"], | |
| 9 | + daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"], | |
| 10 | + months: ["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"], | |
| 11 | + monthsShort: ["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"], | |
| 12 | + today: "هذا اليوم", | |
| 13 | + rtl: true | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ar.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Arabic translation for bootstrap-datepicker | |
| 3 | + * Mohammed Alshehri <alshehri866@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ar'] = { | |
| 7 | + days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"], | |
| 8 | + daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"], | |
| 9 | + daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"], | |
| 10 | + months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], | |
| 11 | + monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], | |
| 12 | + today: "هذا اليوم", | |
| 13 | + rtl: true | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.az.js
0 → 100644
| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | +// Azerbaijani | |
| 2 | +;(function($){ | |
| 3 | + $.fn.datepicker.dates['az'] = { | |
| 4 | + days: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"], | |
| 5 | + daysShort: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş."], | |
| 6 | + daysMin: ["B.", "B.e", "Ç.a", "Ç.", "C.a", "C.", "Ş."], | |
| 7 | + months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"], | |
| 8 | + monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"], | |
| 9 | + today: "Bu gün", | |
| 10 | + weekStart: 1 | |
| 11 | + }; | |
| 12 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.bg.js
0 → 100644
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +/** | |
| 2 | + * Bulgarian translation for bootstrap-datepicker | |
| 3 | + * Apostol Apostolov <apostol.s.apostolov@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['bg'] = { | |
| 7 | + days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"], | |
| 8 | + daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб"], | |
| 9 | + daysMin: ["Н", "П", "В", "С", "Ч", "П", "С"], | |
| 10 | + months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], | |
| 11 | + monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], | |
| 12 | + today: "днес" | |
| 13 | + }; | |
| 14 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.br.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Breton translation for bootstrap-datepicker | |
| 3 | + * Gwenn Meynier <tornoz@laposte.net> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['br'] = { | |
| 7 | + days: ["Sul", "Lun", "Meurzh", "Merc'her", "Yaou", "Gwener", "Sadorn"], | |
| 8 | + daysShort: ["Sul", "Lun", "Meu.", "Mer.", "Yao.", "Gwe.", "Sad."], | |
| 9 | + daysMin: ["Su", "L", "Meu", "Mer", "Y", "G", "Sa"], | |
| 10 | + months: ["Genver", "C'hwevrer", "Meurzh", "Ebrel", "Mae", "Mezheven", "Gouere", "Eost", "Gwengolo", "Here", "Du", "Kerzu"], | |
| 11 | + monthsShort: ["Genv.", "C'hw.", "Meur.", "Ebre.", "Mae", "Mezh.", "Goue.", "Eost", "Gwen.", "Here", "Du", "Kerz."], | |
| 12 | + today: "Hiziv", | |
| 13 | + monthsTitle: "Miz", | |
| 14 | + clear: "Dilemel", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.bs.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Bosnian translation for bootstrap-datepicker | |
| 3 | + */ | |
| 4 | +;(function($){ | |
| 5 | + $.fn.datepicker.dates['bs'] = { | |
| 6 | + days: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"], | |
| 7 | + daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"], | |
| 8 | + daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"], | |
| 9 | + months: ["Januar", "Februar", "Mart", "April", "Maj", "Juni", "Juli", "August", "Septembar", "Oktobar", "Novembar", "Decembar"], | |
| 10 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], | |
| 11 | + today: "Danas", | |
| 12 | + weekStart: 1, | |
| 13 | + format: "dd.mm.yyyy" | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ca.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Catalan translation for bootstrap-datepicker | |
| 3 | + * J. Garcia <jogaco.en@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ca'] = { | |
| 7 | + days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"], | |
| 8 | + daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis"], | |
| 9 | + daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds"], | |
| 10 | + months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], | |
| 11 | + monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], | |
| 12 | + today: "Avui", | |
| 13 | + monthsTitle: "Mesos", | |
| 14 | + clear: "Esborrar", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.cs.js
0 → 100644
| ... | ... | @@ -0,0 +1,19 @@ |
| 1 | +/** | |
| 2 | + * Czech translation for bootstrap-datepicker | |
| 3 | + * Matěj Koubík <matej@koubik.name> | |
| 4 | + * Fixes by Michal Remiš <michal.remis@gmail.com> | |
| 5 | + */ | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates['cs'] = { | |
| 8 | + days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"], | |
| 9 | + daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob"], | |
| 10 | + daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"], | |
| 11 | + months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], | |
| 12 | + monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], | |
| 13 | + today: "Dnes", | |
| 14 | + clear: "Vymazat", | |
| 15 | + monthsTitle: "Měsíc", | |
| 16 | + weekStart: 1, | |
| 17 | + format: "dd.m.yyyy" | |
| 18 | + }; | |
| 19 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.cy.js
0 → 100644
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +/** | |
| 2 | + * Welsh translation for bootstrap-datepicker | |
| 3 | + * S. Morris <s.morris@bangor.ac.uk> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['cy'] = { | |
| 7 | + days: ["Sul", "Llun", "Mawrth", "Mercher", "Iau", "Gwener", "Sadwrn"], | |
| 8 | + daysShort: ["Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad"], | |
| 9 | + daysMin: ["Su", "Ll", "Ma", "Me", "Ia", "Gwe", "Sa"], | |
| 10 | + months: ["Ionawr", "Chewfror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorfennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"], | |
| 11 | + monthsShort: ["Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", "Gor", "Aws", "Med", "Hyd", "Tach", "Rha"], | |
| 12 | + today: "Heddiw" | |
| 13 | + }; | |
| 14 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.da.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Danish translation for bootstrap-datepicker | |
| 3 | + * Christian Pedersen <http://github.com/chripede> | |
| 4 | + * Ivan Mylyanyk <https://github.com/imylyanyk> | |
| 5 | + */ | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates['da'] = { | |
| 8 | + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], | |
| 9 | + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"], | |
| 10 | + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"], | |
| 11 | + months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], | |
| 12 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], | |
| 13 | + today: "I Dag", | |
| 14 | + weekStart: 1, | |
| 15 | + clear: "Nulstil", | |
| 16 | + format: "dd-mm-yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.de.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * German translation for bootstrap-datepicker | |
| 3 | + * Sam Zurcher <sam@orelias.ch> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['de'] = { | |
| 7 | + days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], | |
| 8 | + daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"], | |
| 9 | + daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], | |
| 10 | + months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], | |
| 12 | + today: "Heute", | |
| 13 | + monthsTitle: "Monate", | |
| 14 | + clear: "Löschen", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd.mm.yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.el.js
0 → 100644
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +/** | |
| 2 | + * Greek translation for bootstrap-datepicker | |
| 3 | + */ | |
| 4 | +;(function($){ | |
| 5 | + $.fn.datepicker.dates['el'] = { | |
| 6 | + days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"], | |
| 7 | + daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"], | |
| 8 | + daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα"], | |
| 9 | + months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], | |
| 10 | + monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], | |
| 11 | + today: "Σήμερα", | |
| 12 | + clear: "Καθαρισμός", | |
| 13 | + weekStart: 1, | |
| 14 | + format: "d/m/yyyy" | |
| 15 | + }; | |
| 16 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.en-au.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Australian English translation for bootstrap-datepicker | |
| 3 | + * Steve Chapman <steven.p.chapman@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['en-AU'] = { | |
| 7 | + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], | |
| 8 | + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], | |
| 9 | + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], | |
| 10 | + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | |
| 12 | + today: "Today", | |
| 13 | + monthsTitle: "Months", | |
| 14 | + clear: "Clear", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "d/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.en-gb.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * British English translation for bootstrap-datepicker | |
| 3 | + * Xavier Dutreilh <xavier@dutreilh.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['en-GB'] = { | |
| 7 | + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], | |
| 8 | + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], | |
| 9 | + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], | |
| 10 | + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | |
| 12 | + today: "Today", | |
| 13 | + monthsTitle: "Months", | |
| 14 | + clear: "Clear", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.en-ie.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Irish English translation for bootstrap-datepicker | |
| 3 | + */ | |
| 4 | +;(function($){ | |
| 5 | + $.fn.datepicker.dates['en-IE'] = { | |
| 6 | + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], | |
| 7 | + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], | |
| 8 | + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], | |
| 9 | + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |
| 10 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | |
| 11 | + today: "Today", | |
| 12 | + monthsTitle: "Months", | |
| 13 | + clear: "Clear", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "dd/mm/yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.en-nz.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * New Zealand English translation for bootstrap-datepicker | |
| 3 | + */ | |
| 4 | +;(function($){ | |
| 5 | + $.fn.datepicker.dates['en-NZ'] = { | |
| 6 | + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], | |
| 7 | + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], | |
| 8 | + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], | |
| 9 | + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |
| 10 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | |
| 11 | + today: "Today", | |
| 12 | + monthsTitle: "Months", | |
| 13 | + clear: "Clear", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "d/mm/yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.en-za.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * South African English translation for bootstrap-datepicker | |
| 3 | + */ | |
| 4 | +;(function($){ | |
| 5 | + $.fn.datepicker.dates['en-ZA'] = { | |
| 6 | + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], | |
| 7 | + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], | |
| 8 | + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], | |
| 9 | + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | |
| 10 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | |
| 11 | + today: "Today", | |
| 12 | + monthsTitle: "Months", | |
| 13 | + clear: "Clear", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "yyyy/mm/d" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.eo.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Esperanto translation for bootstrap-datepicker | |
| 3 | + * Emmanuel Debanne <https://github.com/debanne> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['eo'] = { | |
| 7 | + days: ["dimanĉo", "lundo", "mardo", "merkredo", "ĵaŭdo", "vendredo", "sabato"], | |
| 8 | + daysShort: ["dim.", "lun.", "mar.", "mer.", "ĵaŭ.", "ven.", "sam."], | |
| 9 | + daysMin: ["d", "l", "ma", "me", "ĵ", "v", "s"], | |
| 10 | + months: ["januaro", "februaro", "marto", "aprilo", "majo", "junio", "julio", "aŭgusto", "septembro", "oktobro", "novembro", "decembro"], | |
| 11 | + monthsShort: ["jan.", "feb.", "mar.", "apr.", "majo", "jun.", "jul.", "aŭg.", "sep.", "okt.", "nov.", "dec."], | |
| 12 | + today: "Hodiaŭ", | |
| 13 | + clear: "Nuligi", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "yyyy-mm-dd" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.es.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Spanish translation for bootstrap-datepicker | |
| 3 | + * Bruno Bonamin <bruno.bonamin@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['es'] = { | |
| 7 | + days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"], | |
| 8 | + daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"], | |
| 9 | + daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"], | |
| 10 | + months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], | |
| 11 | + monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], | |
| 12 | + today: "Hoy", | |
| 13 | + monthsTitle: "Meses", | |
| 14 | + clear: "Borrar", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.et.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Estonian translation for bootstrap-datepicker | |
| 3 | + * Ando Roots <https://github.com/anroots> | |
| 4 | + * Fixes by Illimar Tambek <<https://github.com/ragulka> | |
| 5 | + */ | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates['et'] = { | |
| 8 | + days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"], | |
| 9 | + daysShort: ["Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup"], | |
| 10 | + daysMin: ["P", "E", "T", "K", "N", "R", "L"], | |
| 11 | + months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"], | |
| 12 | + monthsShort: ["Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"], | |
| 13 | + today: "Täna", | |
| 14 | + clear: "Tühjenda", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd.mm.yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.eu.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Basque translation for bootstrap-datepicker | |
| 3 | + * Arkaitz Etxeberria <kondi80@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['eu'] = { | |
| 7 | + days: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata'], | |
| 8 | + daysShort: ['Ig', 'Al', 'Ar', 'Az', 'Og', 'Ol', 'Lr'], | |
| 9 | + daysMin: ['Ig', 'Al', 'Ar', 'Az', 'Og', 'Ol', 'Lr'], | |
| 10 | + months: ['Urtarrila', 'Otsaila', 'Martxoa', 'Apirila', 'Maiatza', 'Ekaina', 'Uztaila', 'Abuztua', 'Iraila', 'Urria', 'Azaroa', 'Abendua'], | |
| 11 | + monthsShort: ['Urt', 'Ots', 'Mar', 'Api', 'Mai', 'Eka', 'Uzt', 'Abu', 'Ira', 'Urr', 'Aza', 'Abe'], | |
| 12 | + today: "Gaur" | |
| 13 | + }; | |
| 14 | +}(jQuery)); | |
| 15 | + | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.fa.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Persian translation for bootstrap-datepicker | |
| 3 | + * Mostafa Rokooie <mostafa.rokooie@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['fa'] = { | |
| 7 | + days: ["یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه", "یکشنبه"], | |
| 8 | + daysShort: ["یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه", "یک"], | |
| 9 | + daysMin: ["ی", "د", "س", "چ", "پ", "ج", "ش", "ی"], | |
| 10 | + months: ["ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوئن", "ژوئیه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر"], | |
| 11 | + monthsShort: ["ژان", "فور", "مار", "آور", "مه", "ژون", "ژوی", "اوت", "سپت", "اکت", "نوا", "دسا"], | |
| 12 | + today: "امروز", | |
| 13 | + clear: "پاک کن", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "yyyy/mm/dd" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.fi.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Finnish translation for bootstrap-datepicker | |
| 3 | + * Jaakko Salonen <https://github.com/jsalonen> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['fi'] = { | |
| 7 | + days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"], | |
| 8 | + daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau"], | |
| 9 | + daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la"], | |
| 10 | + months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], | |
| 11 | + monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], | |
| 12 | + today: "tänään", | |
| 13 | + clear: "Tyhjennä", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "d.m.yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.fo.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Faroese translation for bootstrap-datepicker | |
| 3 | + * Theodor Johannesen <http://github.com/theodorjohannesen> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['fo'] = { | |
| 7 | + days: ["Sunnudagur", "Mánadagur", "Týsdagur", "Mikudagur", "Hósdagur", "Fríggjadagur", "Leygardagur"], | |
| 8 | + daysShort: ["Sun", "Mán", "Týs", "Mik", "Hós", "Frí", "Ley"], | |
| 9 | + daysMin: ["Su", "Má", "Tý", "Mi", "Hó", "Fr", "Le"], | |
| 10 | + months: ["Januar", "Februar", "Marts", "Apríl", "Mei", "Juni", "Juli", "August", "Septembur", "Oktobur", "Novembur", "Desembur"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], | |
| 12 | + today: "Í Dag", | |
| 13 | + clear: "Reinsa" | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.fr-ch.js
0 → 100644
| ... | ... | @@ -0,0 +1,21 @@ |
| 1 | +/** | |
| 2 | + * French (Switzerland) translation for bootstrap-datepicker | |
| 3 | + * Christoph Jossi <c.jossi@ascami.ch> | |
| 4 | + * Based on | |
| 5 | + * French translation for bootstrap-datepicker | |
| 6 | + * Nico Mollet <nico.mollet@gmail.com> | |
| 7 | + */ | |
| 8 | +;(function($){ | |
| 9 | + $.fn.datepicker.dates['fr'] = { | |
| 10 | + days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"], | |
| 11 | + daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"], | |
| 12 | + daysMin: ["D", "L", "Ma", "Me", "J", "V", "S"], | |
| 13 | + months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], | |
| 14 | + monthsShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Déc"], | |
| 15 | + today: "Aujourd'hui", | |
| 16 | + monthsTitle: "Mois", | |
| 17 | + clear: "Effacer", | |
| 18 | + weekStart: 1, | |
| 19 | + format: "dd.mm.yyyy" | |
| 20 | + }; | |
| 21 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.fr.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * French translation for bootstrap-datepicker | |
| 3 | + * Nico Mollet <nico.mollet@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['fr'] = { | |
| 7 | + days: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], | |
| 8 | + daysShort: ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], | |
| 9 | + daysMin: ["d", "l", "ma", "me", "j", "v", "s"], | |
| 10 | + months: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"], | |
| 11 | + monthsShort: ["janv.", "févr.", "mars", "avril", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."], | |
| 12 | + today: "Aujourd'hui", | |
| 13 | + monthsTitle: "Mois", | |
| 14 | + clear: "Effacer", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.gl.js
0 → 100644
| ... | ... | @@ -0,0 +1,13 @@ |
| 1 | +;(function($){ | |
| 2 | + $.fn.datepicker.dates['gl'] = { | |
| 3 | + days: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"], | |
| 4 | + daysShort: ["Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb"], | |
| 5 | + daysMin: ["Do", "Lu", "Ma", "Me", "Xo", "Ve", "Sa"], | |
| 6 | + months: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"], | |
| 7 | + monthsShort: ["Xan", "Feb", "Mar", "Abr", "Mai", "Xun", "Xul", "Ago", "Sep", "Out", "Nov", "Dec"], | |
| 8 | + today: "Hoxe", | |
| 9 | + clear: "Limpar", | |
| 10 | + weekStart: 1, | |
| 11 | + format: "dd/mm/yyyy" | |
| 12 | + }; | |
| 13 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.he.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Hebrew translation for bootstrap-datepicker | |
| 3 | + * Sagie Maoz <sagie@maoz.info> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['he'] = { | |
| 7 | + days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], | |
| 8 | + daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], | |
| 9 | + daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], | |
| 10 | + months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], | |
| 11 | + monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], | |
| 12 | + today: "היום", | |
| 13 | + rtl: true | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.hr.js
0 → 100644
| ... | ... | @@ -0,0 +1,13 @@ |
| 1 | +/** | |
| 2 | + * Croatian localisation | |
| 3 | + */ | |
| 4 | +;(function($){ | |
| 5 | + $.fn.datepicker.dates['hr'] = { | |
| 6 | + days: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"], | |
| 7 | + daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"], | |
| 8 | + daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su"], | |
| 9 | + months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], | |
| 10 | + monthsShort: ["Sij", "Velj", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"], | |
| 11 | + today: "Danas" | |
| 12 | + }; | |
| 13 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.hu.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Hungarian translation for bootstrap-datepicker | |
| 3 | + * Sotus László <lacisan@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['hu'] = { | |
| 7 | + days: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"], | |
| 8 | + daysShort: ["vas", "hét", "ked", "sze", "csü", "pén", "szo"], | |
| 9 | + daysMin: ["V", "H", "K", "Sze", "Cs", "P", "Szo"], | |
| 10 | + months: ["január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"], | |
| 11 | + monthsShort: ["jan", "feb", "már", "ápr", "máj", "jún", "júl", "aug", "sze", "okt", "nov", "dec"], | |
| 12 | + today: "ma", | |
| 13 | + weekStart: 1, | |
| 14 | + clear: "töröl", | |
| 15 | + titleFormat: "yyyy. MM", | |
| 16 | + format: "yyyy.mm.dd" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.hy.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Armenian translation for bootstrap-datepicker | |
| 3 | + * Hayk Chamyan <hamshen@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['hy'] = { | |
| 7 | + days: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"], | |
| 8 | + daysShort: ["Կրկ", "Երկ", "Երք", "Չրք", "Հնգ", "Ուր", "Շբթ"], | |
| 9 | + daysMin: ["Կրկ", "Երկ", "Երք", "Չրք", "Հնգ", "Ուր", "Շբթ"], | |
| 10 | + months: ["Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"], | |
| 11 | + monthsShort: ["Հուն", "Փետ", "Մար", "Ապր", "Մայ", "Հնս", "Հլս", "Օգս", "Սեպ", "Հոկ", "Նմբ", "Դեկ"], | |
| 12 | + today: "Այսօր", | |
| 13 | + clear: "Ջնջել", | |
| 14 | + format: "dd.mm.yyyy", | |
| 15 | + weekStart: 1 | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.id.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Bahasa translation for bootstrap-datepicker | |
| 3 | + * Azwar Akbar <azwar.akbar@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['id'] = { | |
| 7 | + days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"], | |
| 8 | + daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"], | |
| 9 | + daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa"], | |
| 10 | + months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], | |
| 12 | + today: "Hari Ini", | |
| 13 | + clear: "Kosongkan" | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.is.js
0 → 100644
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +/** | |
| 2 | + * Icelandic translation for bootstrap-datepicker | |
| 3 | + * Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['is'] = { | |
| 7 | + days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"], | |
| 8 | + daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau"], | |
| 9 | + daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La"], | |
| 10 | + months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], | |
| 12 | + today: "Í Dag" | |
| 13 | + }; | |
| 14 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.it-ch.js
0 → 100644
| ... | ... | @@ -0,0 +1,20 @@ |
| 1 | +/** | |
| 2 | + * Italian (Switzerland) translation for bootstrap-datepicker | |
| 3 | + * Christoph Jossi <c.jossi@ascami.ch> | |
| 4 | + * Based on | |
| 5 | + * Italian translation for bootstrap-datepicker | |
| 6 | + * Enrico Rubboli <rubboli@gmail.com> | |
| 7 | + */ | |
| 8 | +;(function($){ | |
| 9 | + $.fn.datepicker.dates['it'] = { | |
| 10 | + days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"], | |
| 11 | + daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"], | |
| 12 | + daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"], | |
| 13 | + months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], | |
| 14 | + monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], | |
| 15 | + today: "Oggi", | |
| 16 | + clear: "Cancella", | |
| 17 | + weekStart: 1, | |
| 18 | + format: "dd.mm.yyyy" | |
| 19 | + }; | |
| 20 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.it.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Italian translation for bootstrap-datepicker | |
| 3 | + * Enrico Rubboli <rubboli@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['it'] = { | |
| 7 | + days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"], | |
| 8 | + daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"], | |
| 9 | + daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"], | |
| 10 | + months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], | |
| 11 | + monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], | |
| 12 | + today: "Oggi", | |
| 13 | + monthsTitle: "Mesi", | |
| 14 | + clear: "Cancella", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ja.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Japanese translation for bootstrap-datepicker | |
| 3 | + * Norio Suzuki <https://github.com/suzuki/> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ja'] = { | |
| 7 | + days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"], | |
| 8 | + daysShort: ["日", "月", "火", "水", "木", "金", "土"], | |
| 9 | + daysMin: ["日", "月", "火", "水", "木", "金", "土"], | |
| 10 | + months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], | |
| 11 | + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], | |
| 12 | + today: "今日", | |
| 13 | + format: "yyyy/mm/dd", | |
| 14 | + titleFormat: "yyyy年mm月", | |
| 15 | + clear: "クリア" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ka.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Georgian translation for bootstrap-datepicker | |
| 3 | + * Levan Melikishvili <levani0101@yahoo.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ka'] = { | |
| 7 | + days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"], | |
| 8 | + daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ"], | |
| 9 | + daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა"], | |
| 10 | + months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"], | |
| 11 | + monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"], | |
| 12 | + today: "დღეს", | |
| 13 | + clear: "გასუფთავება", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "dd.mm.yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.kh.js
0 → 100644
| ... | ... | @@ -0,0 +1,19 @@ |
| 1 | +/** | |
| 2 | + * Cambodia (Khmer) translation for bootstrap-datepicker | |
| 3 | + * Lytay TOUCH <lytaytouch@gmail.com> | |
| 4 | + * | |
| 5 | + * DEPRECATED: This language code 'kh' is deprecated and will be removed in 2.0. | |
| 6 | + * Khmer support is now in a 'km' translation file to follow the ISO language | |
| 7 | + * code - http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes | |
| 8 | + */ | |
| 9 | +;(function($){ | |
| 10 | + $.fn.datepicker.dates['kh'] = { | |
| 11 | + days: ["អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស្បតិ៍", "សុក្រ", "សៅរ៍"], | |
| 12 | + daysShort: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"], | |
| 13 | + daysMin: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"], | |
| 14 | + months: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"], | |
| 15 | + monthsShort: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"], | |
| 16 | + today: "ថ្ងៃនេះ", | |
| 17 | + clear: "សំអាត" | |
| 18 | + }; | |
| 19 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.kk.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Kazakh translation for bootstrap-datepicker | |
| 3 | + * Yerzhan Tolekov <era.tolekov@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['kk'] = { | |
| 7 | + days: ["Жексенбі", "Дүйсенбі", "Сейсенбі", "Сәрсенбі", "Бейсенбі", "Жұма", "Сенбі"], | |
| 8 | + daysShort: ["Жек", "Дүй", "Сей", "Сәр", "Бей", "Жұм", "Сен"], | |
| 9 | + daysMin: ["Жк", "Дс", "Сс", "Ср", "Бс", "Жм", "Сн"], | |
| 10 | + months: ["Қаңтар", "Ақпан", "Наурыз", "Сәуір", "Мамыр", "Маусым", "Шілде", "Тамыз", "Қыркүйек", "Қазан", "Қараша", "Желтоқсан"], | |
| 11 | + monthsShort: ["Қаң", "Ақп", "Нау", "Сәу", "Мам", "Мау", "Шіл", "Там", "Қыр", "Қаз", "Қар", "Жел"], | |
| 12 | + today: "Бүгін", | |
| 13 | + weekStart: 1 | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.km.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Khmer translation for bootstrap-datepicker | |
| 3 | + * This is the Updated Version of: https://github.com/uxsolutions/bootstrap-datepicker/blob/71308d42cce9524284c50c6fac50422d1790ac0f/js/locales/bootstrap-datepicker.kh.js | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['km'] = { | |
| 7 | + days: ["អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស្បតិ៍", "សុក្រ", "សៅរ៍"], | |
| 8 | + daysShort: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"], | |
| 9 | + daysMin: ["អា.ទិ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រ.ហ", "សុក្រ", "សៅរ៍"], | |
| 10 | + months: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"], | |
| 11 | + monthsShort: ["មករា", "កុម្ភះ", "មិនា", "មេសា", "ឧសភា", "មិថុនា", "កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ"], | |
| 12 | + today: "ថ្ងៃនេះ", | |
| 13 | + clear: "សំអាត" | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ko.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Korean translation for bootstrap-datepicker | |
| 3 | + * This is a port from https://github.com/moment/moment/blob/develop/src/locale/ko.js | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ko'] = { | |
| 7 | + days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], | |
| 8 | + daysShort: ["일", "월", "화", "수", "목", "금", "토"], | |
| 9 | + daysMin: ["일", "월", "화", "수", "목", "금", "토"], | |
| 10 | + months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], | |
| 11 | + monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], | |
| 12 | + today: "오늘", | |
| 13 | + clear: "삭제", | |
| 14 | + format: "yyyy-mm-dd", | |
| 15 | + titleFormat: "yyyy년mm월", | |
| 16 | + weekStart: 0 | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.kr.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Korean translation for bootstrap-datepicker | |
| 3 | + * Gu Youn <http://github.com/guyoun> | |
| 4 | + * | |
| 5 | + * DEPRECATED: This language code 'kr' is deprecated and will be removed in 2.0. | |
| 6 | + * Korean support is now in a 'ko' translation file to follow the ISO language | |
| 7 | + * code - http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes | |
| 8 | + */ | |
| 9 | +;(function($){ | |
| 10 | + $.fn.datepicker.dates['kr'] = { | |
| 11 | + days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], | |
| 12 | + daysShort: ["일", "월", "화", "수", "목", "금", "토"], | |
| 13 | + daysMin: ["일", "월", "화", "수", "목", "금", "토"], | |
| 14 | + months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], | |
| 15 | + monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.lt.js
0 → 100644
| ... | ... | @@ -0,0 +1,19 @@ |
| 1 | +/** | |
| 2 | + * Lithuanian translation for bootstrap-datepicker | |
| 3 | + * Šarūnas Gliebus <ssharunas@yahoo.co.uk> | |
| 4 | + */ | |
| 5 | + | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates['lt'] = { | |
| 8 | + days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"], | |
| 9 | + daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š"], | |
| 10 | + daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št"], | |
| 11 | + months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], | |
| 12 | + monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], | |
| 13 | + today: "Šiandien", | |
| 14 | + monthsTitle:"Mėnesiai", | |
| 15 | + clear:"Išvalyti", | |
| 16 | + weekStart: 1, | |
| 17 | + format:"yyyy-mm-dd" | |
| 18 | + }; | |
| 19 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.lv.js
0 → 100644
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +/** | |
| 2 | + * Latvian translation for bootstrap-datepicker | |
| 3 | + * Artis Avotins <artis@apit.lv> | |
| 4 | + */ | |
| 5 | + | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates['lv'] = { | |
| 8 | + days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"], | |
| 9 | + daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S"], | |
| 10 | + daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se"], | |
| 11 | + months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], | |
| 12 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec"], | |
| 13 | + today: "Šodien", | |
| 14 | + weekStart: 1 | |
| 15 | + }; | |
| 16 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.me.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Montenegrin translation for bootstrap-datepicker | |
| 3 | + * Miodrag Nikač <miodrag@restartit.me> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['me'] = { | |
| 7 | + days: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"], | |
| 8 | + daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"], | |
| 9 | + daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su"], | |
| 10 | + months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], | |
| 12 | + today: "Danas", | |
| 13 | + weekStart: 1, | |
| 14 | + clear: "Izbriši", | |
| 15 | + format: "dd.mm.yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.mk.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Macedonian translation for bootstrap-datepicker | |
| 3 | + * Marko Aleksic <psybaron@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['mk'] = { | |
| 7 | + days: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"], | |
| 8 | + daysShort: ["Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб"], | |
| 9 | + daysMin: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са"], | |
| 10 | + months: ["Јануари", "Февруари", "Март", "Април", "Мај", "Јуни", "Јули", "Август", "Септември", "Октомври", "Ноември", "Декември"], | |
| 11 | + monthsShort: ["Јан", "Фев", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Ное", "Дек"], | |
| 12 | + today: "Денес", | |
| 13 | + format: "dd.mm.yyyy" | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.mn.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Mongolian translation for bootstrap-datepicker | |
| 3 | + * Andrey Torsunov <andrey.torsunov@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['mn'] = { | |
| 7 | + days: ["Ням", "Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба"], | |
| 8 | + daysShort: ["Ням", "Дав", "Мяг", "Лха", "Пүр", "Баа", "Бям"], | |
| 9 | + daysMin: ["Ня", "Да", "Мя", "Лх", "Пү", "Ба", "Бя"], | |
| 10 | + months: ["Хулгана", "Үхэр", "Бар", "Туулай", "Луу", "Могой", "Морь", "Хонь", "Бич", "Тахиа", "Нохой", "Гахай"], | |
| 11 | + monthsShort: ["Хул", "Үхэ", "Бар", "Туу", "Луу", "Мог", "Мор", "Хон", "Бич", "Тах", "Нох", "Гах"], | |
| 12 | + today: "Өнөөдөр", | |
| 13 | + clear: "Тодорхой", | |
| 14 | + format: "yyyy.mm.dd", | |
| 15 | + weekStart: 1 | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ms.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Malay translation for bootstrap-datepicker | |
| 3 | + * Ateman Faiz <noorulfaiz@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ms'] = { | |
| 7 | + days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu"], | |
| 8 | + daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"], | |
| 9 | + daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa"], | |
| 10 | + months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], | |
| 12 | + today: "Hari Ini", | |
| 13 | + clear: "Bersihkan" | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.nb.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Norwegian (bokmål) translation for bootstrap-datepicker | |
| 3 | + * Fredrik Sundmyhr <http://github.com/fsundmyhr> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['nb'] = { | |
| 7 | + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], | |
| 8 | + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"], | |
| 9 | + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"], | |
| 10 | + months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], | |
| 12 | + today: "I Dag", | |
| 13 | + format: "dd.mm.yyyy" | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.nl-be.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Belgium-Dutch translation for bootstrap-datepicker | |
| 3 | + * Julien Poulin <poulin_julien@hotmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['nl-BE'] = { | |
| 7 | + days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"], | |
| 8 | + daysShort: ["zo", "ma", "di", "wo", "do", "vr", "za"], | |
| 9 | + daysMin: ["zo", "ma", "di", "wo", "do", "vr", "za"], | |
| 10 | + months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"], | |
| 11 | + monthsShort: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"], | |
| 12 | + today: "Vandaag", | |
| 13 | + monthsTitle: "Maanden", | |
| 14 | + clear: "Leegmaken", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.nl.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Dutch translation for bootstrap-datepicker | |
| 3 | + * Reinier Goltstein <mrgoltstein@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['nl'] = { | |
| 7 | + days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"], | |
| 8 | + daysShort: ["zo", "ma", "di", "wo", "do", "vr", "za"], | |
| 9 | + daysMin: ["zo", "ma", "di", "wo", "do", "vr", "za"], | |
| 10 | + months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"], | |
| 11 | + monthsShort: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"], | |
| 12 | + today: "Vandaag", | |
| 13 | + monthsTitle: "Maanden", | |
| 14 | + clear: "Wissen", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd-mm-yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.no.js
0 → 100644
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +/** | |
| 2 | + * Norwegian translation for bootstrap-datepicker | |
| 3 | + **/ | |
| 4 | +;(function($){ | |
| 5 | + $.fn.datepicker.dates['no'] = { | |
| 6 | + days: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'], | |
| 7 | + daysShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'], | |
| 8 | + daysMin: ['Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø'], | |
| 9 | + months: ['Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'], | |
| 10 | + monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], | |
| 11 | + today: 'I dag', | |
| 12 | + clear: 'Nullstill', | |
| 13 | + weekStart: 1, | |
| 14 | + format: 'dd.mm.yyyy' | |
| 15 | + }; | |
| 16 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.oc.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Occitan translation for bootstrap-datepicker | |
| 3 | + */ | |
| 4 | +;(function($){ | |
| 5 | + $.fn.datepicker.dates['oc'] = { | |
| 6 | + days: ["Dimenge", "Diluns", "Dimars", "Dimècres", "Dijòus", "Divendres", "Dissabte"], | |
| 7 | + daysShort: ["Dim", "Dil", "Dmr", "Dmc", "Dij", "Div", "Dis"], | |
| 8 | + daysMin: ["dg", "dl", "dr", "dc", "dj", "dv", "ds"], | |
| 9 | + months: ["Genièr", "Febrièr", "Març", "Abrial", "Mai", "Junh", "Julhet", "Agost", "Setembre", "Octobre", "Novembre", "Decembre"], | |
| 10 | + monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Dec"], | |
| 11 | + today: "Uèi", | |
| 12 | + monthsTitle: "Meses", | |
| 13 | + clear: "Escafar", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "dd/mm/yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.pl.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Polish translation for bootstrap-datepicker | |
| 3 | + * Robert <rtpm@gazeta.pl> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['pl'] = { | |
| 7 | + days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"], | |
| 8 | + daysShort: ["Niedz.", "Pon.", "Wt.", "Śr.", "Czw.", "Piąt.", "Sob."], | |
| 9 | + daysMin: ["Ndz.", "Pn.", "Wt.", "Śr.", "Czw.", "Pt.", "Sob."], | |
| 10 | + months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], | |
| 11 | + monthsShort: ["Sty.", "Lut.", "Mar.", "Kwi.", "Maj", "Cze.", "Lip.", "Sie.", "Wrz.", "Paź.", "Lis.", "Gru."], | |
| 12 | + today: "Dzisiaj", | |
| 13 | + weekStart: 1, | |
| 14 | + clear: "Wyczyść", | |
| 15 | + format: "dd.mm.yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.pt-br.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Brazilian translation for bootstrap-datepicker | |
| 3 | + * Cauan Cabral <cauan@radig.com.br> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['pt-BR'] = { | |
| 7 | + days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], | |
| 8 | + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], | |
| 9 | + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa"], | |
| 10 | + months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], | |
| 11 | + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], | |
| 12 | + today: "Hoje", | |
| 13 | + monthsTitle: "Meses", | |
| 14 | + clear: "Limpar", | |
| 15 | + format: "dd/mm/yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.pt.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Portuguese translation for bootstrap-datepicker | |
| 3 | + * Original code: Cauan Cabral <cauan@radig.com.br> | |
| 4 | + * Tiago Melo <tiago.blackcode@gmail.com> | |
| 5 | + */ | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates['pt'] = { | |
| 8 | + days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], | |
| 9 | + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], | |
| 10 | + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa"], | |
| 11 | + months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], | |
| 12 | + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], | |
| 13 | + today: "Hoje", | |
| 14 | + monthsTitle: "Meses", | |
| 15 | + clear: "Limpar", | |
| 16 | + format: "dd/mm/yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ro.js
0 → 100644
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +/** | |
| 2 | + * Romanian translation for bootstrap-datepicker | |
| 3 | + * Cristian Vasile <cristi.mie@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ro'] = { | |
| 7 | + days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"], | |
| 8 | + daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm"], | |
| 9 | + daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"], | |
| 10 | + months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], | |
| 11 | + monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], | |
| 12 | + today: "Astăzi", | |
| 13 | + clear: "Șterge", | |
| 14 | + weekStart: 1 | |
| 15 | + }; | |
| 16 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.rs-latin.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Serbian latin translation for bootstrap-datepicker | |
| 3 | + * Bojan Milosavlević <milboj@gmail.com> | |
| 4 | + * | |
| 5 | + * * DEPRECATED: This language code 'rs' is deprecated (invalid serbian language code) and will be removed in 2.0. Use the 'sr' language code as an replacement | |
| 6 | + */ | |
| 7 | +;(function($){ | |
| 8 | + $.fn.datepicker.dates['rs-latin'] = { | |
| 9 | + days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"], | |
| 10 | + daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"], | |
| 11 | + daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"], | |
| 12 | + months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], | |
| 13 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], | |
| 14 | + today: "Danas", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd.mm.yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.rs.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Serbian cyrillic translation for bootstrap-datepicker | |
| 3 | + * Bojan Milosavlević <milboj@gmail.com> | |
| 4 | + * | |
| 5 | + * DEPRECATED: This language code 'rs' is deprecated (invalid serbian language code) and will be removed in 2.0. Use the 'sr' language code as an replacement | |
| 6 | + */ | |
| 7 | +;(function($){ | |
| 8 | + $.fn.datepicker.dates['rs'] = { | |
| 9 | + days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"], | |
| 10 | + daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб"], | |
| 11 | + daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су"], | |
| 12 | + months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], | |
| 13 | + monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], | |
| 14 | + today: "Данас", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "dd.mm.yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.ru.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Russian translation for bootstrap-datepicker | |
| 3 | + * Victor Taranenko <darwin@snowdale.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['ru'] = { | |
| 7 | + days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"], | |
| 8 | + daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"], | |
| 9 | + daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"], | |
| 10 | + months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], | |
| 11 | + monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], | |
| 12 | + today: "Сегодня", | |
| 13 | + clear: "Очистить", | |
| 14 | + format: "dd.mm.yyyy", | |
| 15 | + weekStart: 1 | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.si.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Sinhala translation for bootstrap-datepicker | |
| 3 | + * Chanaka Fernando <chanaka.fernando@hotmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['si'] = { | |
| 7 | + days: ["ඉරිදා", "සඳුදා", "අඟහරුවාදා", "බදාදා", "බ්රහස්පතින්දා", "සිකුරාදා", "සෙනසුරාදා"], | |
| 8 | + daysShort: ["ඉරි", "සඳු", "අඟ", "බදා", "බ්රහ", "සිකු", "සෙන"], | |
| 9 | + daysMin: ["ඉ", "ස", "අ", "බ", "බ්ර", "සි", "සෙ"], | |
| 10 | + months: ["ජනවාරි", "පෙබරවාරි", "මාර්තු", "අප්රේල්", "මැයි", "ජුනි", "ජූලි", "අගෝස්තු", "සැප්තැම්බර්", "ඔක්තෝබර්", "නොවැම්බර්", "දෙසැම්බර්"], | |
| 11 | + monthsShort: ["ජන", "පෙබ", "මාර්", "අප්රේ", "මැයි", "ජුනි", "ජූලි", "අගෝ", "සැප්", "ඔක්", "නොවැ", "දෙසැ"], | |
| 12 | + today: "අද", | |
| 13 | + monthsTitle: "මාස", | |
| 14 | + clear: "මකන්න", | |
| 15 | + weekStart: 0, | |
| 16 | + format: "yyyy-mm-dd" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.sk.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Slovak translation for bootstrap-datepicker | |
| 3 | + * Marek Lichtner <marek@licht.sk> | |
| 4 | + * Fixes by Michal Remiš <michal.remis@gmail.com> | |
| 5 | + */ | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates["sk"] = { | |
| 8 | + days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"], | |
| 9 | + daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob"], | |
| 10 | + daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So"], | |
| 11 | + months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], | |
| 12 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], | |
| 13 | + today: "Dnes", | |
| 14 | + clear: "Vymazať", | |
| 15 | + weekStart: 1, | |
| 16 | + format: "d.m.yyyy" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.sl.js
0 → 100644
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +/** | |
| 2 | + * Slovene translation for bootstrap-datepicker | |
| 3 | + * Gregor Rudolf <gregor.rudolf@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['sl'] = { | |
| 7 | + days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"], | |
| 8 | + daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"], | |
| 9 | + daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So"], | |
| 10 | + months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], | |
| 12 | + today: "Danes" | |
| 13 | + }; | |
| 14 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.sq.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Albanian translation for bootstrap-datepicker | |
| 3 | + * Tomor Pupovci <http://www.github.com/ttomor> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['sq'] = { | |
| 7 | + days: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"], | |
| 8 | + daysShort: ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"], | |
| 9 | + daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht"], | |
| 10 | + months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"], | |
| 11 | + monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"], | |
| 12 | + today: "Sot" | |
| 13 | + }; | |
| 14 | +}(jQuery)); | |
| 15 | + | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.sr-latin.js
0 → 100644
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +/** | |
| 2 | + * Serbian latin translation for bootstrap-datepicker | |
| 3 | + * Bojan Milosavlević <milboj@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['sr-latin'] = { | |
| 7 | + days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"], | |
| 8 | + daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub"], | |
| 9 | + daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su"], | |
| 10 | + months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], | |
| 12 | + today: "Danas", | |
| 13 | + weekStart: 1, | |
| 14 | + format: "dd.mm.yyyy" | |
| 15 | + }; | |
| 16 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.sr.js
0 → 100644
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +/** | |
| 2 | + * Serbian cyrillic translation for bootstrap-datepicker | |
| 3 | + * Bojan Milosavlević <milboj@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['sr'] = { | |
| 7 | + days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"], | |
| 8 | + daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб"], | |
| 9 | + daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су"], | |
| 10 | + months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], | |
| 11 | + monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], | |
| 12 | + today: "Данас", | |
| 13 | + weekStart: 1, | |
| 14 | + format: "dd.mm.yyyy" | |
| 15 | + }; | |
| 16 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.sv.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Swedish translation for bootstrap-datepicker | |
| 3 | + * Patrik Ragnarsson <patrik@starkast.net> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['sv'] = { | |
| 7 | + days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"], | |
| 8 | + daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"], | |
| 9 | + daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö"], | |
| 10 | + months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], | |
| 11 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], | |
| 12 | + today: "Idag", | |
| 13 | + format: "yyyy-mm-dd", | |
| 14 | + weekStart: 1, | |
| 15 | + clear: "Rensa" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.sw.js
0 → 100644
| ... | ... | @@ -0,0 +1,15 @@ |
| 1 | +/** | |
| 2 | + * Swahili translation for bootstrap-datepicker | |
| 3 | + * Edwin Mugendi <https://github.com/edwinmugendi> | |
| 4 | + * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku | |
| 5 | + */ | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates['sw'] = { | |
| 8 | + days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi"], | |
| 9 | + daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1"], | |
| 10 | + daysMin: ["2", "3", "4", "5", "A", "I", "1"], | |
| 11 | + months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], | |
| 12 | + monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], | |
| 13 | + today: "Leo" | |
| 14 | + }; | |
| 15 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.th.js
0 → 100644
| ... | ... | @@ -0,0 +1,14 @@ |
| 1 | +/** | |
| 2 | + * Thai translation for bootstrap-datepicker | |
| 3 | + * Suchau Jiraprapot <seroz24@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['th'] = { | |
| 7 | + days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], | |
| 8 | + daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], | |
| 9 | + daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], | |
| 10 | + months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], | |
| 11 | + monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], | |
| 12 | + today: "วันนี้" | |
| 13 | + }; | |
| 14 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.tr.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Turkish translation for bootstrap-datepicker | |
| 3 | + * Serkan Algur <kaisercrazy_2@hotmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['tr'] = { | |
| 7 | + days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"], | |
| 8 | + daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts"], | |
| 9 | + daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct"], | |
| 10 | + months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], | |
| 11 | + monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], | |
| 12 | + today: "Bugün", | |
| 13 | + clear: "Temizle", | |
| 14 | + weekStart: 1, | |
| 15 | + format: "dd.mm.yyyy" | |
| 16 | + }; | |
| 17 | +}(jQuery)); | |
| 18 | + | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.uk.js
0 → 100644
| ... | ... | @@ -0,0 +1,17 @@ |
| 1 | +/** | |
| 2 | + * Ukrainian translation for bootstrap-datepicker | |
| 3 | + * Igor Polynets | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['uk'] = { | |
| 7 | + days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"], | |
| 8 | + daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"], | |
| 9 | + daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"], | |
| 10 | + months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], | |
| 11 | + monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], | |
| 12 | + today: "Сьогодні", | |
| 13 | + clear: "Очистити", | |
| 14 | + format: "dd.mm.yyyy", | |
| 15 | + weekStart: 1 | |
| 16 | + }; | |
| 17 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.vi.js
0 → 100644
| ... | ... | @@ -0,0 +1,16 @@ |
| 1 | +/** | |
| 2 | + * Vietnamese translation for bootstrap-datepicker | |
| 3 | + * An Vo <https://github.com/anvoz/> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['vi'] = { | |
| 7 | + days: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"], | |
| 8 | + daysShort: ["CN", "Thứ 2", "Thứ 3", "Thứ 4", "Thứ 5", "Thứ 6", "Thứ 7"], | |
| 9 | + daysMin: ["CN", "T2", "T3", "T4", "T5", "T6", "T7"], | |
| 10 | + 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"], | |
| 11 | + monthsShort: ["Th1", "Th2", "Th3", "Th4", "Th5", "Th6", "Th7", "Th8", "Th9", "Th10", "Th11", "Th12"], | |
| 12 | + today: "Hôm nay", | |
| 13 | + clear: "Xóa", | |
| 14 | + format: "dd/mm/yyyy" | |
| 15 | + }; | |
| 16 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.zh-cn.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Simplified Chinese translation for bootstrap-datepicker | |
| 3 | + * Yuan Cheung <advanimal@gmail.com> | |
| 4 | + */ | |
| 5 | +;(function($){ | |
| 6 | + $.fn.datepicker.dates['zh-CN'] = { | |
| 7 | + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], | |
| 8 | + daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], | |
| 9 | + daysMin: ["日", "一", "二", "三", "四", "五", "六"], | |
| 10 | + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], | |
| 11 | + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], | |
| 12 | + today: "今日", | |
| 13 | + clear: "清除", | |
| 14 | + format: "yyyy年mm月dd日", | |
| 15 | + titleFormat: "yyyy年mm月", | |
| 16 | + weekStart: 1 | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/static/js/vendor/locales/bootstrap-datepicker.zh-tw.js
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +/** | |
| 2 | + * Traditional Chinese translation for bootstrap-datepicker | |
| 3 | + * Rung-Sheng Jang <daniel@i-trend.co.cc> | |
| 4 | + * FrankWu <frankwu100@gmail.com> Fix more appropriate use of Traditional Chinese habit | |
| 5 | + */ | |
| 6 | +;(function($){ | |
| 7 | + $.fn.datepicker.dates['zh-TW'] = { | |
| 8 | + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], | |
| 9 | + daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"], | |
| 10 | + daysMin: ["日", "一", "二", "三", "四", "五", "六"], | |
| 11 | + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], | |
| 12 | + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], | |
| 13 | + today: "今天", | |
| 14 | + format: "yyyy年mm月dd日", | |
| 15 | + weekStart: 1, | |
| 16 | + clear: "清除" | |
| 17 | + }; | |
| 18 | +}(jQuery)); | ... | ... |
core/templates/base.html
| 1 | 1 | <!DOCTYPE html> |
| 2 | 2 | |
| 3 | 3 | {% load static i18n %} |
| 4 | +{% get_current_language as LANGUAGE_CODE %} | |
| 4 | 5 | |
| 5 | 6 | <html> |
| 6 | 7 | <head> |
| ... | ... | @@ -20,7 +21,7 @@ |
| 20 | 21 | <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}"> |
| 21 | 22 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/material.min.css' %}"> |
| 22 | 23 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/ripples.min.css' %}"> |
| 23 | - <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/datepicker.css' %}"> | |
| 24 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/bootstrap-datepicker.standalone.css' %}"> | |
| 24 | 25 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/alertify.min.css' %}"> |
| 25 | 26 | <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/themes/bootstrap.css' %}"> |
| 26 | 27 | <script type="text/javascript" src="{% static 'bootstrap-3.3.7/js/bootstrap.js' %}"></script> |
| ... | ... | @@ -28,7 +29,13 @@ |
| 28 | 29 | <script type="text/javascript" src="{% static 'js/vendor/material.min.js' %}"></script> |
| 29 | 30 | <script type="text/javascript" src="{% static 'js/vendor/ripples.min.js' %}"></script> |
| 30 | 31 | <script type="text/javascript" src="{% static 'js/vendor/bootstrap-datepicker.js' %}"></script> |
| 32 | + | |
| 33 | + {% with "js/vendor/locales/bootstrap-datepicker."|add:LANGUAGE_CODE|add:".js" as locale_datepicker %} | |
| 34 | + <script type="text/javascript" src="{% static locale_datepicker %}"></script> | |
| 35 | + {% endwith %} | |
| 36 | + | |
| 31 | 37 | <script type="text/javascript" src="{% static 'js/vendor/alertify.min.js' %}"></script> |
| 38 | + <script type="text/javascript" src="{% static 'js/vendor/jscookie.js' %}"></script> | |
| 32 | 39 | |
| 33 | 40 | <!-- Font awesome --> |
| 34 | 41 | <link rel="stylesheet" type="text/css" href="{% static 'font-awesome-4.6.3/css/font-awesome.min.css' %}"> | ... | ... |
core/templates/guest.html
| 1 | -{% extends 'base.html' %} | |
| 1 | +<!DOCTYPE html> | |
| 2 | 2 | |
| 3 | +{% load static i18n %} | |
| 3 | 4 | {% load i18n custom_filters %} |
| 4 | 5 | |
| 5 | -{% block breadcrumbs %} | |
| 6 | - <div class="col-md-12"> | |
| 7 | - <form id="searchform" action="{% url 'course:manage' %}" method="get" accept-charset="utf-8"> | |
| 8 | - <div class="input-group"> | |
| 9 | - <div class="form-group is-empty"> | |
| 10 | - <input type="search" class="form-control" placeholder="Search Courses" name="q" id="searchbox"></div> | |
| 11 | - <span class="input-group-btn input-group-sm"> | |
| 12 | - <button type="button" class="btn btn-fab btn-fab-mini"> | |
| 13 | - <i class="material-icons">search</i> | |
| 14 | - </button> | |
| 15 | - </span> | |
| 16 | - </div> | |
| 17 | - </form> | |
| 18 | - </div> | |
| 19 | - | |
| 20 | - <div class="col-md-12"> | |
| 21 | - <div class="btn-group btn-group-justified btn-group-raised"> | |
| 22 | - <a href="?category=all" class="btn btn-raised btn-info">Todos</a> | |
| 23 | - {% for category_course in categorys_courses %} | |
| 24 | - <a href="?category={{category_course.name}}" class="btn btn-raised btn-primary">{{category_course.name}}</a> | |
| 25 | - {% endfor %} | |
| 26 | - </div> | |
| 27 | - </div> | |
| 6 | +<html> | |
| 7 | +<head> | |
| 8 | + <title>{{ title }}</title> | |
| 9 | + | |
| 10 | + <meta http-equiv="Cache-Control" content="no-cache, no-store" /> | |
| 11 | + <link href="{% static 'img/favicon.ico' %}" rel="shortcut icon" /> | |
| 12 | + <!-- Roboto font --> | |
| 13 | + <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:300,400,500,700" type="text/css"> | |
| 14 | + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> | |
| 15 | + | |
| 16 | + <!-- jQuery & jQuery UI --> | |
| 17 | + <script type="text/javascript" src="{% static 'js/vendor/jquery-3.1.0.min.js' %}"></script> | |
| 18 | + <script type="text/javascript" src="{% static 'js/vendor/jquery-ui.js' %}"></script> | |
| 19 | + | |
| 20 | + <!-- Bootstrap and themes (material) --> | |
| 21 | + <link rel="stylesheet" type="text/css" href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}"> | |
| 22 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/material.min.css' %}"> | |
| 23 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/ripples.min.css' %}"> | |
| 24 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/datepicker.css' %}"> | |
| 25 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/alertify.min.css' %}"> | |
| 26 | + <link rel="stylesheet" type="text/css" href="{% static 'css/vendor/alertifyjs/themes/bootstrap.css' %}"> | |
| 27 | + <script type="text/javascript" src="{% static 'bootstrap-3.3.7/js/bootstrap.js' %}"></script> | |
| 28 | + <script type="text/javascript" src="{% static 'js/vendor/bootstrap-acessibility.min.js' %}"></script> | |
| 29 | + <script type="text/javascript" src="{% static 'js/vendor/material.min.js' %}"></script> | |
| 30 | + <script type="text/javascript" src="{% static 'js/vendor/ripples.min.js' %}"></script> | |
| 31 | + <script type="text/javascript" src="{% static 'js/vendor/bootstrap-datepicker.js' %}"></script> | |
| 32 | + <script type="text/javascript" src="{% static 'js/vendor/alertify.min.js' %}"></script> | |
| 33 | + | |
| 34 | + <!-- Font awesome --> | |
| 35 | + <link rel="stylesheet" type="text/css" href="{% static 'font-awesome-4.6.3/css/font-awesome.min.css' %}"> | |
| 36 | + | |
| 37 | + <!-- Custom styles --> | |
| 38 | + <link rel="stylesheet" type="text/css" href="{% static 'css/base/amadeus.css' %}"> | |
| 39 | + | |
| 40 | + <!-- Init material Bootstrap --> | |
| 41 | + <script type="text/javascript">$.material.init()</script> | |
| 42 | + | |
| 43 | + <!--Javascript block for specific-app ones --> | |
| 44 | + <script src="{% static 'js/base/amadeus.js' %}"></script> | |
| 45 | + {% block style %} | |
| 46 | + {% endblock %} | |
| 47 | + {% block javascript %} | |
| 48 | + <script type="text/javascript" src="{% static 'js/course.js' %}"></script> | |
| 49 | + {% endblock %} | |
| 50 | +</head> | |
| 51 | +<body> | |
| 52 | + {% block nav %} | |
| 53 | + <div class="navbar navbar-default"> | |
| 54 | + <div class="navbar-header"> | |
| 55 | + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse"> | |
| 56 | + <span class="icon-bar"></span> | |
| 57 | + <span class="icon-bar"></span> | |
| 58 | + <span class="icon-bar"></span> | |
| 59 | + </button> | |
| 60 | + <a class="navbar-brand" href="{% url 'app:index' %}"><img class="logo" src="{% static 'img/topo-amadeus-white.png' %}" alt="Logo"/></a> | |
| 61 | + </div> | |
| 62 | + <div class="navbar-collapse collapse navbar-responsive-collapse"> | |
| 63 | + <ul class="nav navbar-nav navbar-right notifications"> | |
| 64 | + <li class="" data-toggle="tooltip" data-placement="bottom" title data-original-title="notifications"> | |
| 65 | + <a class="dropdown-toggle" data-toggle="dropdown"> <span id="notification-count" class="badge notification-count">{{notifications.count}}</span><i class="fa fa-bell" aria-hidden="true"></i></a> | |
| 66 | + <ul id="notification-dropdown" class="dropdown-menu"> | |
| 67 | + <li class="dropdown-header">Notifications</li> | |
| 68 | + {% include "notifications.html" %} | |
| 69 | + | |
| 70 | + <li> | |
| 71 | + <a onclick="getNotifications(5)"> | |
| 72 | + <div id="notification-see-more" class="list-group-item"> | |
| 73 | + <div class="row-content"> | |
| 74 | + <p class="list-group-item-text">See More</p> | |
| 75 | + </div> | |
| 76 | + </a> | |
| 77 | + </li> | |
| 78 | + </ul> | |
| 79 | + </li> | |
| 80 | + | |
| 81 | + <li data-toggle="tooltip" data-placement="bottom" title data-original-title="{% trans 'messages' %}"> <a href="#"><i class="fa fa-comments" aria-hidden="true"></i></a> </li> | |
| 82 | + <li > <a class="link" href="{% url 'app:index' %}">{{ user }}</a></li> | |
| 83 | + | |
| 84 | + </ul> | |
| 85 | + </div> | |
| 86 | + </div> | |
| 87 | + {% endblock %} | |
| 88 | + <div class="container-fluid"> | |
| 89 | + <div class="row"> | |
| 90 | + | |
| 91 | + <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xl-2"> | |
| 92 | + {% block sidebar %} | |
| 93 | + <div class="panel panel-primary navigation"> | |
| 94 | + <div class="panel-heading"> | |
| 95 | + <h4>Menu</h4> | |
| 96 | + </div> | |
| 97 | + <div class="panel-body"> | |
| 98 | + <ul class="nav nav-pills nav-stacked"> | |
| 99 | + <li><a href="{% url 'core:register' %}">{% trans 'Register' %}</a></li> | |
| 100 | + </ul> | |
| 101 | + </div> | |
| 102 | + </div> | |
| 103 | + {% endblock %} | |
| 104 | + | |
| 105 | + </div> | |
| 106 | + <div class="col-xs-10 col-sm-10 col-md-10 col-lg-10 col-xl-10"> | |
| 107 | + {% block breadcrumbs %} | |
| 108 | + <div class="col-md-12"> | |
| 109 | + <form id="searchform" action="{% url 'course:manage' %}" method="get" accept-charset="utf-8"> | |
| 110 | + <div class="input-group"> | |
| 111 | + <div class="form-group is-empty"> | |
| 112 | + <input type="search" class="form-control" placeholder="Search Courses" name="q" id="searchbox"></div> | |
| 113 | + <span class="input-group-btn input-group-sm"> | |
| 114 | + <button type="button" class="btn btn-fab btn-fab-mini"> | |
| 115 | + <i class="material-icons">search</i> | |
| 116 | + </button> | |
| 117 | + </span> | |
| 118 | + </div> | |
| 119 | + </form> | |
| 120 | + </div> | |
| 28 | 121 | |
| 29 | -{% endblock %} | |
| 30 | - | |
| 31 | - | |
| 32 | -{% block content %} | |
| 33 | - | |
| 34 | - {% for course in courses %} | |
| 35 | - <div class="panel panel-info"> | |
| 36 | - <div class="panel-heading"> | |
| 37 | - <h3 class="panel-title"> | |
| 38 | - {{course.name}} | |
| 39 | - {% if user|show_course_subscribe:course %} | |
| 40 | - <div class="pull-right" style="margin-top:-15px"> | |
| 41 | - <a onclick="subscribe($(this), '{% url 'course:subscribe' course.slug %}' , '{% trans 'Are you sure you want to subscribe to this subject?' %}')" class="btn btn-sm btn-primary btn-raised">{% trans 'Subscribe' %}</a> | |
| 42 | - </div> | |
| 43 | - {% endif %} | |
| 44 | - </h3> | |
| 45 | - </div> | |
| 46 | - | |
| 47 | - <div class="panel-body"> | |
| 48 | - <p><b>Course Name: </b>{{course.name}}</p> | |
| 49 | - <p><b>Begining: </b>{{course.init_date}}</p> | |
| 50 | - <p><b>End: </b>{{course.end_date}}</p> | |
| 51 | - <p><b>Professor: </b>{{course.professors.name}}</p> | |
| 52 | - <p> | |
| 53 | - <b>Description:</b> | |
| 54 | - <i> | |
| 55 | - {{course.content}} | |
| 56 | - </i> | |
| 57 | - </p> | |
| 58 | - </div> | |
| 59 | - </div> | |
| 60 | - {% endfor %} | |
| 61 | -{% endblock %} | |
| 62 | - | |
| 63 | - | |
| 64 | - | |
| 65 | -{% comment %} | |
| 66 | - | |
| 67 | - | |
| 68 | - | |
| 69 | - | |
| 70 | -</fieldset> | |
| 71 | - <div class="col-md-12"> | |
| 72 | - {% if courses|length > 0 %} | |
| 73 | - {% if request.GET.category == 'all' or none or request.GET.category == '' %} | |
| 74 | - {% for course in list_courses %} | |
| 75 | - <div class="panel-group ui-accordion ui-widget ui-helper-reset ui-sortable" id="accordion" role="tablist" aria-multiselectable="false"> | |
| 76 | - <div class="group"> | |
| 77 | - <div class="panel panel-info"> | |
| 78 | - <div class="panel-heading" role="tab"> | |
| 79 | - <div class="row"> | |
| 80 | - <div class="col-xs-9 col-md-9 titleTopic"> | |
| 81 | - <a role="button" data-toggle="collapse" data-parent="#accordion" href=".collapseOne" aria-expanded="false" aria-controls="collapseOne" class="collapsed"> | |
| 82 | - <h4 style="color:white">{{course.name}}</h4> | |
| 83 | - </a> | |
| 84 | - </div> | |
| 85 | - </div> | |
| 86 | - </div> | |
| 87 | - <div class="panel-collapse collapseOne collapse in" role="tabpanel" aria-labelledby="headingOne" aria-expanded="true" aria-hidden="false" tabindex="0"> | |
| 88 | - <div class="panel-body"> | |
| 89 | - <p><b>Course Name: </b>{{course.name}}</p> | |
| 90 | - <p><b>Duration (in semesters): </b>09</p> | |
| 91 | - <p><b>Coordinator: </b>{{course.professors}}</p> | |
| 92 | - <p> | |
| 93 | - <b>Description:</b> | |
| 94 | - <i> | |
| 95 | - {{course.description}} | |
| 96 | - </i> | |
| 97 | - </p> | |
| 98 | - <a href="{% url 'course:view' course.slug %}" class="btn btn-raised btn-default center-block">'View Course<div class="ripple-container"></div></a> | |
| 99 | - </div> | |
| 100 | - </div> | |
| 101 | - </div> | |
| 122 | + <div class="col-md-12"> | |
| 123 | + <div class="btn-group btn-group-justified btn-group-raised"> | |
| 124 | + <a href="?category=all" class="btn btn-raised btn-info">Todos</a> | |
| 125 | + {% for category in categories %} | |
| 126 | + <a href="?category={{category.name}}" class="btn btn-raised btn-primary">{{category.name}}</a> | |
| 127 | + {% endfor %} | |
| 102 | 128 | </div> |
| 103 | 129 | </div> |
| 104 | - {% endfor %} | |
| 105 | - {% else %} | |
| 106 | - {% for course in courses_category %} | |
| 107 | - {% if course.category.name == request.GET.category %} | |
| 108 | - <!-- Put your content here! --> | |
| 109 | - <div class="panel-group ui-accordion ui-widget ui-helper-reset ui-sortable" id="accordion" role="tablist" aria-multiselectable="false"> | |
| 110 | - <div class="group"> | |
| 111 | - <div class="panel panel-info"> | |
| 112 | - <div class="panel-heading" role="tab"> | |
| 113 | - <div class="row"> | |
| 114 | - <div class="col-xs-9 col-md-9 titleTopic"> | |
| 115 | - <a role="button" data-toggle="collapse" data-parent="#accordion" href=".collapseOne" aria-expanded="false" aria-controls="collapseOne" class="collapsed"> | |
| 116 | - <h4 style="color:white">{{course.name}}</h4> | |
| 117 | - </a> | |
| 118 | - </div> | |
| 119 | - </div> | |
| 120 | - </div> | |
| 121 | - <div class="panel-collapse collapseOne collapse in" role="tabpanel" aria-labelledby="headingOne" aria-expanded="true" aria-hidden="false" tabindex="0"> | |
| 122 | - <div class="panel-body"> | |
| 123 | - <p><b>Course Name: </b>{{course.name}}</p> | |
| 124 | - <p><b>Duration (in semesters): </b>09</p> | |
| 125 | - <p><b>Coordinator: </b>{{course.professors}}</p> | |
| 126 | - <p> | |
| 127 | - <b>Description:</b> | |
| 128 | - <i> | |
| 129 | - {{course.description}} | |
| 130 | - </i> | |
| 131 | - </p> | |
| 132 | - <a href="{% url 'course:view' course.slug %}" class="btn btn-raised btn-default center-block">View Course<div class="ripple-container"></div></a> | |
| 133 | - </div> | |
| 134 | - </div> | |
| 130 | + | |
| 131 | + {% endblock %} | |
| 132 | + {% block render_breadcrumbs %}{% endblock %} | |
| 133 | + <div> | |
| 134 | + </div> | |
| 135 | + <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 col-xl-12"> | |
| 136 | + {% block content %} | |
| 137 | + {% for course in courses %} | |
| 138 | + <div class="panel panel-info panel_{{ course.id }}"> | |
| 139 | + <div class="panel-heading"> | |
| 140 | + <a href="{{ course.get_absolute_url }}" class="panel-title">{{course.name}}</a> | |
| 141 | + {% if user|show_course_subscribe:course %} | |
| 142 | + <a onclick="subscribe($(this), '{% url 'course:subscribe' course.slug %}', {{ course.id}}, '{% trans 'Are you sure you want to subscribe to this course?' %}')" class="btn btn-sm btn-primary btn-raised pull-right" style="margin-top:-4px">{% trans 'Subscribe' %}</a> | |
| 143 | + {% endif %} | |
| 144 | + </div> | |
| 145 | + | |
| 146 | + <div class="panel-body"> | |
| 147 | + <p><b>Course Name: </b>{{course.name}}</p> | |
| 148 | + <p><b>Begining: </b>{{course.init_date}}</p> | |
| 149 | + <p><b>End: </b>{{course.end_date}}</p> | |
| 150 | + <p><b>Professor: </b>{{course.professors.name}}</p> | |
| 151 | + <p> | |
| 152 | + <b>Description:</b> | |
| 153 | + <i> | |
| 154 | + {{course.content}} | |
| 155 | + </i> | |
| 156 | + </p> | |
| 157 | + </div> | |
| 135 | 158 | </div> |
| 136 | - </div> | |
| 137 | - </div> | |
| 138 | - {% endif %} | |
| 139 | - {% endfor %} | |
| 140 | - {% endif %} | |
| 141 | - {% else %} | |
| 142 | - No courses found | |
| 143 | - {% endif %} | |
| 144 | - <div class="group"> | |
| 145 | - <div class="modal" id="removeCourse"> | |
| 146 | - <div class="modal-dialog"> | |
| 147 | - <div class="modal-content"> | |
| 148 | - <div class="modal-header"> | |
| 149 | - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button> | |
| 150 | - <h4 class="modal-title"></h4> | |
| 151 | - </div> | |
| 152 | - <div class="modal-body"> | |
| 153 | - <p>Delete your course?</p> | |
| 154 | - </div> | |
| 155 | - <div class="modal-footer"> | |
| 156 | - | |
| 157 | - <a href="http://127.0.0.1:8080/html/screens/users/profile_user.html" target="_self"><button type="button" class="btn btn-primary">Confirm</button></a> | |
| 158 | - | |
| 159 | - </div> | |
| 160 | - </div> | |
| 161 | - </div> | |
| 159 | + {% endfor %} | |
| 160 | + | |
| 161 | + {% endblock %} | |
| 162 | 162 | </div> |
| 163 | 163 | </div> |
| 164 | 164 | </div> |
| 165 | - <div class="col-md-12"> | |
| 166 | - <nav aria-label="Page navigation"> | |
| 167 | - <ul class="pagination"> | |
| 168 | - {% if page_obj.has_previous %} | |
| 169 | - <li> | |
| 170 | - <a href="?page={{ page_obj.previous_page_number }}"><span><<</span></a> | |
| 171 | - </li> | |
| 172 | - {% endif %} | |
| 173 | - {% for page_number in paginator.page_range %} | |
| 174 | - <li{% if page_obj.number == page_number %} class="active"{% endif %}> | |
| 175 | - <a href="?page={{ page_number }}">{{ page_number }}</a> | |
| 176 | - </li> | |
| 177 | - {% endfor %} | |
| 178 | - {% if page_obj.has_next %} | |
| 179 | - <li> | |
| 180 | - <a href="?page={{ page_obj.next_page_number }}"><span>>></span></a> | |
| 181 | - </li> | |
| 182 | - {% endif %} | |
| 183 | - </ul> | |
| 184 | - </nav> | |
| 185 | - </div> | |
| 186 | -{% endcomment %} | |
| 165 | + <script src="{% static 'js/main.js' %}"></script> | |
| 166 | + <script type="text/javascript" src="{% static 'js/topic_editation_presentation.js' %}"></script> | |
| 167 | + {% block script_file %} | |
| 168 | + | |
| 169 | + {% endblock script_file %} | |
| 170 | +</body> | |
| 171 | + | |
| 172 | +</html> | |
| 187 | 173 | \ No newline at end of file | ... | ... |
core/templates/notifications.html
| ... | ... | @@ -5,8 +5,13 @@ |
| 5 | 5 | <li> |
| 6 | 6 | <a href="{% url 'core:notification_read' notification.id %}"><div class="list-group-item"> |
| 7 | 7 | <div class="row-picture"> |
| 8 | - <img class="circle" src="http://lorempixel.com/56/56/people/1" alt="icon"> | |
| 9 | - <div class="least-content pull-right">{{ notification.datetime }}</div> | |
| 8 | + {% if notification.actor.image %} | |
| 9 | + <img class="circle user-notification-img" src="{{ notification.actor.image.url }}" alt="icon"> | |
| 10 | + {% else %} | |
| 11 | + <img class="circle user-notification-img" src="{{ notification.actor.image_url }}" alt="icon"> | |
| 12 | + {% endif %} | |
| 13 | + | |
| 14 | + <div class="least-content "> {{ notification.datetime|timesince }} </div> | |
| 10 | 15 | </div> |
| 11 | 16 | <div class="row-content"> |
| 12 | 17 | <p class="list-group-item-text">{{ notification.message }}</p> |
| ... | ... | @@ -19,11 +24,11 @@ |
| 19 | 24 | <a href="{% url 'core:notification_read' notification.id %}"> |
| 20 | 25 | <div class="list-group-item"> |
| 21 | 26 | <div class="row-action-primary"> |
| 22 | - <i class="material-icons">folder</i> | |
| 27 | + <i class="material-icons"></i> | |
| 23 | 28 | </div> |
| 24 | 29 | <div class="row-content"> |
| 25 | 30 | |
| 26 | - <div class="least-content pull-right">{{ notification.datetime }}</div> | |
| 31 | + <div class="least-content pull-right">{{ notification.datetime|timesince }}</div> | |
| 27 | 32 | |
| 28 | 33 | <p class="list-group-item-text">{{ notification.message }}</p> |
| 29 | 34 | </div> | ... | ... |
core/templates/registration/passwor_reset_done.html
| 1 | 1 | {% extends "index.html" %} |
| 2 | 2 | {% load i18n static %} |
| 3 | +{% block content%} | |
| 3 | 4 | |
| 4 | -{% block content %} | |
| 5 | - | |
| 6 | - <div class="row"> | |
| 7 | - <div class="col-md-4 col-md-offset-4 col-xs-4 col-xs-offset-4 col-sm-4 col-sm-offset-4 col-lg-4 col-lg-offset-4 col-xl-4 col-xl-offset-4"> | |
| 8 | - <div class="row"> | |
| 9 | - <div class="col-md-offset-2 col-md-8 col-sm-offset-2 col-sm-8 col-xs-offset-2 col-xs-8 col-lg-offset-2 col-lg-8 col-xs-offset-2 col-xs-8"> | |
| 10 | - </br> | |
| 11 | - </br> | |
| 12 | - <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block " alt="logo amadeus"> | |
| 13 | - </br> | |
| 14 | - </div> | |
| 5 | +<div class="row"> | |
| 6 | + <div class="col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4 col-xs-6 col-xs-offset-4 col-lg-6 col-lg-offset-4 col-xl-6 col-xl-offset-4 "> | |
| 7 | + <div class="col-sm-8 col-sm-offset-2 col-md-8 col-md-offset-2 col-xs-8 col-xs-offset-2 col-lg-8 col-lg-offset-2 col-xl-8 col-xl-offset-2"> | |
| 8 | + <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block logo-login " alt="logo amadeus"> | |
| 15 | 9 | </div> |
| 16 | - </div> | |
| 17 | - <div class="row "> | |
| 18 | - <div class="col-lg-9 col-lg-offset-2 col-xs-9 col-xs-offset-2 col-sm-9 col-sm-offset-2 col-md-9 col-md-offset-2 col-xl-9 col-xl-offset-2"> | |
| 19 | - <div class="card"> | |
| 20 | - <div class="card-block"> | |
| 21 | - <div class="col-md-12 col-xs-12 col-sm-12 col-lg-12 col-xl-12"> | |
| 22 | - <form class="form-group " method="post" action=""> | |
| 23 | - {% csrf_token %} | |
| 24 | - <div class="form-group is-empty"> | |
| 25 | - <p>{% trans "We have sent instructions to set up your password, if an account exists with the email entered. You should receive them soon." %}</p> | |
| 26 | - <p>{% trans "If you do not receive an email, please make sure you entered the address you registered, and check the spam folder." %}</p> | |
| 27 | - </div> | |
| 28 | - </form> | |
| 10 | + </div> | |
| 11 | +</div> | |
| 12 | +<div class="row"> | |
| 13 | + <div class="col-md-8 col-md-offset-3 col-sm-10 col-sm-offset-2 col-xs-12 col-xs-offset-1 col-lg-8 col-lg-offset-3 col-xl-8 col-xl-offset-3"> | |
| 14 | + {% if success %} | |
| 15 | + <div class="alert alert-success alert-dismissible" role="alert"> | |
| 16 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | |
| 17 | + <span aria-hidden="true">×</span> | |
| 18 | + </button> | |
| 19 | + <ul> | |
| 20 | + <li>{{ success }}</li> | |
| 21 | + </ul> | |
| 22 | + </div> | |
| 23 | + {% elif danger %} | |
| 24 | + <div class="alert alert-danger alert-dismissible" role="alert"> | |
| 25 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | |
| 26 | + <span aria-hidden="true">×</span> | |
| 27 | + </button> | |
| 28 | + <ul> | |
| 29 | + <li>{{ danger }}</li> | |
| 30 | + </ul> | |
| 31 | + </div> | |
| 32 | + {% endif %} | |
| 33 | + <div class="card"> | |
| 34 | + <div class="card-block"> | |
| 35 | + <form class="form-group " method="post" action=""> | |
| 36 | + <div class="col-md-12 col-xs-12 col-lg-10 col-lg-offset-1 col-sm-12"> | |
| 37 | + {% csrf_token %} | |
| 38 | + <div class="form-group is-empty"> | |
| 39 | + <p>{% trans "We have sent instructions to set up your password, if an account exists with the email entered. You should receive them soon." %}</p> | |
| 40 | + <p>{% trans "If you do not receive an email, please make sure you entered the address you registered, and check the spam folder." %}</p> | |
| 41 | + </div> | |
| 42 | + <div class="form-group"> | |
| 43 | + <a href="{% url 'core:home' %}" class="btn btn-default btn-raised" >{% trans 'Back' %}</a> | |
| 29 | 44 | </div> |
| 30 | 45 | </div> |
| 31 | - </div> | |
| 46 | + </form> | |
| 32 | 47 | </div> |
| 48 | + </div> | |
| 33 | 49 | </div> |
| 34 | - | |
| 35 | -{% endblock %} | |
| 50 | +</div> | |
| 51 | +{% endblock content %} | ... | ... |
core/templates/registration/passwor_reset_form.html
| ... | ... | @@ -2,57 +2,53 @@ |
| 2 | 2 | {% load i18n static %} |
| 3 | 3 | {% block content%} |
| 4 | 4 | |
| 5 | - <div class="row"> | |
| 6 | - <div class="col-md-4 col-md-offset-4 col-xs-4 col-xs-offset-4 col-sm-4 col-sm-offset-4 col-lg-4 col-lg-offset-4 col-xl-4 col-xl-offset-4"> | |
| 7 | - <div class="row"> | |
| 8 | - <div class="col-md-offset-2 col-md-8 col-sm-offset-2 col-sm-8 col-xs-offset-2 col-xs-8 col-lg-offset-2 col-lg-8 col-xs-offset-2 col-xs-8"> | |
| 9 | - </br> | |
| 10 | - </br> | |
| 11 | - <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block " alt="logo amadeus"> | |
| 12 | - </br> | |
| 13 | - </div> | |
| 14 | - </div> | |
| 15 | - </div> | |
| 16 | - <div class="row "> | |
| 17 | - <div class="col-lg-9 col-lg-offset-2 col-xs-9 col-xs-offset-2 col-sm-9 col-sm-offset-2 col-md-9 col-md-offset-2 col-xl-9 col-xl-offset-2"> | |
| 18 | - {% if success %} | |
| 19 | - <div class="alert alert-success alert-dismissible" role="alert"> | |
| 20 | - <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | |
| 21 | - <span aria-hidden="true">×</span> | |
| 22 | - </button> | |
| 23 | - <ul> | |
| 24 | - <li>{{ success }}</li> | |
| 25 | - </ul> | |
| 26 | - </div> | |
| 27 | - {% elif danger %} | |
| 28 | - <div class="alert alert-danger alert-dismissible" role="alert"> | |
| 29 | - <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | |
| 30 | - <span aria-hidden="true">×</span> | |
| 31 | - </button> | |
| 32 | - <ul> | |
| 33 | - <li>{{ danger }}</li> | |
| 34 | - </ul> | |
| 35 | - </div> | |
| 36 | - {% endif %} | |
| 37 | - <div class="card"> | |
| 38 | - <div class="card-block"> | |
| 39 | - <div class="col-md-12 col-xs-12 col-sm-12 col-lg-12 col-xl-12"> | |
| 40 | - <form class="form-group " method="post" action=""> | |
| 41 | - {% csrf_token %} | |
| 42 | - <div class="form-group is-empty"> | |
| 43 | - <label for="inputEmail" class="ccontrol-label"> {% trans 'E-mail' %}</label> | |
| 44 | - <input name="email" type="email" class="form-control" id="inputEmail" placeholder="Email" {% if email %}value="{{form.email}}"{% endif %}> | |
| 45 | - </div> | |
| 46 | - <div class="col-lg-offset-4 col-lg-4 col-xs-offset-4 col-xs-4 col-sm-offset-4 col-sm-4 col-md-offset-4 col-md-4 col-xl-offset-4 col-xl-4"> | |
| 47 | - <button type="submite" class="btn btn-raised btn-primary btn-block">{% trans 'Send' %}</button> | |
| 48 | - | |
| 49 | - </div> | |
| 50 | - </form> | |
| 51 | - </div> | |
| 52 | - </div> | |
| 53 | - </div> | |
| 5 | +<div class="row"> | |
| 6 | + <div class="col-sm-6 col-sm-offset-4 col-md-6 col-md-offset-4 col-xs-6 col-xs-offset-4 col-lg-6 col-lg-offset-4 col-xl-6 col-xl-offset-4 "> | |
| 7 | + <div class="col-sm-8 col-sm-offset-2 col-md-8 col-md-offset-2 col-xs-8 col-xs-offset-2 col-lg-8 col-lg-offset-2 col-xl-8 col-xl-offset-2"> | |
| 8 | + <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block logo-login " alt="logo amadeus"> | |
| 9 | + </div> | |
| 10 | + </div> | |
| 11 | +</div> | |
| 12 | +<div class="row"> | |
| 13 | + <div class="col-md-8 col-md-offset-3 col-sm-10 col-sm-offset-2 col-xs-12 col-xs-offset-1 col-lg-8 col-lg-offset-3 col-xl-8 col-xl-offset-3"> | |
| 14 | + {% if success %} | |
| 15 | + <div class="alert alert-success alert-dismissible" role="alert"> | |
| 16 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | |
| 17 | + <span aria-hidden="true">×</span> | |
| 18 | + </button> | |
| 19 | + <ul> | |
| 20 | + <li>{{ success }}</li> | |
| 21 | + </ul> | |
| 22 | + </div> | |
| 23 | + {% elif danger %} | |
| 24 | + <div class="alert alert-danger alert-dismissible" role="alert"> | |
| 25 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | |
| 26 | + <span aria-hidden="true">×</span> | |
| 27 | + </button> | |
| 28 | + <ul> | |
| 29 | + <li>{{ danger }}</li> | |
| 30 | + </ul> | |
| 31 | + </div> | |
| 32 | + {% endif %} | |
| 33 | + <div class="card"> | |
| 34 | + <div class="card-block"> | |
| 35 | + <form class="form-group " method="post" action=""> | |
| 36 | + <div class="col-md-12 col-xs-12 col-lg-10 col-lg-offset-1 col-sm-12"> | |
| 37 | + {% csrf_token %} | |
| 38 | + <div class="form-group is-empty"> | |
| 39 | + <label for="inputEmail" class="ccontrol-label"> {% trans 'E-mail' %}</label> | |
| 40 | + <input name="email" type="email" class="form-control" id="inputEmail" placeholder="Email" {% if email %}value="{{form.email}}"{% endif %}> | |
| 41 | + </div> | |
| 42 | + <div class="form-group send-reset-email"> | |
| 43 | + <button type="submite" class="btn btn-raised btn-primary ">{% trans 'Send' %}</button> | |
| 44 | + </div> | |
| 45 | + <div class="form-group"> | |
| 46 | + <a href="{% url 'core:home' %}" class="btn btn-default btn-raised" >{% trans 'Back' %}</a> | |
| 47 | + </div> | |
| 48 | + </div> | |
| 49 | + </form> | |
| 54 | 50 | </div> |
| 55 | 51 | </div> |
| 56 | 52 | </div> |
| 57 | - | |
| 53 | +</div> | |
| 58 | 54 | {% endblock content %} | ... | ... |
core/views.py
| ... | ... | @@ -68,7 +68,6 @@ def remember_password(request): |
| 68 | 68 | context['danger'] = 'E-mail does not send' |
| 69 | 69 | return render(request, "remember_password.html",context) |
| 70 | 70 | |
| 71 | -@notification_decorator(message='just connected') | |
| 72 | 71 | @log_decorator('Acessar', 'Sistema') |
| 73 | 72 | def login(request): |
| 74 | 73 | context = {} |
| ... | ... | @@ -116,6 +115,7 @@ def getNotifications(request): |
| 116 | 115 | |
| 117 | 116 | def guest (request): |
| 118 | 117 | context = { |
| 119 | - 'courses': Course.objects.filter(public=True) | |
| 118 | + 'courses': Course.objects.filter(public=True), | |
| 119 | + 'categories': CourseCategory.objects.all(), | |
| 120 | 120 | } |
| 121 | 121 | return render(request, 'guest.html', context) |
| 122 | 122 | \ No newline at end of file | ... | ... |