Use xslugify on floor and room names, instead of slugify which ignores slashes.

- Legacy-Id: 11592
This commit is contained in:
Henrik Levkowetz 2016-07-10 14:01:10 +00:00
parent 87273de795
commit df5417e7b3
5 changed files with 25 additions and 20 deletions

View file

@ -26,6 +26,7 @@ from ietf.group.utils import can_manage_materials
from ietf.name.models import MeetingTypeName, TimeSlotTypeName, SessionStatusName, ConstraintName, RoomResourceName
from ietf.person.models import Person
from ietf.utils.storage import NoLocationMigrationFileSystemStorage
from ietf.utils.text import xslugify
countries = pytz.country_names.items()
countries.sort(lambda x,y: cmp(x[1], y[1]))
@ -365,7 +366,7 @@ class Room(models.Model):
def floorplan_path(instance, filename):
root, ext = os.path.splitext(filename)
return u"%s/floorplan-%s-%s%s" % (settings.FLOORPLAN_MEDIA_DIR, instance.meeting.number, slugify(instance.name), ext)
return u"%s/floorplan-%s-%s%s" % (settings.FLOORPLAN_MEDIA_DIR, instance.meeting.number, xslugify(instance.name), ext)
class FloorPlan(models.Model):
name = models.CharField(max_length=255)

View file

@ -24,6 +24,7 @@ from ietf.meeting.test_data import make_meeting_test_data, make_interim_meeting
from ietf.name.models import SessionStatusName
from ietf.utils.test_utils import TestCase, login_testing_unauthorized, unicontent
from ietf.utils.mail import outbox
from ietf.utils.text import xslugify
from ietf.person.factories import PersonFactory
from ietf.group.factories import GroupFactory
@ -1111,7 +1112,7 @@ class FloorPlanTests(TestCase):
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
url = urlreverse('ietf.meeting.views.floor_plan', kwargs={'floor': slugify(floorplan.name)} )
url = urlreverse('ietf.meeting.views.floor_plan', kwargs={'floor': xslugify(floorplan.name)} )
r = self.client.get(url)
self.assertEqual(r.status_code, 200)

View file

@ -51,6 +51,7 @@ from ietf.meeting.helpers import send_interim_approval_request
from ietf.utils.mail import send_mail_message
from ietf.utils.pipe import pipe
from ietf.utils.pdf import pdf_pages
from ietf.utils.text import xslugify
from .forms import (InterimMeetingModelForm, InterimAnnounceForm, InterimSessionModelForm,
InterimCancelForm)
@ -1432,7 +1433,7 @@ def floor_plan(request, num=None, floor=None, ):
schedule = meeting.agenda
floors = FloorPlan.objects.filter(meeting=meeting).order_by('order')
if floor:
floors = [ f for f in floors if slugify(f.name) == floor ]
floors = [ f for f in floors if xslugify(f.name) == floor ]
return render(request, 'meeting/floor-plan.html', {
"schedule": schedule,
"number": num,

View file

@ -3,6 +3,7 @@
{% load origin %}
{% load ietf_filters %}
{% load textfilters %}
{% block title %}
IETF {{ schedule.meeting.number }} meeting agenda
@ -194,9 +195,9 @@
<td colspan="3">
{% if item.timeslot.show_location and item.timeslot.get_location %}
{% if schedule.meeting.number|add:"0" < 96 %}
<a href="https://tools.ietf.org/agenda/{{schedule.meeting.number}}/venue/?room={{ item.timeslot.get_location|slugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
<a href="https://tools.ietf.org/agenda/{{schedule.meeting.number}}/venue/?room={{ item.timeslot.get_location|xslugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
{% else %}
<a href="{% url 'ietf.meeting.views.floor_plan' num=schedule.meeting.number %}?room={{ item.timeslot.get_location|slugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
<a href="{% url 'ietf.meeting.views.floor_plan' num=schedule.meeting.number %}?room={{ item.timeslot.get_location|xslugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
{% endif %}
{% endif %}
</td>
@ -220,9 +221,9 @@
<td colspan="3">
{% if item.timeslot.show_location and item.timeslot.get_location %}
{% if schedule.meeting.number|add:"0" < 96 %}
<a href="https://tools.ietf.org/agenda/{{schedule.meeting.number}}/venue/?room={{ item.timeslot.get_location|slugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
<a href="https://tools.ietf.org/agenda/{{schedule.meeting.number}}/venue/?room={{ item.timeslot.get_location|xslugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
{% else %}
<a href="{% url 'ietf.meeting.views.floor_plan' num=schedule.meeting.number %}?room={{ item.timeslot.get_location|slugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
<a href="{% url 'ietf.meeting.views.floor_plan' num=schedule.meeting.number %}?room={{ item.timeslot.get_location|xslugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
{% endif %}
{% endif %}
</td>
@ -233,9 +234,9 @@
<td>
{% if item.timeslot.show_location and item.timeslot.get_location %}
{% if schedule.meeting.number|add:"0" < 96 %}
<a href="https://tools.ietf.org/agenda/{{schedule.meeting.number}}/venue/?room={{ item.timeslot.get_location|slugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
<a href="https://tools.ietf.org/agenda/{{schedule.meeting.number}}/venue/?room={{ item.timeslot.get_location|xslugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
{% else %}
<a href="{% url 'ietf.meeting.views.floor_plan' num=schedule.meeting.number %}?room={{ item.timeslot.get_location|slugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
<a href="{% url 'ietf.meeting.views.floor_plan' num=schedule.meeting.number %}?room={{ item.timeslot.get_location|xslugify }}">{{item.timeslot.get_location|split:"/"|join:"/<wbr>"}}</a>
{% endif %}
{% endif %}
</td>

View file

@ -3,6 +3,7 @@
{% load origin %}
{% load ietf_filters %}
{% load textfilters %}
{% load staticfiles %}
{% block title %}
@ -48,27 +49,27 @@ hr.slim {
<div class="row">
<div class="col-md-12">
{% for floor in floors %}
<div class="anchor-target" id="{{floor.name|slugify}}"></div>
<div class="anchor-target" id="{{floor.name|xslugify}}"></div>
<h3>{{ floor.name }}</h3>
<div class="floor-plan">
<img id="{{floor.name|slugify}}-image" class="col-md-12 col-sm-12 col-xs-12" src="{{ floor.image.url }}" >
<img id="{{floor.name|xslugify}}-image" class="col-md-12 col-sm-12 col-xs-12" src="{{ floor.image.url }}" >
<!-- We need as many of these as we can have individual rooms combining into one -->
<div id="{{floor.name|slugify}}-arrowdiv0" style="position: absolute; left: 0; top: 67.5px; visibility: hidden;"><img id="arrow" src="{% static 'ietf/images/arrow-ani.gif' %}"></div>
<div id="{{floor.name|slugify}}-arrowdiv1" style="position: absolute; left: 0; top: 67.5px; visibility: hidden;"><img id="arrow" src="{% static 'ietf/images/arrow-ani.gif' %}"></div>
<div id="{{floor.name|slugify}}-arrowdiv2" style="position: absolute; left: 0; top: 67.5px; visibility: hidden;"><img id="arrow" src="{% static 'ietf/images/arrow-ani.gif' %}"></div>
<div id="{{floor.name|slugify}}-arrowdiv3" style="position: absolute; left: 0; top: 67.5px; visibility: hidden;"><img id="arrow" src="{% static 'ietf/images/arrow-ani.gif' %}"></div>
<div id="{{floor.name|xslugify}}-arrowdiv0" style="position: absolute; left: 0; top: 67.5px; visibility: hidden;"><img id="arrow" src="{% static 'ietf/images/arrow-ani.gif' %}"></div>
<div id="{{floor.name|xslugify}}-arrowdiv1" style="position: absolute; left: 0; top: 67.5px; visibility: hidden;"><img id="arrow" src="{% static 'ietf/images/arrow-ani.gif' %}"></div>
<div id="{{floor.name|xslugify}}-arrowdiv2" style="position: absolute; left: 0; top: 67.5px; visibility: hidden;"><img id="arrow" src="{% static 'ietf/images/arrow-ani.gif' %}"></div>
<div id="{{floor.name|xslugify}}-arrowdiv3" style="position: absolute; left: 0; top: 67.5px; visibility: hidden;"><img id="arrow" src="{% static 'ietf/images/arrow-ani.gif' %}"></div>
</div>
<div class="rooms small">
{% for f in floors %}
{% for room in f.room_set.all %}
<a href="javascript: setarrow('{{room.name|slugify}}')">{{ room.name|nbsp }}</a>&ensp;
<a href="javascript: setarrow('{{room.name|xslugify}}')">{{ room.name|nbsp }}</a>&ensp;
{% endfor %}
{% endfor %}
<hr class="slim">
{% for f in floors %}
{% for room in f.room_set.all %}
{% if room.functional_display_name %}
<a href="javascript: setarrow('{{room.name|slugify}}')">{{ room.functional_display_name|nbsp }}</a>&ensp;
<a href="javascript: setarrow('{{room.name|xslugify}}')">{{ room.functional_display_name|nbsp }}</a>&ensp;
{% endif %}
{% endfor %}
{% endfor %}
@ -85,7 +86,7 @@ hr.slim {
<script>
// These must match the 'arrowdiv' divs above
var arrowsuffixlist = [ '0', '1', '2', '3' ];
var floorlist = [{% for floor in floors %}{% if not forloop.first %}, {%endif%}'{{floor.name|slugify}}'{% endfor %}];
var floorlist = [{% for floor in floors %}{% if not forloop.first %}, {%endif%}'{{floor.name|xslugify}}'{% endfor %}];
function roommap(nm)
{
@ -102,10 +103,10 @@ hr.slim {
if (0) { }
{% for room in meeting.room_set.all %}
else if (nm == '{{room.name|slugify}}') { left = {{room.left}}; top = {{room.top}}; right = {{room.right}}; bottom = {{room.bottom}}; floor='{{room.floorplan.name|slugify}}'; width={{room.floorplan.image.width}}; }{% endfor %}
else if (nm == '{{room.name|xslugify}}') { left = {{room.left}}; top = {{room.top}}; right = {{room.right}}; bottom = {{room.bottom}}; floor='{{room.floorplan.name|xslugify}}'; width={{room.floorplan.image.width}}; }{% endfor %}
{% for room in meeting.room_set.all %}{% if room.functional_display_name %}
else if (nm == '{{room.functional_name|slugify}}') { left = {{room.left}}; top = {{room.top}}; right = {{room.right}}; bottom = {{room.bottom}}; floor='{{room.floorplan.name|slugify}}'; width={{room.floorplan.image.width}}; }{% endif %}{% endfor %}
else if (nm == '{{room.functional_name|xslugify}}') { left = {{room.left}}; top = {{room.top}}; right = {{room.right}}; bottom = {{room.bottom}}; floor='{{room.floorplan.name|xslugify}}'; width={{room.floorplan.image.width}}; }{% endif %}{% endfor %}
else return null;