Switch to side-by-side view

--- a/Allura/allura/controllers/project.py
+++ b/Allura/allura/controllers/project.py
@@ -11,6 +11,7 @@
 from webob import exc
 import pymongo
 from formencode import validators
+from formencode.api import Invalid
 
 from ming.utils import LazyProperty
 
@@ -127,24 +128,28 @@
         c.project = self.neighborhood.neighborhood_project
         require_access(self.neighborhood, 'register')
         c.add_project = W.add_project
-        form_data['tools'] = ['Wiki', 'Git', 'Tickets', 'Downloads', 'Discussion']
+        form_data.setdefault('tools', [u'Wiki',u'Git',u'Tickets',u'Downloads',u'Discussion'])
         form_data['neighborhood'] = self.neighborhood.name
         return dict(neighborhood=self.neighborhood, form_data=form_data)
 
     @expose('json:')
-    def suggest_name(self, project_name=None):
-        new_name = re.sub("[^A-Za-z0-9]", "", project_name).lower()
-        name_taken_message = plugin.ProjectRegistrationProvider.get().name_taken(new_name, self.neighborhood)
-        if len(new_name) < 3 or len(new_name) > 15:
-            name_taken_message = "Name must be 3-15 characters long."
-        return dict(suggested_name=new_name, message=name_taken_message)
+    def suggest_name(self, project_name=''):
+        result = dict()
+        result['suggested_name'] = re.sub("[^A-Za-z0-9]", "", project_name).lower()[:15]
+        return result
 
     @expose('json:')
-    def check_name(self, project_name=None):
-        name_taken_message = plugin.ProjectRegistrationProvider.get().name_taken(project_name, self.neighborhood)
-        if not name_taken_message and not h.re_path_portion.match(project_name):
-            name_taken_message = 'Please use only letters, numbers, and dashes 3-15 characters long.'
-        return dict(message=name_taken_message)
+    def check_names(self, project_name='', unix_name=''):
+        result = dict()
+        try:
+            W.add_project.fields['project_name'].validate(project_name, '')
+        except Invalid as e:
+            result['name_message'] = str(e)
+        if not h.re_path_portion.match(unix_name) or not (3 <= len(unix_name) <= 15):
+            result['unixname_message'] = 'Please use only letters, numbers, and dashes 3-15 characters long.'
+        else:
+            result['unixname_message'] = plugin.ProjectRegistrationProvider.get().name_taken(unix_name, self.neighborhood)
+        return result
 
     @h.vardec
     @expose()