From c84a4b4edb43b06c3f31d9ba118ebbedd1364acc Mon Sep 17 00:00:00 2001 From: Jason Williams Date: Tue, 29 Apr 2014 00:57:45 +0100 Subject: [PATCH 1/7] This line should be removed, as it is removing the hyphen --- wiki/templates/wiki/create.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki/templates/wiki/create.html b/wiki/templates/wiki/create.html index 50c8b8a16..f8a4c3024 100644 --- a/wiki/templates/wiki/create.html +++ b/wiki/templates/wiki/create.html @@ -30,7 +30,7 @@ var e = $("#id_slug")[0]; if(!e._changed) { slug = URLify(this.value, 50); - wikislug = slug.replace(/\-/g, " "); + /*wikislug = slug.replace(/\-/g, " ");*/ wikislug = wikislug.replace(/\w\S*/gi, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1);}); wikislug = wikislug.replace(/\s*/g, ""); e.value = wikislug; From 5ae09e66403d8b08f346b6e06a455cbfd87fda58 Mon Sep 17 00:00:00 2001 From: Jason Williams Date: Tue, 29 Apr 2014 23:43:12 +0100 Subject: [PATCH 2/7] fixing mistake made from last commit --- wiki/templates/wiki/create.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wiki/templates/wiki/create.html b/wiki/templates/wiki/create.html index f8a4c3024..48f63ec7b 100644 --- a/wiki/templates/wiki/create.html +++ b/wiki/templates/wiki/create.html @@ -18,7 +18,7 @@ // if downcode doesn't hit, the char will be stripped here s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces - s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens + s = s.replace(/[-\s]+/g, '_'); // convert spaces to hyphens s = s.toLowerCase(); // convert to lowercase return s.substring(0, num_chars);// trim to first num_chars chars } @@ -31,7 +31,7 @@ if(!e._changed) { slug = URLify(this.value, 50); /*wikislug = slug.replace(/\-/g, " ");*/ - wikislug = wikislug.replace(/\w\S*/gi, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1);}); + wikislug = slug.replace(/\w\S*/gi, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1);}); wikislug = wikislug.replace(/\s*/g, ""); e.value = wikislug; } From 3488ef1d63af0a1c7adccfb01e1c07632329141e Mon Sep 17 00:00:00 2001 From: Jason Williams Date: Sun, 4 May 2014 16:53:58 +0100 Subject: [PATCH 3/7] forcing cleanup server side --- wiki/forms.py | 2 ++ wiki/templates/wiki/create.html | 5 +---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/wiki/forms.py b/wiki/forms.py index 628252202..54b8f7177 100644 --- a/wiki/forms.py +++ b/wiki/forms.py @@ -264,6 +264,8 @@ def clean_slug(self): else: raise forms.ValidationError(_(u'A slug named "%s" already exists.') % already_urlpath.slug) + slug = slug.lower() + slug = slug.replace('-', '_') return slug def clean(self): diff --git a/wiki/templates/wiki/create.html b/wiki/templates/wiki/create.html index 48f63ec7b..0ae963709 100644 --- a/wiki/templates/wiki/create.html +++ b/wiki/templates/wiki/create.html @@ -30,10 +30,7 @@ var e = $("#id_slug")[0]; if(!e._changed) { slug = URLify(this.value, 50); - /*wikislug = slug.replace(/\-/g, " ");*/ - wikislug = slug.replace(/\w\S*/gi, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1);}); - wikislug = wikislug.replace(/\s*/g, ""); - e.value = wikislug; + e.value = slug; } }); }); From 682a217f7ef56963e21d667a045b2c776708eb8c Mon Sep 17 00:00:00 2001 From: Jason Williams Date: Mon, 5 May 2014 18:40:51 +0100 Subject: [PATCH 4/7] added HTML5 pattern checking of lowercase and underscores --- wiki/views/article.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki/views/article.py b/wiki/views/article.py index 562006c05..b12fe0565 100644 --- a/wiki/views/article.py +++ b/wiki/views/article.py @@ -60,7 +60,7 @@ def get_form(self, form_class): initial['slug'] = self.request.GET.get('slug', None) kwargs['initial'] = initial form = form_class(self.request, self.urlpath, **kwargs) - form.fields['slug'].widget = forms.TextInputPrepend(prepend='/'+self.urlpath.path) + form.fields['slug'].widget = forms.TextInputPrepend(prepend='/'+self.urlpath.path, attrs={'pattern': '[^-A-Z]+', 'title': 'Please only use lowercase alphanumeric characters and underscores'}) return form def form_valid(self, form): From 42b6c4908bceae38f9e4e78224830025e633b08b Mon Sep 17 00:00:00 2001 From: benjaoming Date: Wed, 7 May 2014 15:34:08 +0200 Subject: [PATCH 5/7] Fix confusing comment --- wiki/templates/wiki/create.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wiki/templates/wiki/create.html b/wiki/templates/wiki/create.html index 0ae963709..73be9a564 100644 --- a/wiki/templates/wiki/create.html +++ b/wiki/templates/wiki/create.html @@ -18,7 +18,7 @@ // if downcode doesn't hit, the char will be stripped here s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces - s = s.replace(/[-\s]+/g, '_'); // convert spaces to hyphens + s = s.replace(/[-\s]+/g, '_'); // convert spaces and hyphens to underscores s = s.toLowerCase(); // convert to lowercase return s.substring(0, num_chars);// trim to first num_chars chars } From 4783abda7cc4dc34596cc94db98452f65fdb2f24 Mon Sep 17 00:00:00 2001 From: benjaoming Date: Wed, 7 May 2014 15:36:37 +0200 Subject: [PATCH 6/7] Only force new slugs to lowercase when not URL_CASE_SENSITIVE --- wiki/forms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wiki/forms.py b/wiki/forms.py index 54b8f7177..bcd85cb32 100644 --- a/wiki/forms.py +++ b/wiki/forms.py @@ -256,6 +256,8 @@ def clean_slug(self): if settings.URL_CASE_SENSITIVE: already_existing_slug = models.URLPath.objects.filter(slug=slug, parent=self.urlpath_parent) else: + slug = slug.lower() + slug = slug.replace('-', '_') already_existing_slug = models.URLPath.objects.filter(slug__iexact=slug, parent=self.urlpath_parent) if already_existing_slug: already_urlpath = already_existing_slug[0] @@ -264,8 +266,6 @@ def clean_slug(self): else: raise forms.ValidationError(_(u'A slug named "%s" already exists.') % already_urlpath.slug) - slug = slug.lower() - slug = slug.replace('-', '_') return slug def clean(self): From 8c453359d7e0a99aeeb675dbbd3e24249b99cfc2 Mon Sep 17 00:00:00 2001 From: benjaoming Date: Wed, 7 May 2014 15:46:20 +0200 Subject: [PATCH 7/7] Update article.py --- wiki/views/article.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/wiki/views/article.py b/wiki/views/article.py index b12fe0565..c0c4a183e 100644 --- a/wiki/views/article.py +++ b/wiki/views/article.py @@ -60,7 +60,15 @@ def get_form(self, form_class): initial['slug'] = self.request.GET.get('slug', None) kwargs['initial'] = initial form = form_class(self.request, self.urlpath, **kwargs) - form.fields['slug'].widget = forms.TextInputPrepend(prepend='/'+self.urlpath.path, attrs={'pattern': '[^-A-Z]+', 'title': 'Please only use lowercase alphanumeric characters and underscores'}) + form.fields['slug'].widget = forms.TextInputPrepend( + prepend='/'+self.urlpath.path, + attrs={ + # Make patterns force lowercase if we are case insensitive to bless the user with a + # bit of strictness, anyways + 'pattern': '[a-z0-9_]+' if not settings.URL_CASE_SENSITIVE else '[a-zA-Z0-9_]+', + 'title': 'Lowercase letters, numbers, and underscores' if not settings.URL_CASE_SENSITIVE else 'Letters, numbers, and underscores', + } + ) return form def form_valid(self, form):