From 5c581c0badb24b6062be2a4ad419247c17be3d39 Mon Sep 17 00:00:00 2001 From: Zambom Date: Tue, 24 Jan 2017 19:57:40 -0200 Subject: [PATCH] Adding file link creation --- amadeus/settings.py | 1 + amadeus/static/js/resources.js | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ amadeus/urls.py | 1 + file_link/__init__.py | 0 file_link/admin.py | 3 +++ file_link/apps.py | 5 +++++ file_link/forms.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ file_link/migrations/0001_initial.py | 31 +++++++++++++++++++++++++++++++ file_link/migrations/__init__.py | 0 file_link/models.py | 40 ++++++++++++++++++++++++++++++++++++++++ file_link/templates/file_links/_form.html | 338 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ file_link/templates/file_links/create.html | 34 ++++++++++++++++++++++++++++++++++ file_link/tests.py | 3 +++ file_link/urls.py | 8 ++++++++ file_link/views.py | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ topics/templates/topics/list.html | 4 ++-- webpage/models.py | 1 - webpage/templates/webpages/_form.html | 103 ++----------------------------------------------------------------------------------------------------- webpage/templates/webpages/create.html | 1 - 19 files changed, 814 insertions(+), 105 deletions(-) create mode 100644 amadeus/static/js/resources.js create mode 100644 file_link/__init__.py create mode 100644 file_link/admin.py create mode 100644 file_link/apps.py create mode 100644 file_link/forms.py create mode 100644 file_link/migrations/0001_initial.py create mode 100644 file_link/migrations/__init__.py create mode 100644 file_link/models.py create mode 100644 file_link/templates/file_links/_form.html create mode 100644 file_link/templates/file_links/create.html create mode 100644 file_link/tests.py create mode 100644 file_link/urls.py create mode 100644 file_link/views.py diff --git a/amadeus/settings.py b/amadeus/settings.py index 1e5825c..83edc22 100644 --- a/amadeus/settings.py +++ b/amadeus/settings.py @@ -61,6 +61,7 @@ INSTALLED_APPS = [ 'students_group', 'topics', 'pendencies', + 'file_link', 'webpage', 'mailsender', 'security', diff --git a/amadeus/static/js/resources.js b/amadeus/static/js/resources.js new file mode 100644 index 0000000..253894e --- /dev/null +++ b/amadeus/static/js/resources.js @@ -0,0 +1,135 @@ +$('#id_groups').multiSelect({ + selectableHeader: "", + selectionHeader: "", + afterInit: function(ms){ + var that = this, + $selectableSearch = that.$selectableUl.prev(), + $selectionSearch = that.$selectionUl.prev(), + selectableSearchString = '#'+that.$container.attr('id')+' .ms-elem-selectable:not(.ms-selected)', + selectionSearchString = '#'+that.$container.attr('id')+' .ms-elem-selection.ms-selected'; + + that.qs1 = $selectableSearch.quicksearch(selectableSearchString) + .on('keydown', function(e){ + if (e.which === 40){ + that.$selectableUl.focus(); + return false; + } + }); + + that.qs2 = $selectionSearch.quicksearch(selectionSearchString) + .on('keydown', function(e){ + if (e.which == 40){ + that.$selectionUl.focus(); + return false; + } + }); + }, + afterSelect: function(){ + this.qs1.cache(); + this.qs2.cache(); + }, + afterDeselect: function(){ + this.qs1.cache(); + this.qs2.cache(); + } +});// Used to create multi-select css style + +$('#id_students').multiSelect({ + selectableHeader: "", + selectionHeader: "", + afterInit: function(ms){ + var that = this, + $selectableSearch = that.$selectableUl.prev(), + $selectionSearch = that.$selectionUl.prev(), + selectableSearchString = '#'+that.$container.attr('id')+' .ms-elem-selectable:not(.ms-selected)', + selectionSearchString = '#'+that.$container.attr('id')+' .ms-elem-selection.ms-selected'; + + that.qs1 = $selectableSearch.quicksearch(selectableSearchString) + .on('keydown', function(e){ + if (e.which === 40){ + that.$selectableUl.focus(); + return false; + } + }); + + that.qs2 = $selectionSearch.quicksearch(selectionSearchString) + .on('keydown', function(e){ + if (e.which == 40){ + that.$selectionUl.focus(); + return false; + } + }); + }, + afterSelect: function(){ + this.qs1.cache(); + this.qs2.cache(); + }, + afterDeselect: function(){ + this.qs1.cache(); + this.qs2.cache(); + } +});// Used to create multi-select css style + +$('.collapse').on('show.bs.collapse', function (e) { + if($(this).is(e.target)){ + var btn = $(this).parent().find('.fa-angle-right'); + + btn.switchClass("fa-angle-right", "fa-angle-down", 250, "easeInOutQuad"); + } +}); + +$('.collapse').on('hide.bs.collapse', function (e) { + if($(this).is(e.target)){ + var btn = $(this).parent().find('.fa-angle-down'); + + btn.switchClass("fa-angle-down", "fa-angle-right", 250, "easeInOutQuad"); + } +}); + +$('.begin_date_input').on('click', function () { + var checkbox = $(this).parent().parent().find('.begin_date'); + + $(checkbox).prop('checked', true); +}); + +$('.end_date_input').on('click', function () { + var checkbox = $(this).parent().parent().find('.end_date'); + + $(checkbox).prop('checked', true); +}); + +// check if browser supports drag n drop +// call initialization file +if (window.File && window.FileList && window.FileReader) { + Init(); +} + +// initialize +function Init() { + var small = $("#id_file_content"), + filedrag = $(".filedrag"), + common = $(".common-file-input"); + + // file select + small.on("change", FileSelectHandler); + + // is XHR2 available? + var xhr = new XMLHttpRequest(); + if (xhr.upload) { + // file drop + filedrag.on("drop", FileSelectHandler); + filedrag.attr('style', 'display:block'); + common.attr('style', 'display:none'); + } +} + +// file selection +function FileSelectHandler(e) { + var files = e.target.files || e.dataTransfer.files, + parent = $(e.target.offsetParent); + + // process all File objects + for (var i = 0, f; f = files[i]; i++) { + parent.find('.filedrag').html(f.name); + } +} \ No newline at end of file diff --git a/amadeus/urls.py b/amadeus/urls.py index 5e34b67..66609ac 100644 --- a/amadeus/urls.py +++ b/amadeus/urls.py @@ -30,6 +30,7 @@ urlpatterns = [ url(r'^groups/', include('students_group.urls', namespace = 'groups')), url(r'^topics/', include('topics.urls', namespace = 'topics')), url(r'^webpages/', include('webpage.urls', namespace = 'webpages')), + url(r'^file_links/', include('file_link.urls', namespace = 'file_links')), url(r'^mailsender/', include('mailsender.urls', namespace = 'mailsender')), url(r'^security/', include('security.urls', namespace = 'security')), url(r'^themes/', include('themes.urls', namespace = 'themes')), diff --git a/file_link/__init__.py b/file_link/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/file_link/__init__.py diff --git a/file_link/admin.py b/file_link/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/file_link/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/file_link/apps.py b/file_link/apps.py new file mode 100644 index 0000000..3e92e5d --- /dev/null +++ b/file_link/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class FileLinkConfig(AppConfig): + name = 'file_link' diff --git a/file_link/forms.py b/file_link/forms.py new file mode 100644 index 0000000..1430f8d --- /dev/null +++ b/file_link/forms.py @@ -0,0 +1,97 @@ +# coding=utf-8 +from django import forms +from django.utils.translation import ugettext_lazy as _ +from django.utils.html import strip_tags + +from subjects.models import Tag + +from .models import FileLink + +class FileLinkForm(forms.ModelForm): + subject = None + MAX_UPLOAD_SIZE = 10*1024*1024 + + def __init__(self, *args, **kwargs): + super(FileLinkForm, self).__init__(*args, **kwargs) + + self.subject = kwargs['initial'].get('subject', None) + + if self.instance.id: + self.subject = self.instance.topic.subject + self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True)) + + self.fields['students'].queryset = self.subject.students.all() + self.fields['groups'].queryset = self.subject.group_subject.all() + + tags = forms.CharField(label = _('Tags'), required = False) + + class Meta: + model = FileLink + fields = ['name', 'file_content', 'brief_description', 'all_students', 'students', 'groups', 'visible'] + labels = { + 'name': _('File name'), + } + widgets = { + 'brief_description': forms.Textarea, + 'students': forms.SelectMultiple, + 'groups': forms.SelectMultiple, + } + + def clean_name(self): + name = self.cleaned_data.get('name', '') + + topics = self.subject.topic_subject.all() + + for topic in topics: + if self.instance.id: + same_name = topic.resource_topic.filter(name__unaccent__iexact = name).exclude(id = self.instance.id).count() + else: + same_name = topic.resource_topic.filter(name__unaccent__iexact = name).count() + + if same_name > 0: + self._errors['name'] = [_('This subject already has a file link with this name')] + + return ValueError + + return name + + def clean_file_content(self): + file_content = self.cleaned_data.get('file_content', False) + + if file_content: + if hasattr(file_content, '_size'): + if file_content._size > self.MAX_UPLOAD_SIZE: + self._errors['file_content'] = [_("The file is too large. It should have less than 10MB.")] + + return ValueError + + return file_content + + def save(self, commit = True): + super(FileLinkForm, self).save(commit = True) + + self.instance.save() + + previous_tags = self.instance.tags.all() + + tags = self.cleaned_data['tags'].split(",") + + #Excluding unwanted tags + for prev in previous_tags: + if not prev.name in tags: + self.instance.tags.remove(prev) + + for tag in tags: + tag = tag.strip() + + exist = Tag.objects.filter(name = tag).exists() + + if exist: + new_tag = Tag.objects.get(name = tag) + else: + new_tag = Tag.objects.create(name = tag) + + if not new_tag in self.instance.tags.all(): + self.instance.tags.add(new_tag) + + return self.instance \ No newline at end of file diff --git a/file_link/migrations/0001_initial.py b/file_link/migrations/0001_initial.py new file mode 100644 index 0000000..b90deae --- /dev/null +++ b/file_link/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2017-01-24 21:48 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import file_link.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('topics', '0007_auto_20170123_1911'), + ] + + operations = [ + migrations.CreateModel( + name='FileLink', + fields=[ + ('resource_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='topics.Resource')), + ('file_content', models.FileField(upload_to='files/', validators=[file_link.models.validate_file_extension], verbose_name='File')), + ], + options={ + 'verbose_name': 'File Link', + 'verbose_name_plural': 'File Links', + }, + bases=('topics.resource',), + ), + ] diff --git a/file_link/migrations/__init__.py b/file_link/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/file_link/migrations/__init__.py diff --git a/file_link/models.py b/file_link/models.py new file mode 100644 index 0000000..3a40f4c --- /dev/null +++ b/file_link/models.py @@ -0,0 +1,40 @@ +from django.db import models +from django.core.exceptions import ValidationError +from django.utils.translation import ugettext_lazy as _ + +from topics.models import Resource + +def validate_file_extension(value): + valid_formats = [ + 'image/jpeg','image/x-citrix-jpeg','image/png','image/x-citrix-png','image/x-png', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'application/vnd.ms-excel','text/html','application/msword','application/vnd.oasis.opendocument.presentation', + 'application/vnd.oasis.opendocument.spreadsheet','application/vnd.oasis.opendocument.text', + 'application/pdf' + ] + + if hasattr(value.file, 'content_type'): + if not value.file.content_type in valid_formats: + raise ValidationError(_('File not supported.')) + +class FileLink(Resource): + file_content = models.FileField(_('File'), upload_to = 'files/', validators = [validate_file_extension]) + + class Meta: + verbose_name = _('File Link') + verbose_name_plural = _('File Links') + + def __str__(self): + return self.name + + def access_link(self): + return 'webpages:view' + + def update_link(self): + return 'webpages:update' + + def delete_link(self): + return 'webpages:delete' diff --git a/file_link/templates/file_links/_form.html b/file_link/templates/file_links/_form.html new file mode 100644 index 0000000..3ba2a17 --- /dev/null +++ b/file_link/templates/file_links/_form.html @@ -0,0 +1,338 @@ +{% load static i18n %} +{% load widget_tweaks %} + +
+ {% csrf_token %} + + {% render_field form.control_subject %} + +
+ + {% render_field form.name class='form-control' %} + + {{ form.name.help_text }} + + {% if form.name.errors %} + + {% endif %} +
+ +
+ {% render_field form.file_content %} + +
+ + + + +
+ +
+ {% trans 'Click or drop the file here' %}
+ + {% trans 'The file could not exceed 10MB.' %} +
+ + {{ form.file_content.help_text }} + + {% if form.file_content.errors %} + + {% endif %} +
+ + {% trans 'Common resources settings' %} + +
+ + {% render_field form.brief_description class='form-control text_wysiwyg' %} + + {{ form.brief_description.help_text }} + + {% if form.brief_description.errors %} + + {% endif %} +
+ +
+ + {% render_field form.tags class='form-control' data-role="tagsinput" %} + + {{ form.tags.help_text }} + + {% if form.tags.errors %} + + {% endif %} +
+ +
+
+ +
+ +
+
+ {% render_field pendencies_form.id %} + {% render_field pendencies_form.resource %} + {% render_field pendencies_form.subject class='pend_subj' %} + +
+ +
+ {% render_field pendencies_form.action class='form-control' %} +
+ +
+ + {{ pendencies_form.action.help_text }} + + {% if pendencies_form.action.errors %} + + {% endif %} +
+
+
+
+

{% trans 'Wished period' %}:

+
+
+
+
+ +
+
+ {% render_field pendencies_form.begin_date class='form-control datetime-picker begin_date_input' %} +
+
+
+ {{ pendencies_form.begin_date.help_text }} + + {% if pendencies_form.begin_date.errors %} + + {% endif %} +
+
+
+ +
+
+ {% render_field pendencies_form.end_date class='form-control datetime-picker end_date_input' %} +
+
+
+ {{ pendencies_form.end_date.help_text }} + + {% if pendencies_form.end_date.errors %} + + {% endif %} +
+
+
+
+
+ +
+ +
+
+
+ +
+ + {{ form.all_students.help_text }} + + {% if form.all_students.errors %} + + {% endif %} +
+ +

{% trans 'Attribute students to webpage' %}:

+ {% render_field form.students class='form-control' %} + + {{ form.students.help_text }} + + {% if form.students.errors %} + + {% endif %} + +
+ +

{% trans 'Attribute groups to webpage' %}:

+ {% render_field form.groups class='form-control' %} + + {{ form.groups.help_text }} + + {% if form.groups.errors %} + + {% endif %} +
+
+
+ +
+
+ +
+ + {{ form.visible.help_text }} + + {% if form.visible.errors %} + + {% endif %} +
+ +
+
+ +
+
+
+ + \ No newline at end of file diff --git a/file_link/templates/file_links/create.html b/file_link/templates/file_links/create.html new file mode 100644 index 0000000..03fd602 --- /dev/null +++ b/file_link/templates/file_links/create.html @@ -0,0 +1,34 @@ +{% extends 'subjects/view.html' %} + +{% load static i18n django_bootstrap_breadcrumbs %} + +{% block style %} + {{block.super}} + +{% endblock %} + +{% block javascript %} + {{block.super}} + +{% endblock %} + +{% block breadcrumbs %} + {{ block.super }} + + {% breadcrumb topic 'subjects:topic_view' topic.subject.slug topic.slug %} + + {% trans 'Create File Link' as bread %} + {% breadcrumb bread 'file_links:create' topic.slug %} +{% endblock %} + +{% block content %} +
+
+
+ {% include 'file_links/_form.html' %} +
+
+
+
+
+{% endblock %} diff --git a/file_link/tests.py b/file_link/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/file_link/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/file_link/urls.py b/file_link/urls.py new file mode 100644 index 0000000..67e6698 --- /dev/null +++ b/file_link/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import url +from django.contrib.auth import views as auth_views + +from . import views + +urlpatterns = [ + url(r'^create/(?P[\w_-]+)/$', views.CreateView.as_view(), name = 'create'), +] diff --git a/file_link/views.py b/file_link/views.py new file mode 100644 index 0000000..9ab5d51 --- /dev/null +++ b/file_link/views.py @@ -0,0 +1,114 @@ +from django.shortcuts import get_object_or_404, redirect, render +from django.views import generic +from django.contrib import messages +from django.core.urlresolvers import reverse, reverse_lazy +from django.utils.translation import ugettext_lazy as _ +from django.contrib.auth.mixins import LoginRequiredMixin + +from amadeus.permissions import has_subject_permissions, has_resource_permissions + +from topics.models import Topic + +from pendencies.forms import PendenciesForm + +from .forms import FileLinkForm +from .models import FileLink + +class CreateView(LoginRequiredMixin, generic.edit.CreateView): + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'file_links/create.html' + form_class = FileLinkForm + + def dispatch(self, request, *args, **kwargs): + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + if not has_subject_permissions(request.user, topic.subject): + return redirect(reverse_lazy('subjects:home')) + + return super(CreateView, self).dispatch(request, *args, **kwargs) + + def get(self, request, *args, **kwargs): + self.object = None + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) + + def post(self, request, *args, **kwargs): + self.object = None + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + + if (form.is_valid() and pendencies_form.is_valid()): + return self.form_valid(form, pendencies_form) + else: + return self.form_invalid(form, pendencies_form) + + def get_initial(self): + initial = super(CreateView, self).get_initial() + + slug = self.kwargs.get('slug', '') + + topic = get_object_or_404(Topic, slug = slug) + initial['subject'] = topic.subject + + return initial + + def form_invalid(self, form, pendencies_form): + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) + + def form_valid(self, form, pendencies_form): + self.object = form.save(commit = False) + + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + self.object.show_window = True + self.object.topic = topic + self.object.order = topic.resource_topic.count() + 1 + + if not self.object.topic.visible and not self.object.topic.repository: + self.object.visible = False + + self.object.save() + + pend_form = pendencies_form.save(commit = False) + pend_form.resource = self.object + + if not pend_form.action == "": + pend_form.save() + + return redirect(self.get_success_url()) + + def get_context_data(self, **kwargs): + context = super(CreateView, self).get_context_data(**kwargs) + + context['title'] = _('Create File Link') + + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + context['topic'] = topic + context['subject'] = topic.subject + + return context + + def get_success_url(self): + messages.success(self.request, _('The File Link "%s" was added to the Topic "%s" of the virtual environment "%s" successfully!')%(self.object.name, self.object.topic.name, self.object.topic.subject.name)) + + return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) \ No newline at end of file diff --git a/topics/templates/topics/list.html b/topics/templates/topics/list.html index f64a2b5..bbed1bf 100644 --- a/topics/templates/topics/list.html +++ b/topics/templates/topics/list.html @@ -51,8 +51,8 @@ diff --git a/webpage/models.py b/webpage/models.py index 2234aeb..2111613 100644 --- a/webpage/models.py +++ b/webpage/models.py @@ -1,5 +1,4 @@ from django.db import models -from autoslug.fields import AutoSlugField from django.utils.translation import ugettext_lazy as _ from topics.models import Resource diff --git a/webpage/templates/webpages/_form.html b/webpage/templates/webpages/_form.html index 00d16dc..f70f7ac 100644 --- a/webpage/templates/webpages/_form.html +++ b/webpage/templates/webpages/_form.html @@ -343,104 +343,5 @@ $("#notifications").collapse('toggle'); {% endif %} }); - - $('#id_groups').multiSelect({ - selectableHeader: "", - selectionHeader: "", - afterInit: function(ms){ - var that = this, - $selectableSearch = that.$selectableUl.prev(), - $selectionSearch = that.$selectionUl.prev(), - selectableSearchString = '#'+that.$container.attr('id')+' .ms-elem-selectable:not(.ms-selected)', - selectionSearchString = '#'+that.$container.attr('id')+' .ms-elem-selection.ms-selected'; - - that.qs1 = $selectableSearch.quicksearch(selectableSearchString) - .on('keydown', function(e){ - if (e.which === 40){ - that.$selectableUl.focus(); - return false; - } - }); - - that.qs2 = $selectionSearch.quicksearch(selectionSearchString) - .on('keydown', function(e){ - if (e.which == 40){ - that.$selectionUl.focus(); - return false; - } - }); - }, - afterSelect: function(){ - this.qs1.cache(); - this.qs2.cache(); - }, - afterDeselect: function(){ - this.qs1.cache(); - this.qs2.cache(); - } - });// Used to create multi-select css style - - $('#id_students').multiSelect({ - selectableHeader: "", - selectionHeader: "", - afterInit: function(ms){ - var that = this, - $selectableSearch = that.$selectableUl.prev(), - $selectionSearch = that.$selectionUl.prev(), - selectableSearchString = '#'+that.$container.attr('id')+' .ms-elem-selectable:not(.ms-selected)', - selectionSearchString = '#'+that.$container.attr('id')+' .ms-elem-selection.ms-selected'; - - that.qs1 = $selectableSearch.quicksearch(selectableSearchString) - .on('keydown', function(e){ - if (e.which === 40){ - that.$selectableUl.focus(); - return false; - } - }); - - that.qs2 = $selectionSearch.quicksearch(selectionSearchString) - .on('keydown', function(e){ - if (e.which == 40){ - that.$selectionUl.focus(); - return false; - } - }); - }, - afterSelect: function(){ - this.qs1.cache(); - this.qs2.cache(); - }, - afterDeselect: function(){ - this.qs1.cache(); - this.qs2.cache(); - } - });// Used to create multi-select css style - - $('.collapse').on('show.bs.collapse', function (e) { - if($(this).is(e.target)){ - var btn = $(this).parent().find('.fa-angle-right'); - - btn.switchClass("fa-angle-right", "fa-angle-down", 250, "easeInOutQuad"); - } - }); - - $('.collapse').on('hide.bs.collapse', function (e) { - if($(this).is(e.target)){ - var btn = $(this).parent().find('.fa-angle-down'); - - btn.switchClass("fa-angle-down", "fa-angle-right", 250, "easeInOutQuad"); - } - }); - - $('.begin_date_input').on('click', function () { - var checkbox = $(this).parent().parent().find('.begin_date'); - - $(checkbox).prop('checked', true); - }); - - $('.end_date_input').on('click', function () { - var checkbox = $(this).parent().parent().find('.end_date'); - - $(checkbox).prop('checked', true); - }); - \ No newline at end of file + + \ No newline at end of file diff --git a/webpage/templates/webpages/create.html b/webpage/templates/webpages/create.html index f066099..55278ef 100644 --- a/webpage/templates/webpages/create.html +++ b/webpage/templates/webpages/create.html @@ -10,7 +10,6 @@ {% block javascript %} {{block.super}} - {% endblock %} {% block breadcrumbs %} -- libgit2 0.21.2