Index: main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/layout.py
===================================================================
--- main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/layout.py	(revision 7444)
+++ main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/layout.py	(revision 7445)
@@ -52,4 +52,29 @@
 default_primary_nav_template.__grok_name__ = 'default_primary_nav'
 
+
+class action(grok.action):
+
+    def __call__(self, success):
+        action = SIRPAction(self.label, success=success, **self.options)
+        self.actions.append(action)
+        return action
+
+class SIRPAction(Action):
+
+    def __init__(self, label, style='', **options):
+        super(SIRPAction, self).__init__(label, **options)
+        self.style = style
+
+    def render(self):
+        if not self.available():
+            return ''
+        label = self.label
+        if isinstance(label, Message):
+            label = zope.i18n.translate(self.label, context=self.form.request)
+        return ('<input type="submit" id="%s" name="%s" value="%s"'
+                ' class="btn %s"/>' %
+                (self.__name__, self.__name__, escape(label, quote=True),
+                self.style))
+
 class jsaction(grok.action):
 
Index: main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/pages.py
===================================================================
--- main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/pages.py	(revision 7444)
+++ main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/pages.py	(revision 7445)
@@ -59,5 +59,5 @@
 from waeup.sirp.authentication import get_principal_role_manager
 from waeup.sirp.utils.helpers import get_user_account
-from waeup.sirp.browser.layout import jsaction, JSAction
+from waeup.sirp.browser.layout import jsaction, action
 
 grok.context(ISIRPObject)
@@ -215,5 +215,5 @@
         return get_user_account(self.request)
 
-    @grok.action('Send message now')
+    @action('Send message now', style='primary')
     def send(self, *args, **data):
         fullname = self.request.principal.title
@@ -244,5 +244,5 @@
                           'fullname', 'email_from', 'body')
 
-    @grok.action('Send now')
+    @action('Send now', style='primary')
     def send(self, *args, **data):
         sirp_utils = getUtility(ISIRPUtils)
@@ -378,5 +378,5 @@
     title = 'Portal Users'
 
-    @grok.action('Add user')
+    @action('Add user', style='primary')
     def addUser(self, **data):
         name = data['name']
@@ -426,5 +426,5 @@
         self.widgets['description'].height = 3
 
-    @grok.action('Save')
+    @action('Save', style='primary')
     def save(self, **data):
         form = self.request.form
@@ -444,5 +444,5 @@
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context.__parent__))
@@ -461,5 +461,5 @@
         return u'Send message to %s' % self.context.title
 
-    @grok.action('Send message now')
+    @action('Send message now', style='primary')
     def send(self, *args, **data):
         try:
@@ -596,5 +596,5 @@
         return super(ConfigurationContainerManageFormPage, self).update()
 
-    @grok.action('Save')
+    @action('Save', style='primary')
     def save(self, **data):
         self.applyData(self.context, **data)
@@ -602,5 +602,5 @@
         return
 
-    @grok.action('Add session configuration', validator=NullValidator)
+    @action('Add session configuration', validator=NullValidator, style='primary')
     def addSubunit(self, **data):
         self.redirect(self.url(self.context, '@@add'))
@@ -621,5 +621,5 @@
         return
 
-    @grok.action('Update plugins', validator=NullValidator)
+    @action('Update plugins', validator=NullValidator)
     def updatePlugins(self, **data):
         grok.getSite().updatePlugins()
@@ -638,5 +638,5 @@
     pnav = 0
 
-    @grok.action('Add Session Configuration')
+    @action('Add Session Configuration', style='primary')
     def addSessionConfiguration(self, **data):
         sessionconfiguration = createObject(u'waeup.SessionConfiguration')
@@ -650,5 +650,5 @@
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self):
         self.redirect(self.url(self.context, '@@index')+'#tab-2')
@@ -674,5 +674,5 @@
         return 'Edit academic session %s configuration' % session_string
 
-    @grok.action('Save')
+    @action('Save', style='primary')
     def save(self, **data):
         self.applyData(self.context, **data)
@@ -681,5 +681,5 @@
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self):
         self.redirect(self.url(self.context.__parent__, '@@index')+'#tab-2')
@@ -1210,10 +1210,10 @@
         return
 
-    @grok.action('Add faculty', validator=NullValidator)
+    @action('Add faculty', validator=NullValidator)
     def addFaculty(self, **data):
         self.redirect(self.url(self.context, '@@add'))
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context))
@@ -1232,5 +1232,5 @@
     pnav = 1
 
-    @grok.action('Add faculty')
+    @action('Add faculty', style='primary')
     def addFaculty(self, **data):
         faculty = createObject(u'waeup.Faculty')
@@ -1243,5 +1243,5 @@
         self.redirect(self.url(self.context, u'@@manage')+'#tab-1')
 
-    @grok.action('Cancel')
+    @action('Cancel')
     def cancel(self, **data):
         self.redirect(self.url(self.context))
@@ -1315,24 +1315,24 @@
         return
 
-    @grok.action('Save')
+    @action('Save', style='primary')
     def save(self, **data):
         self.applyData(self.context, **data)
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context))
         return
 
-    @grok.action('Add department', validator=NullValidator)
+    @action('Add department', validator=NullValidator)
     def addSubunit(self, **data):
         self.redirect(self.url(self.context, '@@add'))
         return
 
-    @grok.action('Add local role', validator=NullValidator)
+    @action('Add local role', validator=NullValidator)
     def addLocalRole(self, **data):
         return add_local_role(self, '3', **data)
 
-    @grok.action('Remove selected local roles')
+    @action('Remove selected local roles')
     def delLocalRoles(self, **data):
         return del_local_roles(self,3,**data)
@@ -1352,5 +1352,5 @@
         return self.context.longtitle()
 
-    @grok.action('Add department')
+    @action('Add department', style='primary')
     def addDepartment(self, **data):
         department = createObject(u'waeup.Department')
@@ -1364,5 +1364,5 @@
         self.redirect(self.url(self.context, u'@@manage')+'#tab-2')
 
-    @grok.action('Cancel')
+    @action('Cancel')
     def cancel(self, **data):
         self.redirect(self.url(self.context))
@@ -1503,5 +1503,5 @@
         return get_users_with_local_roles(self.context)
 
-    @grok.action('Save')
+    @action('Save', style='primary')
     def save(self, **data):
         self.applyData(self.context, **data)
@@ -1520,24 +1520,24 @@
         return
 
-    @grok.action('Add course', validator=NullValidator)
+    @action('Add course', validator=NullValidator)
     def addCourse(self, **data):
         self.redirect(self.url(self.context, 'addcourse'))
         return
 
-    @grok.action('Add certificate', validator=NullValidator)
+    @action('Add certificate', validator=NullValidator)
     def addCertificate(self, **data):
         self.redirect(self.url(self.context, 'addcertificate'))
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context))
         return
 
-    @grok.action('Add local role', validator=NullValidator)
+    @action('Add local role', validator=NullValidator)
     def addLocalRole(self, **data):
         return add_local_role(self, 4, **data)
 
-    @grok.action('Remove selected local roles')
+    @action('Remove selected local roles')
     def delLocalRoles(self, **data):
         return del_local_roles(self,4,**data)
@@ -1557,5 +1557,5 @@
         return self.context.longtitle()
 
-    @grok.action('Add course')
+    @action('Add course')
     def addCourse(self, **data):
         course = createObject(u'waeup.Course')
@@ -1579,5 +1579,5 @@
         self.redirect(self.url(self.context, u'@@manage')+'#tab-2')
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context))
@@ -1598,5 +1598,5 @@
         return self.context.longtitle()
 
-    @grok.action('Add certificate')
+    @action('Add certificate')
     def addCertificate(self, **data):
         certificate = createObject(u'waeup.Certificate')
@@ -1621,5 +1621,5 @@
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self): #, **data):
         self.redirect(self.url(self.context))
@@ -1657,10 +1657,10 @@
         return 'Course: %s (%s)' % (self.context.title, self.context.code)
 
-    @grok.action('Save')
+    @action('Save', style='primary')
     def save(self, **data):
         self.applyData(self.context, **data)
         return
 
-    @grok.action('Save and return')
+    @action('Save and return')
     def saveAndReturn(self, **data):
         self.applyData(self.context, **data)
@@ -1668,5 +1668,5 @@
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context))
@@ -1731,5 +1731,5 @@
     form_fields = grok.AutoFields(ICertificate)
 
-    @grok.action('Save')
+    @action('Save', style='primary')
     def save(self, **data):
         self.applyData(self.context, **data)
@@ -1741,10 +1741,10 @@
         return
 
-    @grok.action('Add course referrer', validator=NullValidator)
+    @action('Add course referrer', validator=NullValidator)
     def addCertificateCourse(self, **data):
         self.redirect(self.url(self.context, 'addcertificatecourse'))
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context))
@@ -1765,9 +1765,9 @@
         return get_users_with_local_roles(self.context)
 
-    @grok.action('Add local role', validator=NullValidator)
+    @action('Add local role', validator=NullValidator)
     def addLocalRole(self, **data):
         return add_local_role(self, 3, **data)
 
-    @grok.action('Remove selected local roles')
+    @action('Remove selected local roles')
     def delLocalRoles(self, **data):
         return del_local_roles(self,3,**data)
@@ -1788,5 +1788,5 @@
         return "Certificate: %s (%s)" % (self.context.title, self.context.code)
 
-    @grok.action('Add course referrer')
+    @action('Add course referrer')
     def addCertcourse(self, **data):
         try:
@@ -1798,5 +1798,5 @@
         self.redirect(self.url(self.context, u'@@manage')+'#tab-2')
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context))
@@ -1838,5 +1838,5 @@
         return 'Course Referrer: %s' % (self.context.__name__)
 
-    @grok.action('Save and return')
+    @action('Save and return')
     def saveAndReturn(self, **data):
         parent = self.context.__parent__
@@ -1853,5 +1853,5 @@
         return
 
-    @grok.action('Cancel', validator=NullValidator)
+    @action('Cancel', validator=NullValidator)
     def cancel(self, **data):
         self.redirect(self.url(self.context))
Index: main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/static/waeup-base.css
===================================================================
--- main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/static/waeup-base.css	(revision 7444)
+++ main/waeup.sirp/branches/henrik-bootstrap/src/waeup/sirp/browser/static/waeup-base.css	(revision 7445)
@@ -36,4 +36,5 @@
 
 .dataTables_wrapper {
-  min-height: 150px;
+  min-height: 50px;
+  margin-bottom: 50px;
 }
