From 6370679b625f5055ea0dc6d1045910218575b744 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 3 Oct 2016 22:45:57 +0100 Subject: [PATCH 01/42] Initial proof of concept --- RIGS/rigboard.py | 15 +++++++++++++++ RIGS/urls.py | 3 +++ templates/registration/login.html | 8 ++++++++ 3 files changed, 26 insertions(+) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index a6ccde09..d1b17a89 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -14,6 +14,7 @@ from django.db.models import Q from django.contrib import messages from z3c.rml import rml2pdf from PyPDF2 import PdfFileMerger, PdfFileReader +import simplejson from RIGS import models, forms import datetime @@ -46,6 +47,20 @@ class WebCalendar(generic.TemplateView): class EventDetail(generic.DetailView): model = models.Event +class EventOembed(generic.View): + model = models.Event + + def get(self, request, pk=None): + + object = get_object_or_404(self.model, pk=pk) + data = { + 'html': 'this is some html', + 'version': '1.0', + 'type': 'rich', + } + json = simplejson.dumps(data) + return HttpResponse(json, content_type="application/json") + class EventCreate(generic.CreateView): model = models.Event diff --git a/RIGS/urls.py b/RIGS/urls.py index ee949ff8..53bba8da 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -82,6 +82,9 @@ urlpatterns = patterns('', url(r'^event/(?P\d+)/$', permission_required_with_403('RIGS.view_event')(rigboard.EventDetail.as_view()), name='event_detail'), + url(r'^event/(?P\d+)/oembed/$', + rigboard.EventOembed.as_view(), + name='event_oembed'), url(r'^event/(?P\d+)/print/$', permission_required_with_403('RIGS.view_event')(rigboard.EventPrint.as_view()), name='event_print'), diff --git a/templates/registration/login.html b/templates/registration/login.html index ace80d16..2b1f1a72 100644 --- a/templates/registration/login.html +++ b/templates/registration/login.html @@ -2,6 +2,14 @@ {% block title %}Login{% endblock %} +{% block extra-head %} + {% if next %} + + {% endif %} +{% endblock %} + {% block content %} {% include 'registration/loginform.html' %} {% endblock %} \ No newline at end of file From 64f3842a1317dc72569e6999d2d02734c4b38c44 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 3 Oct 2016 23:02:19 +0100 Subject: [PATCH 02/42] Added iframe to embed --- RIGS/rigboard.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index d1b17a89..e61571d1 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -53,8 +53,12 @@ class EventOembed(generic.View): def get(self, request, pk=None): object = get_object_or_404(self.model, pk=pk) + + base_url = "https://rigs.nottinghamtec.co.uk" + full_url = base_url+str(object.get_absolute_url()) + data = { - 'html': 'this is some html', + 'html': ''.format(full_url), 'version': '1.0', 'type': 'rich', } From f7ea0cb8341b9a1af7ef3e5df2435a39ae9e4aa6 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 3 Oct 2016 23:09:57 +0100 Subject: [PATCH 03/42] Remove security from event detail (for testing in staging) --- RIGS/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RIGS/urls.py b/RIGS/urls.py index 53bba8da..14b4bd0d 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -80,7 +80,7 @@ urlpatterns = patterns('', name='activity_feed'), url(r'^event/(?P\d+)/$', - permission_required_with_403('RIGS.view_event')(rigboard.EventDetail.as_view()), + rigboard.EventDetail.as_view(), name='event_detail'), url(r'^event/(?P\d+)/oembed/$', rigboard.EventOembed.as_view(), From eb10c8e21fa50da6c2fb9d3421a7fe4a6ee86f77 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Mon, 3 Oct 2016 23:13:25 +0100 Subject: [PATCH 04/42] Add meta to detail page --- RIGS/templates/RIGS/event_detail.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/RIGS/templates/RIGS/event_detail.html b/RIGS/templates/RIGS/event_detail.html index d4b089a9..3f7d6be5 100644 --- a/RIGS/templates/RIGS/event_detail.html +++ b/RIGS/templates/RIGS/event_detail.html @@ -1,6 +1,14 @@ {% extends request.is_ajax|yesno:"base_ajax.html,base.html" %} {% block title %}{% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} | {{object.name}}{% endblock %} +{% block extra-head %} + + + +{% endblock %} + {% block content %}
{% if not request.is_ajax %} From 585f909d3f4deed26c873134f1af1e9b6c043369 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Tue, 4 Oct 2016 21:05:07 +0100 Subject: [PATCH 05/42] Escape JSON --- RIGS/rigboard.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index e61571d1..3a4e3df6 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -62,7 +62,8 @@ class EventOembed(generic.View): 'version': '1.0', 'type': 'rich', } - json = simplejson.dumps(data) + # need to do this: @xframe_options_exempt + json = simplejson.JSONEncoderForHTML(data) return HttpResponse(json, content_type="application/json") From a02087bf2a2f18fe76752e11429a52d1512aa953 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Tue, 4 Oct 2016 21:11:43 +0100 Subject: [PATCH 06/42] Fixed fail --- RIGS/rigboard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 3a4e3df6..b56ca7d3 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -63,7 +63,7 @@ class EventOembed(generic.View): 'type': 'rich', } # need to do this: @xframe_options_exempt - json = simplejson.JSONEncoderForHTML(data) + json = simplejson.JSONEncoderForHTML().encode(data) return HttpResponse(json, content_type="application/json") From 17c7a3c52446895a1248c976b81ff314766f3597 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Wed, 5 Oct 2016 10:39:50 +0100 Subject: [PATCH 07/42] Made embed tag use absolute URL --- RIGS/templates/RIGS/event_detail.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RIGS/templates/RIGS/event_detail.html b/RIGS/templates/RIGS/event_detail.html index 3f7d6be5..4dcaf612 100644 --- a/RIGS/templates/RIGS/event_detail.html +++ b/RIGS/templates/RIGS/event_detail.html @@ -4,7 +4,7 @@ {% block extra-head %} {% endblock %} From 0244f5cfca0038c12222fade438ca2112c5c521a Mon Sep 17 00:00:00 2001 From: David Taylor Date: Wed, 5 Oct 2016 10:42:49 +0100 Subject: [PATCH 08/42] Restored login security to events --- RIGS/templates/RIGS/event_detail.html | 8 -------- RIGS/urls.py | 2 +- templates/registration/login.html | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/RIGS/templates/RIGS/event_detail.html b/RIGS/templates/RIGS/event_detail.html index 4dcaf612..d4b089a9 100644 --- a/RIGS/templates/RIGS/event_detail.html +++ b/RIGS/templates/RIGS/event_detail.html @@ -1,14 +1,6 @@ {% extends request.is_ajax|yesno:"base_ajax.html,base.html" %} {% block title %}{% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} | {{object.name}}{% endblock %} -{% block extra-head %} - - - -{% endblock %} - {% block content %}
{% if not request.is_ajax %} diff --git a/RIGS/urls.py b/RIGS/urls.py index 14b4bd0d..53bba8da 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -80,7 +80,7 @@ urlpatterns = patterns('', name='activity_feed'), url(r'^event/(?P\d+)/$', - rigboard.EventDetail.as_view(), + permission_required_with_403('RIGS.view_event')(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/oembed/$', rigboard.EventOembed.as_view(), diff --git a/templates/registration/login.html b/templates/registration/login.html index 2b1f1a72..f9db2e81 100644 --- a/templates/registration/login.html +++ b/templates/registration/login.html @@ -5,7 +5,7 @@ {% block extra-head %} {% if next %} {% endif %} {% endblock %} From 4b94ea7ef2514bd5830342c23621370c853ea44a Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 12:02:44 +0100 Subject: [PATCH 09/42] Made login redirect JS for event detail --- PyRIGS/decorators.py | 17 +++++++++++++---- RIGS/urls.py | 2 +- templates/login_redirect_embed.html | 24 ++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 templates/login_redirect_embed.html diff --git a/PyRIGS/decorators.py b/PyRIGS/decorators.py index 67d8964c..4af93097 100644 --- a/PyRIGS/decorators.py +++ b/PyRIGS/decorators.py @@ -2,8 +2,9 @@ from django.contrib.auth import REDIRECT_FIELD_NAME from django.shortcuts import render_to_response from django.template import RequestContext from django.http import HttpResponseRedirect +from django.core.urlresolvers import reverse -def user_passes_test_with_403(test_func, login_url=None): +def user_passes_test_with_403(test_func, login_url=None, oembed_view=None): """ Decorator for views that checks that the user passes the given test. @@ -13,12 +14,20 @@ def user_passes_test_with_403(test_func, login_url=None): if not login_url: from django.conf import settings login_url = settings.LOGIN_URL + def _dec(view_func): def _checklogin(request, *args, **kwargs): if test_func(request.user): return view_func(request, *args, **kwargs) elif not request.user.is_authenticated(): - return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, request.get_full_path())) + if oembed_view is not None: + extra_context = {} + extra_context['oembed_url'] = request.scheme + '://' + request.META['HTTP_HOST'] + reverse(oembed_view, kwargs=kwargs) + extra_context['login_url'] = "{0}?{1}={2}".format(login_url, REDIRECT_FIELD_NAME, request.get_full_path()) + resp = render_to_response('login_redirect_embed.html', extra_context, context_instance=RequestContext(request)) + return resp + else: + return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, request.get_full_path())) else: resp = render_to_response('403.html', context_instance=RequestContext(request)) resp.status_code = 403 @@ -28,12 +37,12 @@ def user_passes_test_with_403(test_func, login_url=None): return _checklogin return _dec -def permission_required_with_403(perm, login_url=None): +def permission_required_with_403(perm, login_url=None, oembed_view=None): """ Decorator for views that checks whether a user has a particular permission enabled, redirecting to the log-in page or rendering a 403 as necessary. """ - return user_passes_test_with_403(lambda u: u.has_perm(perm), login_url=login_url) + return user_passes_test_with_403(lambda u: u.has_perm(perm), login_url=login_url, oembed_view=oembed_view) from RIGS import models diff --git a/RIGS/urls.py b/RIGS/urls.py index 53bba8da..16da83da 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -80,7 +80,7 @@ urlpatterns = patterns('', name='activity_feed'), url(r'^event/(?P\d+)/$', - permission_required_with_403('RIGS.view_event')(rigboard.EventDetail.as_view()), + permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/oembed/$', rigboard.EventOembed.as_view(), diff --git a/templates/login_redirect_embed.html b/templates/login_redirect_embed.html new file mode 100644 index 00000000..afd3487c --- /dev/null +++ b/templates/login_redirect_embed.html @@ -0,0 +1,24 @@ +{% extends 'base.html' %} +{% load staticfiles %} +{% block title %}Login Required{% endblock %} + +{% block js %} + +{% endblock %} + +{% block extra-head %} + {% if oembed_url %} + + {% endif %} +{% endblock %} + +{% block content %} +
+

Login is required for this page

+ Login +
+{% endblock %} From 69b0ff9fae63a1c2e5a065e59020444ef4fcc971 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 12:52:33 +0100 Subject: [PATCH 10/42] Made embed page, with clickjacking protection turned off --- RIGS/rigboard.py | 8 ++ RIGS/templates/RIGS/event_embed.html | 122 +++++++++++++++++++++++++++ RIGS/urls.py | 5 +- 3 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 RIGS/templates/RIGS/event_embed.html diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index b56ca7d3..23fd5e6a 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -12,6 +12,7 @@ from django.conf import settings from django.http import HttpResponse from django.db.models import Q from django.contrib import messages +from django.views.decorators.clickjacking import xframe_options_exempt from z3c.rml import rml2pdf from PyPDF2 import PdfFileMerger, PdfFileReader import simplejson @@ -66,6 +67,13 @@ class EventOembed(generic.View): json = simplejson.JSONEncoderForHTML().encode(data) return HttpResponse(json, content_type="application/json") +class EventEmbed(EventDetail): + template_name = 'RIGS/event_embed.html' + + @xframe_options_exempt + def get(self, request, *args, **kwargs): + return super(EventEmbed, self).get(request, *args, **kwargs) + class EventCreate(generic.CreateView): model = models.Event diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html new file mode 100644 index 00000000..2c13dd39 --- /dev/null +++ b/RIGS/templates/RIGS/event_embed.html @@ -0,0 +1,122 @@ +{% load static from staticfiles %} +{% load raven %} + + + + + + + + + + + + + + + + + + +{% include "analytics.html" %} + +
+
+
+
+

+ + + + {% if object.mic %} + {{ object.mic.initials }} +
+ +
+ + {% elif object.is_rig %} + + {% endif %} +
+
+ + + {% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} + | {{ object.name }} + {% if object.venue %} + at {{ object.venue }} + {% endif %} + + + +

+ + {% if object.is_rig %} +
+ {{ object.person.name }} + {% if object.organisation %} + for {{ object.organisation.name }} + {% endif %} + {% if object.dry_hire %}Dry Hire{% endif %} +
+ {% endif %} + +

+ {{ event.start_date|date:"D d/m/Y" }} + {% if event.end_date and event.end_date != event.start_date %} + {{ event.end_date|date:"D d/m/Y" }} + {% endif %} + ({{ event.get_status_display }}) +

+

+ {{ event.description|linebreaksbr }} +

+
+
+ {% if not object.cancelled %} +
+ {% if object.meet_at %} +
Crew meet
+
{{ object.meet_at|date:"H:i" }} {{ object.meet_at|date:"(Y-m-d)" }}
+ {% endif %} + {% if object.has_start_time %} +
Event starts
+
+ {{ object.start_time|date:"H:i" }} + {{ object.start_date|date:"(Y-m-d)" }}
+
+ {% endif %} + {% if object.has_end_time%}{% if object.start_date != object.end_date or object.start_time != object.end_time %} +
Event ends
+
+ {{ object.end_time|date:"H:i" }} + {{ object.end_date|date:"(Y-m-d)" }} +
+ {% endif %}{% endif %} +
+ {% endif %} +
+
+
+
+
+ +{% block js %} +{% endblock %} + + \ No newline at end of file diff --git a/RIGS/urls.py b/RIGS/urls.py index 16da83da..b0eca4c4 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -82,7 +82,10 @@ urlpatterns = patterns('', url(r'^event/(?P\d+)/$', permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), - url(r'^event/(?P\d+)/oembed/$', + url(r'^event/(?P\d+)/embed/$', + permission_required_with_403('RIGS.view_event')(rigboard.EventEmbed.as_view()), + name='event_oembed'), + url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), name='event_oembed'), url(r'^event/(?P\d+)/print/$', From 59efc2c4850d4ef425087667aaefddbd7c6dfba4 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 12:59:37 +0100 Subject: [PATCH 11/42] Fixed JSON --- RIGS/rigboard.py | 5 ++--- RIGS/urls.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 23fd5e6a..a22f78ae 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -9,6 +9,7 @@ from django.shortcuts import get_object_or_404 from django.template import RequestContext from django.template.loader import get_template from django.conf import settings +from django.core.urlresolvers import reverse from django.http import HttpResponse from django.db.models import Q from django.contrib import messages @@ -52,11 +53,9 @@ class EventOembed(generic.View): model = models.Event def get(self, request, pk=None): - - object = get_object_or_404(self.model, pk=pk) base_url = "https://rigs.nottinghamtec.co.uk" - full_url = base_url+str(object.get_absolute_url()) + full_url = base_url+reverse('event_embed', args=[pk]) data = { 'html': ''.format(full_url), diff --git a/RIGS/urls.py b/RIGS/urls.py index b0eca4c4..a2fbc7c1 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -84,7 +84,7 @@ urlpatterns = patterns('', name='event_detail'), url(r'^event/(?P\d+)/embed/$', permission_required_with_403('RIGS.view_event')(rigboard.EventEmbed.as_view()), - name='event_oembed'), + name='event_embed'), url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), name='event_oembed'), From 466032296457c6d528bf16fa42c3ecc7153e277a Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 13:04:33 +0100 Subject: [PATCH 12/42] Remove hardcoded URL --- RIGS/rigboard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index a22f78ae..d42c9fa8 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -54,7 +54,7 @@ class EventOembed(generic.View): def get(self, request, pk=None): - base_url = "https://rigs.nottinghamtec.co.uk" + base_url = request.scheme + '://' + request.META['HTTP_HOST'] full_url = base_url+reverse('event_embed', args=[pk]) data = { From f0bb4c5b02b4304b295f7dc5785d23030972293e Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 13:13:09 +0100 Subject: [PATCH 13/42] Move exemption to urls.py (cleaner) --- RIGS/rigboard.py | 6 ------ RIGS/urls.py | 3 ++- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index d42c9fa8..91265871 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -13,7 +13,6 @@ from django.core.urlresolvers import reverse from django.http import HttpResponse from django.db.models import Q from django.contrib import messages -from django.views.decorators.clickjacking import xframe_options_exempt from z3c.rml import rml2pdf from PyPDF2 import PdfFileMerger, PdfFileReader import simplejson @@ -69,11 +68,6 @@ class EventOembed(generic.View): class EventEmbed(EventDetail): template_name = 'RIGS/event_embed.html' - @xframe_options_exempt - def get(self, request, *args, **kwargs): - return super(EventEmbed, self).get(request, *args, **kwargs) - - class EventCreate(generic.CreateView): model = models.Event form_class = forms.EventForm diff --git a/RIGS/urls.py b/RIGS/urls.py index a2fbc7c1..beae4ec2 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -2,6 +2,7 @@ from django.conf.urls import patterns, include, url from django.contrib.auth.decorators import login_required from RIGS import models, views, rigboard, finance, ical, versioning, forms from django.views.generic import RedirectView +from django.views.decorators.clickjacking import xframe_options_exempt from PyRIGS.decorators import permission_required_with_403 from PyRIGS.decorators import api_key_required @@ -83,7 +84,7 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/embed/$', - permission_required_with_403('RIGS.view_event')(rigboard.EventEmbed.as_view()), + xframe_options_exempt(permission_required_with_403('RIGS.view_event')(rigboard.EventEmbed.as_view())), name='event_embed'), url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), From 1bdc4bd293247e484aa7fbf63943cb42197c62eb Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 13:22:47 +0100 Subject: [PATCH 14/42] Fixed description = none in embed --- RIGS/templates/RIGS/event_embed.html | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index 2c13dd39..9670d38e 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -77,15 +77,17 @@ {% endif %}

- {{ event.start_date|date:"D d/m/Y" }} - {% if event.end_date and event.end_date != event.start_date %} - {{ event.end_date|date:"D d/m/Y" }} + {{ object.start_date|date:"D d/m/Y" }} + {% if object.end_date and object.end_date != object.start_date %} + {{ object.end_date|date:"D d/m/Y" }} {% endif %} - ({{ event.get_status_display }}) -

-

- {{ event.description|linebreaksbr }} + ({{ object.get_status_display }})

+ {% if object.description %} +

+ {{ object.description|linebreaksbr }} +

+ {% endif %}
{% if not object.cancelled %} From 441a2be0b8d11a03aeebe9c05f45d3c0fd051f08 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 16:08:01 +0100 Subject: [PATCH 15/42] Added embedded login, and all iframe links open in new tab --- RIGS/templates/RIGS/event_embed.html | 56 ++++--------------------- RIGS/urls.py | 3 +- RIGS/views.py | 9 ++++ templates/base_embed.html | 51 ++++++++++++++++++++++ templates/registration/login_embed.html | 11 +++++ 5 files changed, 82 insertions(+), 48 deletions(-) create mode 100644 templates/base_embed.html create mode 100644 templates/registration/login_embed.html diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index 9670d38e..49c8384e 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -1,44 +1,12 @@ +{% extends 'base_embed.html' %} {% load static from staticfiles %} -{% load raven %} +{% block content %} - - - - - - - - - - - - - - - - -{% include "analytics.html" %} - -
-
-
+ +
+

@@ -54,7 +22,7 @@ {% endif %} - + {% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} | {{ object.name }} @@ -79,7 +47,7 @@

{{ object.start_date|date:"D d/m/Y" }} {% if object.end_date and object.end_date != object.start_date %} - {{ object.end_date|date:"D d/m/Y" }} + – {{ object.end_date|date:"D d/m/Y" }} {% endif %} ({{ object.get_status_display }})

@@ -88,8 +56,7 @@ {{ object.description|linebreaksbr }}

{% endif %} -

-
+ {% if not object.cancelled %}
{% if object.meet_at %} @@ -115,10 +82,5 @@
-
-
-{% block js %} -{% endblock %} - - \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/RIGS/urls.py b/RIGS/urls.py index beae4ec2..b402a109 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -15,6 +15,7 @@ urlpatterns = patterns('', url(r'^closemodal/$', views.CloseModal.as_view(), name='closemodal'), url('^user/login/$', 'RIGS.views.login', name='login'), + url('^user/login/embed/$', 'RIGS.views.login_embed', name='login_embed'), url(r'^user/password_reset/$', 'django.contrib.auth.views.password_reset', {'password_reset_form':forms.PasswordReset}), # People @@ -84,7 +85,7 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/embed/$', - xframe_options_exempt(permission_required_with_403('RIGS.view_event')(rigboard.EventEmbed.as_view())), + xframe_options_exempt(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), name='event_embed'), url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), diff --git a/RIGS/views.py b/RIGS/views.py index c013ce1d..fded9865 100644 --- a/RIGS/views.py +++ b/RIGS/views.py @@ -35,6 +35,15 @@ def login(request, **kwargs): return login(request) +def login_embed(request, **kwargs): + if request.user.is_authenticated(): + next = request.REQUEST.get('next', '/') + return HttpResponseRedirect(request.REQUEST.get('next', '/')) + else: + from django.contrib.auth.views import login + + return login(request, template_name="registration/login_embed.html") + """ Called from a modal window (e.g. when an item is submitted to an event/invoice). May optionally also include some javascript in a success message to cause a load of diff --git a/templates/base_embed.html b/templates/base_embed.html new file mode 100644 index 00000000..2dd1dcc7 --- /dev/null +++ b/templates/base_embed.html @@ -0,0 +1,51 @@ +{% load static from staticfiles %} +{% load raven %} + + + + + + + + + + + + + + + + + + + + + +{% include "analytics.html" %} + +
+
+ {% block content %} + {% endblock %} +
+
+ +{% block js %} +{% endblock %} + + \ No newline at end of file diff --git a/templates/registration/login_embed.html b/templates/registration/login_embed.html new file mode 100644 index 00000000..1cfdfa5b --- /dev/null +++ b/templates/registration/login_embed.html @@ -0,0 +1,11 @@ +{% extends 'base_embed.html' %} + +{% block title %}Login{% endblock %} + +{% block content %} +
+

Rig Information Gathering System

+
+{% include 'registration/loginform.html' %} + +{% endblock %} \ No newline at end of file From 1b28efb6afd162b805138dc7981d7b2a5e9e02b0 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 16:10:51 +0100 Subject: [PATCH 16/42] Allow the embedded login to be embedded (useful feature) --- RIGS/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RIGS/urls.py b/RIGS/urls.py index b402a109..8767d7b9 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -15,7 +15,7 @@ urlpatterns = patterns('', url(r'^closemodal/$', views.CloseModal.as_view(), name='closemodal'), url('^user/login/$', 'RIGS.views.login', name='login'), - url('^user/login/embed/$', 'RIGS.views.login_embed', name='login_embed'), + url('^user/login/embed/$', xframe_options_exempt(views.login_embed), name='login_embed'), url(r'^user/password_reset/$', 'django.contrib.auth.views.password_reset', {'password_reset_form':forms.PasswordReset}), # People From 25a3ef3f0c8234895662d04dd113af1d80c1b05b Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 16:15:53 +0100 Subject: [PATCH 17/42] Don't login in new window --- templates/registration/loginform.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/registration/loginform.html b/templates/registration/loginform.html index 74a3787b..4ec09d2c 100644 --- a/templates/registration/loginform.html +++ b/templates/registration/loginform.html @@ -3,7 +3,7 @@ {% include 'form_errors.html' %}
-
{% csrf_token %} + {% csrf_token %}
{% render_field form.username class+="form-control" placeholder=form.username.label autofocus="" %} From 3f752cd7b7100bf5bcf367adf96050aad7b18ca5 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 16:48:19 +0100 Subject: [PATCH 18/42] Made embed prettier --- RIGS/templates/RIGS/event_embed.html | 92 ++++++++++++++++------------ templates/base_embed.html | 1 + 2 files changed, 55 insertions(+), 38 deletions(-) diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index 49c8384e..cd0cf360 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -3,12 +3,23 @@ {% block content %} + +
+
+ Rig Information Gathering System +
- -

- + +

{% if object.mic %} @@ -21,7 +32,6 @@ {% endif %} - {% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} @@ -32,7 +42,15 @@ -

+

+ +

+ {{ object.start_date|date:"D d/m/Y" }} + {% if object.end_date and object.end_date != object.start_date %} + – {{ object.end_date|date:"D d/m/Y" }} + {% endif %} + ({{ object.get_status_display }}) +

{% if object.is_rig %}
@@ -44,41 +62,39 @@
{% endif %} -

- {{ object.start_date|date:"D d/m/Y" }} - {% if object.end_date and object.end_date != object.start_date %} - – {{ object.end_date|date:"D d/m/Y" }} - {% endif %} - ({{ object.get_status_display }}) -

- {% if object.description %} -

- {{ object.description|linebreaksbr }} -

- {% endif %} - {% if not object.cancelled %} -
- {% if object.meet_at %} -
Crew meet
-
{{ object.meet_at|date:"H:i" }} {{ object.meet_at|date:"(Y-m-d)" }}
- {% endif %} - {% if object.has_start_time %} -
Event starts
-
- {{ object.start_time|date:"H:i" }} - {{ object.start_date|date:"(Y-m-d)" }}
-
- {% endif %} - {% if object.has_end_time%}{% if object.start_date != object.end_date or object.start_time != object.end_time %} -
Event ends
-
- {{ object.end_time|date:"H:i" }} - {{ object.end_date|date:"(Y-m-d)" }} -
- {% endif %}{% endif %} -
+
+ {% if object.mic %} +
MIC
+
{{object.mic.name}}
{% endif %} + {% if object.description %} +
Description
+
{{ object.description|linebreaksbr }}
+ {% endif %} + {% if object.meet_at %} +
Crew meet
+
{{ object.meet_at|date:"H:i" }} {{ object.meet_at|date:"(Y-m-d)" }}
+ {% endif %} + {% if object.access_at %} +
Access at
+
{{ object.access_at|date:"H:i" }} {{ object.access_at|date:"(Y-m-d)" }}
+ {% endif %} + {% if object.has_start_time %} +
Event starts
+
+ {{ object.start_time|date:"H:i" }} + {{ object.start_date|date:"(Y-m-d)" }}
+
+ {% endif %} + {% if object.has_end_time%}{% if object.start_date != object.end_date or object.start_time != object.end_time %} +
Event ends
+
+ {{ object.end_time|date:"H:i" }} + {{ object.end_date|date:"(Y-m-d)" }} +
+ {% endif %}{% endif %} +
diff --git a/templates/base_embed.html b/templates/base_embed.html index 2dd1dcc7..68053750 100644 --- a/templates/base_embed.html +++ b/templates/base_embed.html @@ -29,6 +29,7 @@ } .embed_container{ border:5px solid #e9e9e9; + padding-top:12px; height:100%; width:100%; } From 5e9f7e2c6348d88dbd330dc66874baaa3a32e551 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Thu, 6 Oct 2016 17:00:45 +0100 Subject: [PATCH 19/42] More prettying --- RIGS/templates/RIGS/event_embed.html | 55 +++++++++++++++++----------- templates/base_embed.html | 2 +- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index cd0cf360..71b69217 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -18,20 +18,19 @@
diff --git a/templates/base_embed.html b/templates/base_embed.html index 68053750..da3f3480 100644 --- a/templates/base_embed.html +++ b/templates/base_embed.html @@ -30,7 +30,7 @@ .embed_container{ border:5px solid #e9e9e9; padding-top:12px; - height:100%; + min-height:100%; width:100%; } From 7e379b33db541b1e7d4118e4b915173d0626e18c Mon Sep 17 00:00:00 2001 From: David Taylor Date: Fri, 7 Oct 2016 02:24:24 +0100 Subject: [PATCH 20/42] Fixed login autofocus and error messages --- templates/registration/login_embed.html | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/templates/registration/login_embed.html b/templates/registration/login_embed.html index 1cfdfa5b..f14a1d28 100644 --- a/templates/registration/login_embed.html +++ b/templates/registration/login_embed.html @@ -1,4 +1,5 @@ {% extends 'base_embed.html' %} +{% load widget_tweaks %} {% block title %}Login{% endblock %} @@ -6,6 +7,24 @@

Rig Information Gathering System

-{% include 'registration/loginform.html' %} + + +{% include 'form_errors.html' %} +
+ + {% csrf_token %} +
+ + {% render_field form.username class+="form-control" placeholder=form.username.label %} +
+
+ + {% render_field form.password class+="form-control" placeholder=form.password.label %} +
+ + + + +
{% endblock %} \ No newline at end of file From 8a838aa4bd5e051ac34f2645221c1e4364008db5 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Fri, 7 Oct 2016 02:51:08 +0100 Subject: [PATCH 21/42] Added decorator for X-Frame header --- PyRIGS/decorators.py | 11 +++++++++++ RIGS/urls.py | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/PyRIGS/decorators.py b/PyRIGS/decorators.py index 4af93097..065ce853 100644 --- a/PyRIGS/decorators.py +++ b/PyRIGS/decorators.py @@ -4,6 +4,17 @@ from django.template import RequestContext from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse +def allow_embed(): + # using django.views.decorators.clickjacking.xframe_options_exempt removes the header + # Safari has differnet defaults to other browsers, so we have to set it explicitly + def headers_wrapper(fun): + def wrapped_function(*args, **kwargs): + response = fun(*args, **kwargs) + response['X-Frame-Options'] = "ALLOW" + return response + return wrapped_function + return headers_wrapper + def user_passes_test_with_403(test_func, login_url=None, oembed_view=None): """ Decorator for views that checks that the user passes the given test. diff --git a/RIGS/urls.py b/RIGS/urls.py index 8767d7b9..1383558e 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -2,10 +2,10 @@ from django.conf.urls import patterns, include, url from django.contrib.auth.decorators import login_required from RIGS import models, views, rigboard, finance, ical, versioning, forms from django.views.generic import RedirectView -from django.views.decorators.clickjacking import xframe_options_exempt from PyRIGS.decorators import permission_required_with_403 from PyRIGS.decorators import api_key_required +from PyRIGS.decorators import allow_embed urlpatterns = patterns('', # Examples: @@ -15,7 +15,7 @@ urlpatterns = patterns('', url(r'^closemodal/$', views.CloseModal.as_view(), name='closemodal'), url('^user/login/$', 'RIGS.views.login', name='login'), - url('^user/login/embed/$', xframe_options_exempt(views.login_embed), name='login_embed'), + url('^user/login/embed/$', allow_embed()(views.login_embed), name='login_embed'), url(r'^user/password_reset/$', 'django.contrib.auth.views.password_reset', {'password_reset_form':forms.PasswordReset}), # People @@ -85,7 +85,7 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/embed/$', - xframe_options_exempt(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), + allow_embed()(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), name='event_embed'), url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), From 3f4c362bfab6b165dadc9b308f196ee1750fd9db Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 17:01:37 +0100 Subject: [PATCH 22/42] Try allow-from header (limited browser support) --- PyRIGS/decorators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PyRIGS/decorators.py b/PyRIGS/decorators.py index 065ce853..42df533c 100644 --- a/PyRIGS/decorators.py +++ b/PyRIGS/decorators.py @@ -10,7 +10,7 @@ def allow_embed(): def headers_wrapper(fun): def wrapped_function(*args, **kwargs): response = fun(*args, **kwargs) - response['X-Frame-Options'] = "ALLOW" + response['X-Frame-Options'] = "ALLOW-FROM https://forum.nottinghamtec.co.uk/" return response return wrapped_function return headers_wrapper From 3e224a33a7d08daefb46788595e6ed6e7b83bcb3 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 17:14:29 +0100 Subject: [PATCH 23/42] Try just removing the header, this should work in all browsers --- RIGS/urls.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/RIGS/urls.py b/RIGS/urls.py index 1383558e..ea2681c5 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -2,6 +2,7 @@ from django.conf.urls import patterns, include, url from django.contrib.auth.decorators import login_required from RIGS import models, views, rigboard, finance, ical, versioning, forms from django.views.generic import RedirectView +from django.views.decorators.clickjacking import xframe_options_exempt from PyRIGS.decorators import permission_required_with_403 from PyRIGS.decorators import api_key_required @@ -15,7 +16,7 @@ urlpatterns = patterns('', url(r'^closemodal/$', views.CloseModal.as_view(), name='closemodal'), url('^user/login/$', 'RIGS.views.login', name='login'), - url('^user/login/embed/$', allow_embed()(views.login_embed), name='login_embed'), + url('^user/login/embed/$', xframe_options_exempt(views.login_embed), name='login_embed'), url(r'^user/password_reset/$', 'django.contrib.auth.views.password_reset', {'password_reset_form':forms.PasswordReset}), # People @@ -85,7 +86,7 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/embed/$', - allow_embed()(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), + xframe_options_exempt(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), name='event_embed'), url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), From 536842971d1f1b77d541a5811d06c6e0689fdfb0 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 17:19:18 +0100 Subject: [PATCH 24/42] Revert "Try just removing the header, this should work in all browsers" This reverts commit 3e224a33a7d08daefb46788595e6ed6e7b83bcb3. --- RIGS/urls.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/RIGS/urls.py b/RIGS/urls.py index ea2681c5..1383558e 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -2,7 +2,6 @@ from django.conf.urls import patterns, include, url from django.contrib.auth.decorators import login_required from RIGS import models, views, rigboard, finance, ical, versioning, forms from django.views.generic import RedirectView -from django.views.decorators.clickjacking import xframe_options_exempt from PyRIGS.decorators import permission_required_with_403 from PyRIGS.decorators import api_key_required @@ -16,7 +15,7 @@ urlpatterns = patterns('', url(r'^closemodal/$', views.CloseModal.as_view(), name='closemodal'), url('^user/login/$', 'RIGS.views.login', name='login'), - url('^user/login/embed/$', xframe_options_exempt(views.login_embed), name='login_embed'), + url('^user/login/embed/$', allow_embed()(views.login_embed), name='login_embed'), url(r'^user/password_reset/$', 'django.contrib.auth.views.password_reset', {'password_reset_form':forms.PasswordReset}), # People @@ -86,7 +85,7 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/embed/$', - xframe_options_exempt(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), + allow_embed()(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), name='event_embed'), url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), From 511ce554b1fe6b87925296cf3b40be81deccd38b Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 17:19:27 +0100 Subject: [PATCH 25/42] Revert "Try allow-from header (limited browser support)" This reverts commit 3f4c362bfab6b165dadc9b308f196ee1750fd9db. --- PyRIGS/decorators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PyRIGS/decorators.py b/PyRIGS/decorators.py index 42df533c..065ce853 100644 --- a/PyRIGS/decorators.py +++ b/PyRIGS/decorators.py @@ -10,7 +10,7 @@ def allow_embed(): def headers_wrapper(fun): def wrapped_function(*args, **kwargs): response = fun(*args, **kwargs) - response['X-Frame-Options'] = "ALLOW-FROM https://forum.nottinghamtec.co.uk/" + response['X-Frame-Options'] = "ALLOW" return response return wrapped_function return headers_wrapper From 73b8ce4addb864e887b097c050f77524bd85cf35 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 17:19:35 +0100 Subject: [PATCH 26/42] Revert "Added decorator for X-Frame header" This reverts commit 8a838aa4bd5e051ac34f2645221c1e4364008db5. --- PyRIGS/decorators.py | 11 ----------- RIGS/urls.py | 6 +++--- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/PyRIGS/decorators.py b/PyRIGS/decorators.py index 065ce853..4af93097 100644 --- a/PyRIGS/decorators.py +++ b/PyRIGS/decorators.py @@ -4,17 +4,6 @@ from django.template import RequestContext from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse -def allow_embed(): - # using django.views.decorators.clickjacking.xframe_options_exempt removes the header - # Safari has differnet defaults to other browsers, so we have to set it explicitly - def headers_wrapper(fun): - def wrapped_function(*args, **kwargs): - response = fun(*args, **kwargs) - response['X-Frame-Options'] = "ALLOW" - return response - return wrapped_function - return headers_wrapper - def user_passes_test_with_403(test_func, login_url=None, oembed_view=None): """ Decorator for views that checks that the user passes the given test. diff --git a/RIGS/urls.py b/RIGS/urls.py index 1383558e..8767d7b9 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -2,10 +2,10 @@ from django.conf.urls import patterns, include, url from django.contrib.auth.decorators import login_required from RIGS import models, views, rigboard, finance, ical, versioning, forms from django.views.generic import RedirectView +from django.views.decorators.clickjacking import xframe_options_exempt from PyRIGS.decorators import permission_required_with_403 from PyRIGS.decorators import api_key_required -from PyRIGS.decorators import allow_embed urlpatterns = patterns('', # Examples: @@ -15,7 +15,7 @@ urlpatterns = patterns('', url(r'^closemodal/$', views.CloseModal.as_view(), name='closemodal'), url('^user/login/$', 'RIGS.views.login', name='login'), - url('^user/login/embed/$', allow_embed()(views.login_embed), name='login_embed'), + url('^user/login/embed/$', xframe_options_exempt(views.login_embed), name='login_embed'), url(r'^user/password_reset/$', 'django.contrib.auth.views.password_reset', {'password_reset_form':forms.PasswordReset}), # People @@ -85,7 +85,7 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/embed/$', - allow_embed()(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), + xframe_options_exempt(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), name='event_embed'), url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), From ac7e85c24a7d62445d9dd07064c50599d14141ad Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 17:30:23 +0100 Subject: [PATCH 27/42] PEP8 and comments --- PyRIGS/decorators.py | 13 +++++++---- RIGS/urls.py | 23 +++++++++---------- ...edirect_embed.html => login_redirect.html} | 2 +- 3 files changed, 21 insertions(+), 17 deletions(-) rename templates/{login_redirect_embed.html => login_redirect.html} (94%) diff --git a/PyRIGS/decorators.py b/PyRIGS/decorators.py index 4af93097..0b4a72eb 100644 --- a/PyRIGS/decorators.py +++ b/PyRIGS/decorators.py @@ -4,12 +4,17 @@ from django.template import RequestContext from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse +from RIGS import models + + def user_passes_test_with_403(test_func, login_url=None, oembed_view=None): """ Decorator for views that checks that the user passes the given test. - Anonymous users will be redirected to login_url, while users that fail the test will be given a 403 error. + If embed_view is set, then a JS redirect will be used, and a application/json+oembed + meta tag set with the url of oembed_view + (oembed_view will be passed the kwargs from the main function) """ if not login_url: from django.conf import settings @@ -24,7 +29,7 @@ def user_passes_test_with_403(test_func, login_url=None, oembed_view=None): extra_context = {} extra_context['oembed_url'] = request.scheme + '://' + request.META['HTTP_HOST'] + reverse(oembed_view, kwargs=kwargs) extra_context['login_url'] = "{0}?{1}={2}".format(login_url, REDIRECT_FIELD_NAME, request.get_full_path()) - resp = render_to_response('login_redirect_embed.html', extra_context, context_instance=RequestContext(request)) + resp = render_to_response('login_redirect.html', extra_context, context_instance=RequestContext(request)) return resp else: return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, request.get_full_path())) @@ -37,6 +42,7 @@ def user_passes_test_with_403(test_func, login_url=None, oembed_view=None): return _checklogin return _dec + def permission_required_with_403(perm, login_url=None, oembed_view=None): """ Decorator for views that checks whether a user has a particular permission @@ -44,7 +50,6 @@ def permission_required_with_403(perm, login_url=None, oembed_view=None): """ return user_passes_test_with_403(lambda u: u.has_perm(perm), login_url=login_url, oembed_view=oembed_view) -from RIGS import models def api_key_required(function): """ @@ -73,4 +78,4 @@ def api_key_required(function): if user_object.api_key != key: return error_resp return function(request, *args, **kwargs) - return wrap \ No newline at end of file + return wrap diff --git a/RIGS/urls.py b/RIGS/urls.py index 8767d7b9..cbdef421 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import patterns, include, url +from django.conf.urls import patterns, url from django.contrib.auth.decorators import login_required from RIGS import models, views, rigboard, finance, ical, versioning, forms from django.views.generic import RedirectView @@ -16,7 +16,7 @@ urlpatterns = patterns('', url('^user/login/$', 'RIGS.views.login', name='login'), url('^user/login/embed/$', xframe_options_exempt(views.login_embed), name='login_embed'), - url(r'^user/password_reset/$', 'django.contrib.auth.views.password_reset', {'password_reset_form':forms.PasswordReset}), + url(r'^user/password_reset/$', 'django.contrib.auth.views.password_reset', {'password_reset_form': forms.PasswordReset}), # People url(r'^people/$', permission_required_with_403('RIGS.view_person')(views.PersonList.as_view()), @@ -73,7 +73,7 @@ urlpatterns = patterns('', url(r'^rigboard/calendar/$', login_required()(rigboard.WebCalendar.as_view()), name='web_calendar'), url(r'^rigboard/calendar/(?P(month|week|day))/$', login_required()(rigboard.WebCalendar.as_view()), name='web_calendar'), url(r'^rigboard/calendar/(?P(month|week|day))/(?P(\d{4}-\d{2}-\d{2}))/$', login_required()(rigboard.WebCalendar.as_view()), name='web_calendar'), - url(r'^rigboard/archive/$', RedirectView.as_view(permanent=True,pattern_name='event_archive')), + url(r'^rigboard/archive/$', RedirectView.as_view(permanent=True, pattern_name='event_archive')), url(r'^rigboard/activity/$', permission_required_with_403('RIGS.view_event')(versioning.ActivityTable.as_view()), name='activity_table'), @@ -109,7 +109,7 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.view_event')(versioning.VersionHistory.as_view()), name='event_history', kwargs={'model': models.Event}), - + # Finance url(r'^invoice/$', @@ -148,10 +148,10 @@ urlpatterns = patterns('', # User editing url(r'^user/$', login_required(views.ProfileDetail.as_view()), name='profile_detail'), url(r'^user/(?P\d+)/$', - permission_required_with_403('RIGS.view_profile')(views.ProfileDetail.as_view()), - name='profile_detail'), + permission_required_with_403('RIGS.view_profile')(views.ProfileDetail.as_view()), + name='profile_detail'), url(r'^user/edit/$', login_required(views.ProfileUpdateSelf.as_view()), - name='profile_update_self'), + name='profile_update_self'), url(r'^user/reset_api_key$', login_required(views.ResetApiKey.as_view(permanent=False)), name='reset_api_key'), # ICS Calendar - API key authentication @@ -162,8 +162,7 @@ urlpatterns = patterns('', url(r'^api/(?P\w+)/(?P\d+)/$', login_required(views.SecureAPIRequest.as_view()), name="api_secure"), # Legacy URL's - url(r'^rig/show/(?P\d+)/$', RedirectView.as_view(permanent=True,pattern_name='event_detail')), - url(r'^bookings/$', RedirectView.as_view(permanent=True,pattern_name='rigboard')), - url(r'^bookings/past/$', RedirectView.as_view(permanent=True,pattern_name='event_archive')), -) - + url(r'^rig/show/(?P\d+)/$', RedirectView.as_view(permanent=True, pattern_name='event_detail')), + url(r'^bookings/$', RedirectView.as_view(permanent=True, pattern_name='rigboard')), + url(r'^bookings/past/$', RedirectView.as_view(permanent=True, pattern_name='event_archive')), + ) diff --git a/templates/login_redirect_embed.html b/templates/login_redirect.html similarity index 94% rename from templates/login_redirect_embed.html rename to templates/login_redirect.html index afd3487c..d2dcb0b2 100644 --- a/templates/login_redirect_embed.html +++ b/templates/login_redirect.html @@ -12,7 +12,7 @@ {% if oembed_url %} + title="RIGS Embed" /> {% endif %} {% endblock %} From 008edd8bee0414a1743e9e1a0f85b27a90e395e7 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 19:32:45 +0100 Subject: [PATCH 28/42] Lots of tidying up, moved inline CSS into SCSS --- RIGS/static/css/screen.css | 2 +- RIGS/static/scss/screen.scss | 22 +++ RIGS/templates/RIGS/event_embed.html | 172 +++++++++++------------- templates/base_embed.html | 17 +-- templates/registration/login.html | 11 +- templates/registration/login_embed.html | 4 +- templates/registration/loginform.html | 10 +- 7 files changed, 116 insertions(+), 122 deletions(-) diff --git a/RIGS/static/css/screen.css b/RIGS/static/css/screen.css index d7ed2f52..de7e6c67 100644 --- a/RIGS/static/css/screen.css +++ b/RIGS/static/css/screen.css @@ -16,4 +16,4 @@ * Portions copyright Addy Osmani, jQuery UI & Twitter Bootstrap * Created the LESS version by $dharapvj * Released under MIT - */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}} + */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%}html.embedded body{min-height:100%;padding:0}html.embedded .embed_container{border:5px solid #e9e9e9;padding-top:12px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px} diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index be36ebbb..fef12c60 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -147,3 +147,25 @@ ins { }; } } + +html.embedded{ + min-height:100%; + + body{ + min-height:100%; + padding:0; + } + + .embed_container{ + border:5px solid #e9e9e9; + padding-top:12px; + min-height:100%; + width:100%; + } + .source{ + background: url('/static/imgs/pyrigs-avatar.png') no-repeat; + background-size: 16px 16px; + padding-left: 20px; + } + +} \ No newline at end of file diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index 71b69217..3eefd00a 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -3,100 +3,87 @@ {% block content %} - - -
-
- Rig Information Gathering System -
- -
- - - {% if object.mic %} -
- {{ object.mic.initials }}
- -
- {% elif object.is_rig %} - +
+ + {% if object.mic %} +
+ {{ object.mic.initials }}
+ +
+ {% elif object.is_rig %} + + {% endif %} +
+ +

+ + {% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} + | {{ object.name }} + {% if object.venue %} + at {{ object.venue }} {% endif %} - -

- - - - {% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} - | {{ object.name }} - {% if object.venue %} - at {{ object.venue }} - {% endif %} +

+

+ {{ object.start_date|date:"D d/m/Y" }} + {% if object.end_date and object.end_date != object.start_date %} + – {{ object.end_date|date:"D d/m/Y" }} + {% endif %} + ({{ object.get_status_display }}) +

- - - -

- {{ object.start_date|date:"D d/m/Y" }} - {% if object.end_date and object.end_date != object.start_date %} - – {{ object.end_date|date:"D d/m/Y" }} - {% endif %} - ({{ object.get_status_display }}) -

- - {% if object.is_rig %} -
- {{ object.person.name }} - {% if object.organisation %} - for {{ object.organisation.name }} - {% endif %} - {% if object.dry_hire %}Dry Hire{% endif %} -
+ {% if object.is_rig %} +
+ {{ object.person.name }} + {% if object.organisation %} + for {{ object.organisation.name }} {% endif %} + {% if object.dry_hire %}Dry Hire{% endif %} +
+ {% endif %} - - - {% if object.mic %} - - - - - {% endif %} - {% if object.description %} - - - - - {% endif %} - {% if object.meet_at %} - - - - - {% endif %} - {% if object.access_at %} - - - - - {% endif %} - {% if object.has_start_time %} - - - - - {% endif %} - {% if object.has_end_time%}{% if object.start_date != object.end_date or object.start_time != object.end_time %} + +
MIC{{object.mic.name}}
Description{{ object.description|linebreaksbr }}
Crew meet{{ object.meet_at|date:"H:i" }} {{ object.meet_at|date:"(Y-m-d)" }}
Access at{{ object.access_at|date:"H:i" }} {{ object.access_at|date:"(Y-m-d)" }}
Event starts - {{ object.start_time|date:"H:i" }} - {{ object.start_date|date:"(Y-m-d)" }}
-
+ {% if object.mic %} + + + + + {% endif %} + {% if object.description %} + + + + + {% endif %} + {% if object.meet_at %} + + + + + {% endif %} + {% if object.access_at %} + + + + + {% endif %} + {% if object.has_start_time %} + + + + + {% endif %} + {% if object.has_end_time%} + {% if object.start_date != object.end_date or object.start_time != object.end_time %} - {% endif %}{% endif %} -
MIC{{object.mic.name}}
Description{{ object.description|linebreaksbr }}
Crew meet{{ object.meet_at|date:"H:i" }} {{ object.meet_at|date:"(Y-m-d)" }}
Access at{{ object.access_at|date:"H:i" }} {{ object.access_at|date:"(Y-m-d)" }}
Event starts + {{ object.start_time|date:"H:i" }} + {{ object.start_date|date:"(Y-m-d)" }}
+
Event ends @@ -104,10 +91,11 @@ {{ object.end_date|date:"(Y-m-d)" }}
-
-
+ {% endif %} + {% endif %} +
+ + {% endblock %} \ No newline at end of file diff --git a/templates/base_embed.html b/templates/base_embed.html index da3f3480..fe987b90 100644 --- a/templates/base_embed.html +++ b/templates/base_embed.html @@ -1,12 +1,12 @@ {% load static from staticfiles %} {% load raven %} - + lang="{% firstof LANGUAGE_CODE 'en' %}" + class="embedded"> @@ -14,7 +14,6 @@ - - diff --git a/templates/registration/login.html b/templates/registration/login.html index f9db2e81..5dd85fe7 100644 --- a/templates/registration/login.html +++ b/templates/registration/login.html @@ -2,14 +2,9 @@ {% block title %}Login{% endblock %} -{% block extra-head %} - {% if next %} - - {% endif %} -{% endblock %} - {% block content %} +
+

Rig Information Gathering System

+
{% include 'registration/loginform.html' %} {% endblock %} \ No newline at end of file diff --git a/templates/registration/login_embed.html b/templates/registration/login_embed.html index f14a1d28..32fbb8dd 100644 --- a/templates/registration/login_embed.html +++ b/templates/registration/login_embed.html @@ -4,7 +4,7 @@ {% block title %}Login{% endblock %} {% block content %} -
+

Rig Information Gathering System

@@ -22,7 +22,7 @@ {% render_field form.password class+="form-control" placeholder=form.password.label %}
- + diff --git a/templates/registration/loginform.html b/templates/registration/loginform.html index 4ec09d2c..94343065 100644 --- a/templates/registration/loginform.html +++ b/templates/registration/loginform.html @@ -12,9 +12,11 @@ {% render_field form.password class+="form-control" placeholder=form.password.label %} - Register - Forgotten Password - - + \ No newline at end of file From fc110a0bff0fae58ec058316bae974102ebf64f8 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 19:55:31 +0100 Subject: [PATCH 29/42] Fixed padding --- RIGS/static/css/screen.css | 2 +- RIGS/static/scss/screen.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/RIGS/static/css/screen.css b/RIGS/static/css/screen.css index de7e6c67..884979f0 100644 --- a/RIGS/static/css/screen.css +++ b/RIGS/static/css/screen.css @@ -16,4 +16,4 @@ * Portions copyright Addy Osmani, jQuery UI & Twitter Bootstrap * Created the LESS version by $dharapvj * Released under MIT - */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%}html.embedded body{min-height:100%;padding:0}html.embedded .embed_container{border:5px solid #e9e9e9;padding-top:12px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px} + */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%}html.embedded body{min-height:100%;padding:0}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px} diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index fef12c60..93a835d0 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -158,7 +158,7 @@ html.embedded{ .embed_container{ border:5px solid #e9e9e9; - padding-top:12px; + padding:12px 0px; min-height:100%; width:100%; } From 0d92c3812ac2fe34343ad9663e028f4e8ba1b472 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 19:56:56 +0100 Subject: [PATCH 30/42] Tidied up python --- RIGS/rigboard.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 91265871..9f6747d6 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -48,26 +48,30 @@ class WebCalendar(generic.TemplateView): class EventDetail(generic.DetailView): model = models.Event + class EventOembed(generic.View): model = models.Event def get(self, request, pk=None): - base_url = request.scheme + '://' + request.META['HTTP_HOST'] - full_url = base_url+reverse('event_embed', args=[pk]) + embed_url = reverse('event_embed', args=[pk]) + + full_url = "{0}://{1}{2}".format(request.scheme, request.META['HTTP_HOST'], embed_url) data = { 'html': ''.format(full_url), 'version': '1.0', 'type': 'rich', } - # need to do this: @xframe_options_exempt + json = simplejson.JSONEncoderForHTML().encode(data) return HttpResponse(json, content_type="application/json") + class EventEmbed(EventDetail): template_name = 'RIGS/event_embed.html' + class EventCreate(generic.CreateView): model = models.Event form_class = forms.EventForm From b93a716a3bf43dc3a24848d46823358a481c564a Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 20:37:01 +0100 Subject: [PATCH 31/42] Added unit tests --- RIGS/rigboard.py | 5 ++- RIGS/test_unit.py | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 9f6747d6..618f6bea 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -54,8 +54,7 @@ class EventOembed(generic.View): def get(self, request, pk=None): - embed_url = reverse('event_embed', args=[pk]) - + embed_url = reverse('event_embed', args=[pk]) full_url = "{0}://{1}{2}".format(request.scheme, request.META['HTTP_HOST'], embed_url) data = { @@ -84,7 +83,7 @@ class EventCreate(generic.CreateView): form = context['form'] if re.search('"-\d+"', form['items_json'].value()): messages.info(self.request, "Your item changes have been saved. Please fix the errors and save the event.") - + # Get some other objects to include in the form. Used when there are errors but also nice and quick. for field, model in form.related_models.iteritems(): diff --git a/RIGS/test_unit.py b/RIGS/test_unit.py index f0c778b3..47d01bae 100644 --- a/RIGS/test_unit.py +++ b/RIGS/test_unit.py @@ -213,6 +213,83 @@ class TestInvoiceDelete(TestCase): # Check this didn't work self.assertTrue(models.Invoice.objects.get(pk=self.invoices[1].pk)) + +class TestEmbeddedViews(TestCase): + @classmethod + def setUpTestData(cls): + cls.profile = models.Profile.objects.create(username="testuser1", email="1@test.com", is_superuser=True, is_active=True, is_staff=True) + + cls.events = { + 1: models.Event.objects.create(name="TE E1", start_date=date.today()), + 2: models.Event.objects.create(name="TE E2", start_date=date.today()) + } + + cls.invoices = { + 1: models.Invoice.objects.create(event=cls.events[1]), + 2: models.Invoice.objects.create(event=cls.events[2]) + } + + cls.payments = { + 1: models.Payment.objects.create(invoice=cls.invoices[1], date=date.today(), amount=12.34, method=models.Payment.CASH) + } + + def setUp(self): + self.profile.set_password('testuser') + self.profile.save() + + def testLoginRedirect(self): + request_url = reverse('event_embed', kwargs={'pk': 1}) + expected_url = "{0}?next={1}".format(reverse('login_embed'), request_url) + + # Request the page and check it redirects + response = self.client.get(request_url, follow=True) + self.assertRedirects(response, expected_url, status_code=302, target_status_code=200) + + # Now login + self.assertTrue(self.client.login(username=self.profile.username, password='testuser')) + + # And check that it no longer redirects + response = self.client.get(request_url, follow=True) + self.assertEqual(len(response.redirect_chain), 0) + + def testXFrameHeaders(self): + event_url = reverse('event_embed', kwargs={'pk': 1}) + login_url = reverse('login_embed') + + self.assertTrue(self.client.login(username=self.profile.username, password='testuser')) + + response = self.client.get(event_url, follow=True) + with self.assertRaises(KeyError): + response._headers["X-Frame-Options"] + + response = self.client.get(login_url, follow=True) + with self.assertRaises(KeyError): + response._headers["X-Frame-Options"] + + def testOEmbed(self): + event_url = reverse('event_detail', kwargs={'pk': 1}) + event_embed_url = reverse('event_embed', kwargs={'pk': 1}) + oembed_url = reverse('event_oembed', kwargs={'pk': 1}) + + alt_oembed_url = reverse('event_oembed', kwargs={'pk': 999}) + alt_event_embed_url = reverse('event_embed', kwargs={'pk': 999}) + + # Test the meta tag is in place + response = self.client.get(event_url, follow=True, HTTP_HOST='example.com') + self.assertContains(response, ' Date: Sat, 8 Oct 2016 21:38:12 +0100 Subject: [PATCH 32/42] Made pretty, and made embedding accessible to non-keyholders --- PyRIGS/decorators.py | 2 +- RIGS/static/css/screen.css | 2 +- RIGS/static/scss/screen.scss | 11 +++ RIGS/templates/RIGS/event_embed.html | 119 ++++++++++++++------------- RIGS/urls.py | 2 +- 5 files changed, 75 insertions(+), 61 deletions(-) diff --git a/PyRIGS/decorators.py b/PyRIGS/decorators.py index 0b4a72eb..055901ca 100644 --- a/PyRIGS/decorators.py +++ b/PyRIGS/decorators.py @@ -27,7 +27,7 @@ def user_passes_test_with_403(test_func, login_url=None, oembed_view=None): elif not request.user.is_authenticated(): if oembed_view is not None: extra_context = {} - extra_context['oembed_url'] = request.scheme + '://' + request.META['HTTP_HOST'] + reverse(oembed_view, kwargs=kwargs) + extra_context['oembed_url'] = "{0}://{1}{2}".format(request.scheme, request.META['HTTP_HOST'], reverse(oembed_view, kwargs=kwargs)) extra_context['login_url'] = "{0}?{1}={2}".format(login_url, REDIRECT_FIELD_NAME, request.get_full_path()) resp = render_to_response('login_redirect.html', extra_context, context_instance=RequestContext(request)) return resp diff --git a/RIGS/static/css/screen.css b/RIGS/static/css/screen.css index 884979f0..10b589b7 100644 --- a/RIGS/static/css/screen.css +++ b/RIGS/static/css/screen.css @@ -16,4 +16,4 @@ * Portions copyright Addy Osmani, jQuery UI & Twitter Bootstrap * Created the LESS version by $dharapvj * Released under MIT - */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%}html.embedded body{min-height:100%;padding:0}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px} + */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%}html.embedded body{min-height:100%;padding:0}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:10px}html.embedded p{margin:2px 0}html.embedded .event-mic-photo{max-width:3em} diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index 93a835d0..bd3a0ffa 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -168,4 +168,15 @@ html.embedded{ padding-left: 20px; } + h3{ + margin-top:10px; + margin-bottom:10px; + } + p{ + margin:2px 0; + } + + .event-mic-photo{ + max-width: 3em; + } } \ No newline at end of file diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index 3eefd00a..b03431ee 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -30,69 +30,72 @@

- {{ object.start_date|date:"D d/m/Y" }} - {% if object.end_date and object.end_date != object.start_date %} - – {{ object.end_date|date:"D d/m/Y" }} + {{ object.start_date|date:"D d/m/Y" }} + {% if object.has_start_time %} + {{ object.start_time|date:"H:i" }} + {% endif %} + {% if object.end_date or object.has_end_time %} + – + {% endif %} + {% if object.end_date and object.end_date != object.start_date %} + {{ object.end_date|date:"D d/m/Y" }} + {% endif %} + {% if object.has_end_time %} + {{ object.end_time|date:"H:i" }} {% endif %} - ({{ object.get_status_display }})

- {% if object.is_rig %} -
- {{ object.person.name }} - {% if object.organisation %} - for {{ object.organisation.name }} +
+
+

+ Status: + {{ object.get_status_display }} +

+

+ {% if object.is_rig %} + Client: {{ object.person.name }} + {% if object.organisation %} + for {{ object.organisation.name }} + {% endif %} + {% if object.dry_hire %}Dry Hire{% endif %} + {% else %} + Non-Rig + {% endif %} +

+

+ MIC: + {% if object.mic %} + {{object.mic.name}} + {% else %} + None + {% endif %} +

+
+
+ + {% if object.meet_at %} +

+ Crew meet: + {{ object.meet_at|date:"H:i" }} {{ object.meet_at|date:"(Y-m-d)" }} +

{% endif %} - {% if object.dry_hire %}Dry Hire{% endif %} -
+ {% if object.access_at %} +

+ Access at: + {{ object.access_at|date:"H:i" }} {{ object.access_at|date:"(Y-m-d)" }} +

+ {% endif %} +

+ Last updated: + {{ object.last_edited_at }} by "{{ object.last_edited_by.initials }}" +

+ + + {% if object.description %} + Description: + {{ object.description|linebreaksbr }} {% endif %} - - - - {% if object.mic %} - - - - - {% endif %} - {% if object.description %} - - - - - {% endif %} - {% if object.meet_at %} - - - - - {% endif %} - {% if object.access_at %} - - - - - {% endif %} - {% if object.has_start_time %} - - - - - {% endif %} - {% if object.has_end_time%} - {% if object.start_date != object.end_date or object.start_time != object.end_time %} - - - - - {% endif %} - {% endif %} +
MIC{{object.mic.name}}
Description{{ object.description|linebreaksbr }}
Crew meet{{ object.meet_at|date:"H:i" }} {{ object.meet_at|date:"(Y-m-d)" }}
Access at{{ object.access_at|date:"H:i" }} {{ object.access_at|date:"(Y-m-d)" }}
Event starts - {{ object.start_time|date:"H:i" }} - {{ object.start_date|date:"(Y-m-d)" }}
-
Event ends - {{ object.end_time|date:"H:i" }} - {{ object.end_date|date:"(Y-m-d)" }} -
diff --git a/RIGS/urls.py b/RIGS/urls.py index cbdef421..15bb0990 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -85,7 +85,7 @@ urlpatterns = patterns('', permission_required_with_403('RIGS.view_event', oembed_view="event_oembed")(rigboard.EventDetail.as_view()), name='event_detail'), url(r'^event/(?P\d+)/embed/$', - xframe_options_exempt(permission_required_with_403('RIGS.view_event', login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), + xframe_options_exempt(login_required(login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), name='event_embed'), url(r'^event/(?P\d+)/oembed_json/$', rigboard.EventOembed.as_view(), From 879ecd1f6d2ef579182d9a29e90e21305f29d44a Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 21:49:03 +0100 Subject: [PATCH 33/42] Made font size smaller in embed --- RIGS/static/css/screen.css | 2 +- RIGS/static/scss/screen.scss | 7 +++++-- RIGS/templates/RIGS/event_embed.html | 16 ++++++++-------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/RIGS/static/css/screen.css b/RIGS/static/css/screen.css index 10b589b7..523fd217 100644 --- a/RIGS/static/css/screen.css +++ b/RIGS/static/css/screen.css @@ -16,4 +16,4 @@ * Portions copyright Addy Osmani, jQuery UI & Twitter Bootstrap * Created the LESS version by $dharapvj * Released under MIT - */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%}html.embedded body{min-height:100%;padding:0}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:10px}html.embedded p{margin:2px 0}html.embedded .event-mic-photo{max-width:3em} + */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%}html.embedded body{min-height:100%;padding:0}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index bd3a0ffa..464b346e 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -162,6 +162,7 @@ html.embedded{ min-height:100%; width:100%; } + .source{ background: url('/static/imgs/pyrigs-avatar.png') no-repeat; background-size: 16px 16px; @@ -170,10 +171,12 @@ html.embedded{ h3{ margin-top:10px; - margin-bottom:10px; + margin-bottom:5px; } + p{ - margin:2px 0; + margin-bottom:2px; + font-size: 11px; } .event-mic-photo{ diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index b03431ee..bef2e096 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -12,7 +12,6 @@ {% if object.mic %}
- {{ object.mic.initials }}
{% elif object.is_rig %} @@ -27,9 +26,7 @@ {% if object.venue %} at {{ object.venue }} {% endif %} - - -

+
{{ object.start_date|date:"D d/m/Y" }} {% if object.has_start_time %} {{ object.start_time|date:"H:i" }} @@ -43,10 +40,11 @@ {% if object.has_end_time %} {{ object.end_time|date:"H:i" }} {% endif %} -

+ +
-
+

Status: {{ object.get_status_display }} @@ -57,7 +55,7 @@ {% if object.organisation %} for {{ object.organisation.name }} {% endif %} - {% if object.dry_hire %}Dry Hire{% endif %} + {% if object.dry_hire %}(Dry Hire){% endif %} {% else %} Non-Rig {% endif %} @@ -71,7 +69,7 @@ {% endif %}

-
+
{% if object.meet_at %}

@@ -92,8 +90,10 @@

{% if object.description %} +

Description: {{ object.description|linebreaksbr }} +

{% endif %} From 5949ff74ecce0c92289a062e772f6b8f1a2d5be0 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 8 Oct 2016 22:55:27 +0100 Subject: [PATCH 34/42] Added javascript cookie check, if blocked, login in new tab --- RIGS/rigboard.py | 2 +- RIGS/static/css/screen.css | 2 +- RIGS/static/scss/screen.scss | 11 +++++++++-- templates/base_embed.html | 2 +- templates/registration/login_embed.html | 25 ++++++++++++++++++++++--- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 618f6bea..fc14a89e 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -58,7 +58,7 @@ class EventOembed(generic.View): full_url = "{0}://{1}{2}".format(request.scheme, request.META['HTTP_HOST'], embed_url) data = { - 'html': ''.format(full_url), + 'html': ''.format(full_url), 'version': '1.0', 'type': 'rich', } diff --git a/RIGS/static/css/screen.css b/RIGS/static/css/screen.css index 523fd217..04123b55 100644 --- a/RIGS/static/css/screen.css +++ b/RIGS/static/css/screen.css @@ -16,4 +16,4 @@ * Portions copyright Addy Osmani, jQuery UI & Twitter Bootstrap * Created the LESS version by $dharapvj * Released under MIT - */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%}html.embedded body{min-height:100%;padding:0}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} + */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%;display:table;background:#e9e9e9;width:100%}html.embedded body{padding:0;display:table-cell;vertical-align:middle;background:none;width:100%}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%;background:#fff}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index 464b346e..e31bb58e 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -150,10 +150,16 @@ ins { html.embedded{ min-height:100%; + display: table; + background: #e9e9e9; + width: 100%; body{ - min-height:100%; padding:0; + display: table-cell; + vertical-align: middle; + background: none; + width:100%; } .embed_container{ @@ -161,8 +167,9 @@ html.embedded{ padding:12px 0px; min-height:100%; width:100%; + background: #fff; } - + .source{ background: url('/static/imgs/pyrigs-avatar.png') no-repeat; background-size: 16px 16px; diff --git a/templates/base_embed.html b/templates/base_embed.html index fe987b90..24259ee5 100644 --- a/templates/base_embed.html +++ b/templates/base_embed.html @@ -26,7 +26,7 @@ {% include "analytics.html" %} -
+
{% block content %} {% endblock %} diff --git a/templates/registration/login_embed.html b/templates/registration/login_embed.html index 32fbb8dd..7f50a7bc 100644 --- a/templates/registration/login_embed.html +++ b/templates/registration/login_embed.html @@ -3,6 +3,18 @@ {% block title %}Login{% endblock %} +{% block js %} + +{% endblock %} + {% block content %}

Rig Information Gathering System

@@ -10,9 +22,11 @@ {% include 'form_errors.html' %} + +
-
{% csrf_token %} + {% csrf_token %}
{% render_field form.username class+="form-control" placeholder=form.username.label %} @@ -21,9 +35,14 @@ {% render_field form.password class+="form-control" placeholder=form.password.label %}
- - +
+ + +
+
From 2d5f76852334be318242477d69ff5ea9d519abaf Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sun, 9 Oct 2016 10:32:58 +0100 Subject: [PATCH 35/42] Added cookie check with nice error message --- RIGS/views.py | 22 ++++++++++++++++++++-- templates/base_embed.html | 10 ++++++++++ templates/registration/login_embed.html | 15 --------------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/RIGS/views.py b/RIGS/views.py index fded9865..c0186bed 100644 --- a/RIGS/views.py +++ b/RIGS/views.py @@ -12,6 +12,8 @@ from django.contrib import messages import datetime, pytz import operator from registration.views import RegistrationView +from django.views.decorators.csrf import csrf_exempt + from RIGS import models, forms @@ -29,21 +31,37 @@ class Index(generic.TemplateView): def login(request, **kwargs): if request.user.is_authenticated(): next = request.REQUEST.get('next', '/') - return HttpResponseRedirect(request.REQUEST.get('next', '/')) + return HttpResponseRedirect(next) else: from django.contrib.auth.views import login return login(request) + +# This view should be exempt from requiring CSRF token. +# Then we can check for it and show a nice error +# Don't worry, django.contrib.auth.views.login will +# check for it before logging the user in +@csrf_exempt def login_embed(request, **kwargs): + print("Running LOGIN") if request.user.is_authenticated(): next = request.REQUEST.get('next', '/') - return HttpResponseRedirect(request.REQUEST.get('next', '/')) + return HttpResponseRedirect(next) else: from django.contrib.auth.views import login + if request.method == "POST": + csrf_cookie = request.COOKIES.get('csrftoken', None) + + if csrf_cookie is None: + messages.warning(request, 'Cookies do not seem to be enabled. Try logging in using a new tab.') + request.method = 'GET' # Render the page without trying to login + return login(request, template_name="registration/login_embed.html") + + """ Called from a modal window (e.g. when an item is submitted to an event/invoice). May optionally also include some javascript in a success message to cause a load of diff --git a/templates/base_embed.html b/templates/base_embed.html index 24259ee5..bc7daa1a 100644 --- a/templates/base_embed.html +++ b/templates/base_embed.html @@ -28,6 +28,16 @@
+ {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %} + {% block content %} {% endblock %}
diff --git a/templates/registration/login_embed.html b/templates/registration/login_embed.html index 7f50a7bc..64ef8437 100644 --- a/templates/registration/login_embed.html +++ b/templates/registration/login_embed.html @@ -3,18 +3,6 @@ {% block title %}Login{% endblock %} -{% block js %} - -{% endblock %} - {% block content %}

Rig Information Gathering System

@@ -36,9 +24,6 @@ {% render_field form.password class+="form-control" placeholder=form.password.label %}
-
From 3fc04616b3c0f36977e9375b8d8fbbd1bc981bb7 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sun, 9 Oct 2016 10:36:30 +0100 Subject: [PATCH 36/42] Added test for cookie warning --- RIGS/test_unit.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/RIGS/test_unit.py b/RIGS/test_unit.py index 47d01bae..82a7acca 100644 --- a/RIGS/test_unit.py +++ b/RIGS/test_unit.py @@ -252,6 +252,11 @@ class TestEmbeddedViews(TestCase): response = self.client.get(request_url, follow=True) self.assertEqual(len(response.redirect_chain), 0) + def testLoginCookieWarning(self): + login_url = reverse('login_embed') + response = self.client.post(login_url, follow=True) + self.assertContains(response, "Cookies do not seem to be enabled") + def testXFrameHeaders(self): event_url = reverse('event_embed', kwargs={'pk': 1}) login_url = reverse('login_embed') From 88954eca5c4bbc884c4c2bf95c505b0d721a1718 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sun, 9 Oct 2016 10:40:18 +0100 Subject: [PATCH 37/42] Removed weird background from embed --- RIGS/static/css/screen.css | 2 +- RIGS/static/scss/screen.scss | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/RIGS/static/css/screen.css b/RIGS/static/css/screen.css index 04123b55..682c3e08 100644 --- a/RIGS/static/css/screen.css +++ b/RIGS/static/css/screen.css @@ -16,4 +16,4 @@ * Portions copyright Addy Osmani, jQuery UI & Twitter Bootstrap * Created the LESS version by $dharapvj * Released under MIT - */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%;display:table;background:#e9e9e9;width:100%}html.embedded body{padding:0;display:table-cell;vertical-align:middle;background:none;width:100%}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%;background:#fff}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} + */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%;display:table;width:100%}html.embedded body{padding:0;display:table-cell;vertical-align:middle;width:100%}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index e31bb58e..be753970 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -151,14 +151,12 @@ ins { html.embedded{ min-height:100%; display: table; - background: #e9e9e9; width: 100%; body{ padding:0; display: table-cell; vertical-align: middle; - background: none; width:100%; } @@ -167,7 +165,6 @@ html.embedded{ padding:12px 0px; min-height:100%; width:100%; - background: #fff; } .source{ From f61158b9c07c0d32bd0faad390a94f2c40555934 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sun, 9 Oct 2016 11:20:43 +0100 Subject: [PATCH 38/42] Rounded corners, transparent background --- RIGS/static/css/screen.css | 2 +- RIGS/static/scss/screen.scss | 1 + RIGS/templates/RIGS/event_embed.html | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/RIGS/static/css/screen.css b/RIGS/static/css/screen.css index 682c3e08..3e1d4545 100644 --- a/RIGS/static/css/screen.css +++ b/RIGS/static/css/screen.css @@ -16,4 +16,4 @@ * Portions copyright Addy Osmani, jQuery UI & Twitter Bootstrap * Created the LESS version by $dharapvj * Released under MIT - */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%;display:table;width:100%}html.embedded body{padding:0;display:table-cell;vertical-align:middle;width:100%}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} + */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%;display:table;width:100%}html.embedded body{padding:0;display:table-cell;vertical-align:middle;width:100%;background:none}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index be753970..b0a677ac 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -158,6 +158,7 @@ html.embedded{ display: table-cell; vertical-align: middle; width:100%; + background:none; } .embed_container{ diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index bef2e096..e908e9fd 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -11,7 +11,7 @@
{% if object.mic %} -
+
{% elif object.is_rig %} From 68a46af1a86cc34d54f802542d46f39269216bce Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sun, 9 Oct 2016 11:22:34 +0100 Subject: [PATCH 39/42] Fixed rounded corner fail --- RIGS/templates/RIGS/event_embed.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index e908e9fd..88d7a95d 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -11,8 +11,8 @@
{% if object.mic %} -
- +
+
{% elif object.is_rig %} From e0cb2f4925b8554fd39f2617f616df290edc2704 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sun, 9 Oct 2016 11:26:32 +0100 Subject: [PATCH 40/42] Linked RIGS title --- RIGS/static/css/screen.css | 2 +- RIGS/static/scss/screen.scss | 1 + RIGS/templates/RIGS/event_embed.html | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/RIGS/static/css/screen.css b/RIGS/static/css/screen.css index 3e1d4545..41bd5f39 100644 --- a/RIGS/static/css/screen.css +++ b/RIGS/static/css/screen.css @@ -16,4 +16,4 @@ * Portions copyright Addy Osmani, jQuery UI & Twitter Bootstrap * Created the LESS version by $dharapvj * Released under MIT - */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%;display:table;width:100%}html.embedded body{padding:0;display:table-cell;vertical-align:middle;width:100%;background:none}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} + */.ui-tooltip{display:block;font-size:11px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8;position:absolute;visibility:visible;z-index:1070;max-width:200px;background:#000;border:1px solid #000;color:#fff;padding:3px 8px;text-align:center;text-decoration:none;-moz-box-shadow:inset 0 1px 0 #000;-webkit-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border-width:1px}.ui-tooltip .arrow{overflow:hidden;position:absolute;margin-left:0;height:20px;width:20px}.ui-tooltip .arrow.bottom{top:100%;left:38%}.ui-tooltip .arrow.bottom:after{border-top:8px solid #000;border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.ui-tooltip .arrow.top{top:-50%;bottom:22px;left:42%}.ui-tooltip .arrow.top:after{border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #000;border-left:6px solid transparent}.ui-tooltip .arrow.left{top:25%;left:-15%;right:0;bottom:-16px}.ui-tooltip .arrow.left:after{width:0;border-top:6px solid transparent;border-right:6px solid #000;border-bottom:6px solid transparent;border-left:6px solid transparent}.ui-tooltip .arrow.right{top:26%;left:100%;right:0;bottom:-16px;margin-left:1px}.ui-tooltip .arrow.right:after{width:0;border-top:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #000}.ui-tooltip .arrow:after{content:" ";position:absolute;height:0;left:0;top:0;width:0;margin-left:0;bottom:12px;box-shadow:6px 5px 9px -9px #000}body,.pad-top{padding-top:50px}#content{padding:40px 15px}#userdropdown>li{padding:0 0.3em}#userdropdown>li .media-object,#activity .media-object{max-width:3em}.table tbody>tr>td.vert-align{vertical-align:middle}.align-right{text-align:right}textarea{width:100%;resize:vertical}.btn-page,.btn-pad{margin:0 0 0.5em}.custom-combobox{display:block}.event-mic-photo{max-width:2em}.item-description{margin-left:1em}.overflow-ellipsis{text-overflow:ellipsis;display:inline-block;max-width:100%;overflow:hidden}.modal-dialog{z-index:inherit}.panel-default .default{background-color:#f5f5f5}del{background-color:#f2dede;border-radius:3px}ins{background-color:#dff0d8;border-radius:3px}.loading-animation{position:relative;margin:30px auto 0}.loading-animation .circle{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;animation:spinPulse 1s infinite ease-in-out}.loading-animation .circle1{background-color:transparent;border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid transparent;border-right:5px solid transparent;border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:relative;top:-40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;animation:spinoffPulse 1s infinite linear}@-moz-keyframes spinPulse{0%{-moz-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@keyframes spinPulse{0%{-moz-transform:rotate(160deg);-ms-transform:rotate(160deg);-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #2187e7}50%{-moz-transform:rotate(145deg);-ms-transform:rotate(145deg);-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}100%{-moz-transform:rotate(-320deg);-ms-transform:rotate(-320deg);-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}@-moz-keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinoffPulse{0%{-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}html.embedded{min-height:100%;display:table;width:100%}html.embedded body{padding:0;display:table-cell;vertical-align:middle;width:100%;background:none}html.embedded .embed_container{border:5px solid #e9e9e9;padding:12px 0px;min-height:100%;width:100%}html.embedded .source{background:url("/static/imgs/pyrigs-avatar.png") no-repeat;background-size:16px 16px;padding-left:20px;color:#000}html.embedded h3{margin-top:10px;margin-bottom:5px}html.embedded p{margin-bottom:2px;font-size:11px}html.embedded .event-mic-photo{max-width:3em} diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index b0a677ac..074b23cc 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -172,6 +172,7 @@ html.embedded{ background: url('/static/imgs/pyrigs-avatar.png') no-repeat; background-size: 16px 16px; padding-left: 20px; + color: #000; } h3{ diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index 88d7a95d..c689fee7 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -5,7 +5,9 @@
- Rig Information Gathering System + + Rig Information Gathering System +
From 0541a70cecda45ceb312e0610c340d1a0b9fddb4 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sun, 9 Oct 2016 11:30:13 +0100 Subject: [PATCH 41/42] Fixed event title link (_blank) --- RIGS/templates/RIGS/event_embed.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index c689fee7..f7c13b93 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -22,7 +22,7 @@

- + {% if object.is_rig %}N{{ object.pk|stringformat:"05d" }}{% else %}{{ object.pk }}{% endif %} | {{ object.name }} {% if object.venue %} From 92c77c07e0b084e65528b77d8b5a0b748d23a9b3 Mon Sep 17 00:00:00 2001 From: Tom Price Date: Tue, 11 Oct 2016 18:47:13 +0100 Subject: [PATCH 42/42] Fix tailing line breaks --- RIGS/static/scss/screen.scss | 2 +- RIGS/templates/RIGS/event_embed.html | 2 +- templates/base_embed.html | 2 +- templates/registration/login_embed.html | 2 +- templates/registration/loginform.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/RIGS/static/scss/screen.scss b/RIGS/static/scss/screen.scss index 074b23cc..953027a9 100644 --- a/RIGS/static/scss/screen.scss +++ b/RIGS/static/scss/screen.scss @@ -188,4 +188,4 @@ html.embedded{ .event-mic-photo{ max-width: 3em; } -} \ No newline at end of file +} diff --git a/RIGS/templates/RIGS/event_embed.html b/RIGS/templates/RIGS/event_embed.html index f7c13b93..a6e3e586 100644 --- a/RIGS/templates/RIGS/event_embed.html +++ b/RIGS/templates/RIGS/event_embed.html @@ -103,4 +103,4 @@

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/base_embed.html b/templates/base_embed.html index bc7daa1a..6a7a8741 100644 --- a/templates/base_embed.html +++ b/templates/base_embed.html @@ -46,4 +46,4 @@ {% block js %} {% endblock %} - \ No newline at end of file + diff --git a/templates/registration/login_embed.html b/templates/registration/login_embed.html index 64ef8437..bddb7333 100644 --- a/templates/registration/login_embed.html +++ b/templates/registration/login_embed.html @@ -31,4 +31,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/registration/loginform.html b/templates/registration/loginform.html index 94343065..ad7e33d3 100644 --- a/templates/registration/loginform.html +++ b/templates/registration/loginform.html @@ -19,4 +19,4 @@
-
\ No newline at end of file +