From: Ciro Scognamiglio Date: Thu, 20 Feb 2014 16:06:44 +0000 (+0100) Subject: added theme X-Git-Tag: myslice-1.1~332 X-Git-Url: http://git.onelab.eu/?p=myslice.git;a=commitdiff_plain;h=a7337c66c2c7c3312c4205a8119252f04a1fbd58 added theme --- diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..2bdc1575 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//portal/django_passresetview.py=utf-8 +encoding//portal/urls.py=utf-8 +encoding//portal/validationview.py=utf-8 +encoding//portal/views.py=utf-8 diff --git a/auth/static/js/logout.js b/auth/static/js/logout.js index c417bb59..9c9b4532 100644 --- a/auth/static/js/logout.js +++ b/auth/static/js/logout.js @@ -7,4 +7,4 @@ function logout () { if (confirm(msg)) window.location="/logout/"; } /* attach this function to the logout button */ -$(document).ready(function() { $('#logout').click(logout); }) +$(document).ready(function() { $('#logout').click(logout); $('#logoutbtn').click(logout); }); diff --git a/devel/server-loop.sh b/devel/server-loop.sh index c77258fc..49d433e5 100755 --- a/devel/server-loop.sh +++ b/devel/server-loop.sh @@ -3,8 +3,8 @@ DIRNAME=$(dirname $0) cd $DIRNAME/.. # default port : if hostname starts with z -> use 8080 ; otherwise take 80 -#hostname | grep -q '^z' && port=8080 || port=8080 -hostname | grep -q '^z' && port=8080 || port=80 +hostname | grep -q '^z' && port=8080 || port=8080 +#hostname | grep -q '^z' && port=8080 || port=80 [[ -n "$@" ]] && port=$1 while true; do diff --git a/myslice/configengine.py b/myslice/configengine.py index 8c98b4c0..e512adf4 100644 --- a/myslice/configengine.py +++ b/myslice/configengine.py @@ -46,6 +46,10 @@ class ConfigEngine(object): parser.read (os.path.join(ROOT,'myslice/myslice.ini')) self.config_parser=parser + def __getattr__(self, section): + if self.config_parser.has_section(section): + return ConfigSection(self.config_parser, section) + def manifold_url (self): return self.config_parser.get('manifold','url') @@ -59,3 +63,13 @@ class ConfigEngine(object): # exporting these details to js def manifold_js_export (self): return "var MANIFOLD_URL = '%s';\n"%self.manifold_url(); + +class ConfigSection(object) : + + def __init__(self, parser, section): + self._parser = parser + self._section = section + + def __getattr__(self, key): + if self._parser.has_option(self._section, key): + return self._parser.get(self._section, key) diff --git a/portal/accountview.py b/portal/accountview.py index 2a929bde..d4499a89 100644 --- a/portal/accountview.py +++ b/portal/accountview.py @@ -12,11 +12,13 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required from django.core.mail import send_mail +from theme import ThemeView + # import json, os, re, itertools # requires login -class AccountView(LoginRequiredAutoLogoutView): +class AccountView(LoginRequiredAutoLogoutView, ThemeView): template_name = "account-view.html" def dispatch(self, *args, **kwargs): return super(AccountView, self).dispatch(*args, **kwargs) @@ -200,6 +202,7 @@ class AccountView(LoginRequiredAutoLogoutView): context['topmenu_items'] = topmenu_items_live('My Account', page) # so we can sho who is logged context['username'] = the_user(self.request) + context['theme'] = self.theme # context ['firstname'] = config['firstname'] prelude_env = page.prelude_env() context.update(prelude_env) diff --git a/portal/adminview.py b/portal/adminview.py index 8a51da99..6560d9d2 100644 --- a/portal/adminview.py +++ b/portal/adminview.py @@ -6,11 +6,11 @@ from manifold.manifoldapi import execute_admin_query from plugins.querytable import QueryTable from unfold.loginrequired import LoginRequiredAutoLogoutView - +from theme import ThemeView import json # View for platforms -class AdminView(LoginRequiredAutoLogoutView): +class AdminView(LoginRequiredAutoLogoutView, ThemeView): template_name = "adminview.html" def get_context_data(self, **kwargs): @@ -80,7 +80,7 @@ class AdminView(LoginRequiredAutoLogoutView): context['topmenu_items'] = topmenu_items_live('Admin', page) # so we can sho who is logged context['username'] = the_user(self.request) - + context['theme'] = self.theme context.update(page.prelude_env()) context['layout_1_or_2']="layout-unfold2.html" if not context['username'] else "layout-unfold1.html" diff --git a/portal/contactview.py b/portal/contactview.py index caee44a4..a97d697d 100644 --- a/portal/contactview.py +++ b/portal/contactview.py @@ -8,10 +8,12 @@ from ui.topmenu import topmenu_items, the_user from portal.forms import ContactForm +from theme import ThemeView + # splitting the 2 functions done here # GET is for displaying the empty form # POST is to process it once filled - or show the form again if anything is missing -class ContactView (FreeAccessView): +class ContactView (FreeAccessView, ThemeView): def post (self, request): form = ContactForm(request.POST) # A form bound to the POST data if form.is_valid(): # All validation rules pass @@ -31,7 +33,7 @@ class ContactView (FreeAccessView): msg = render_to_string('contact-support-email.txt', form.cleaned_data) send_mail("Onelab user %s submitted a query "%email, msg, email, recipients) - return render(request,'contact_sent.html') # Redirect after POST + return render(request,'contact_sent.html', { 'theme' : self.theme}) # Redirect after POST else: return self._display (request, form) @@ -42,5 +44,6 @@ class ContactView (FreeAccessView): return render(request, 'contact.html', { 'form': form, 'topmenu_items': topmenu_items('Contact', request), - 'username': the_user (request) + 'username': the_user (request), + 'theme' : self.theme }) diff --git a/portal/dashboardview.py b/portal/dashboardview.py index dea1c74c..3910726c 100644 --- a/portal/dashboardview.py +++ b/portal/dashboardview.py @@ -11,8 +11,10 @@ from unfold.loginrequired import LoginRequiredAutoLogoutView from ui.topmenu import topmenu_items_live, the_user +from theme import ThemeView + #This view requires login -class DashboardView (LoginRequiredAutoLogoutView): +class DashboardView (LoginRequiredAutoLogoutView, ThemeView): template_name = "dashboard.html" @@ -75,6 +77,8 @@ class DashboardView (LoginRequiredAutoLogoutView): # so we can sho who is logged context['username'] = the_user(self.request) + context['theme'] = self.theme + page.expose_js_metadata() # the page header and other stuff diff --git a/portal/homeview.py b/portal/homeview.py index efdf71e1..57041648 100644 --- a/portal/homeview.py +++ b/portal/homeview.py @@ -4,6 +4,7 @@ from django.http import HttpResponseRedirect from django.contrib.auth import authenticate, login, logout from django.template import RequestContext from django.shortcuts import render_to_response +from django.shortcuts import render from unfold.loginrequired import FreeAccessView @@ -11,8 +12,11 @@ from manifold.manifoldresult import ManifoldResult from ui.topmenu import topmenu_items, the_user from myslice.configengine import ConfigEngine -class HomeView (FreeAccessView): +from theme import ThemeView +class HomeView (FreeAccessView, ThemeView): + template_name = 'home-view.html' + # expose this so we can mention the backend URL on the welcome page def default_env (self): return { @@ -21,6 +25,7 @@ class HomeView (FreeAccessView): def post (self,request): env = self.default_env() + env['theme'] = self.theme username = request.POST.get('username') password = request.POST.get('password') @@ -39,7 +44,7 @@ class HomeView (FreeAccessView): # let's use ManifoldResult.__repr__ env['state']="%s"%manifoldresult env['layout_1_or_2']="layout-unfold2.html" - return render_to_response('home-view.html',env, context_instance=RequestContext(request)) + return render_to_response(self.template,env, context_instance=RequestContext(request)) # user was authenticated at the backend elif auth_result is not None: user=auth_result @@ -50,21 +55,32 @@ class HomeView (FreeAccessView): else: env['state'] = "Your account is not active, please contact the site admin." env['layout_1_or_2']="layout-unfold2.html" - return render_to_response('home-view.html',env, context_instance=RequestContext(request)) + return render_to_response(self.template,env, context_instance=RequestContext(request)) # otherwise else: env['state'] = "Your username and/or password were incorrect." env['layout_1_or_2']="layout-unfold2.html" - return render_to_response('home-view.html',env, context_instance=RequestContext(request)) + return render_to_response(self.template, env, context_instance=RequestContext(request)) # login-ok sets state="Welcome to MySlice" in urls.py def get (self, request, state=None): env = self.default_env() + + if request.user.is_authenticated(): + env['person'] = self.request.user + else: + env['person'] = None + + env['theme'] = self.theme + + env['username']=the_user(request) env['topmenu_items'] = topmenu_items(None, request) if state: env['state'] = state elif not env['username']: env['state'] = None # use one or two columns for the layout - not logged in users will see the login prompt env['layout_1_or_2']="layout-unfold2.html" if not env['username'] else "layout-unfold1.html" - return render_to_response('home-view.html',env, context_instance=RequestContext(request)) + + + return render_to_response(self.template, env, context_instance=RequestContext(request)) diff --git a/portal/joinview.py b/portal/joinview.py index e513a603..5d2d3639 100644 --- a/portal/joinview.py +++ b/portal/joinview.py @@ -19,10 +19,12 @@ from manifold.core.query import Query from portal.models import PendingUser,PendingAuthority from portal.actions import authority_get_pi_emails, manifold_add_user,manifold_add_account +from theme import ThemeView + # since we inherit from FreeAccessView we cannot redefine 'dispatch' # so let's override 'get' and 'post' instead # -class JoinView (FreeAccessView): +class JoinView (FreeAccessView, ThemeView): def post (self, request): return self.get_or_post (request, 'POST') @@ -204,6 +206,7 @@ class JoinView (FreeAccessView): 'root_authority_hrn': request.POST.get('root_authority_hrn', '').lower(), 'root_authorities': root_authorities, 'authorities': authorities, + 'theme': self.theme } template_env.update(page.prelude_env ()) return render(request, 'join_view.html',template_env) diff --git a/portal/manageuserview.py b/portal/manageuserview.py index 59fc1d62..cbed7ab0 100644 --- a/portal/manageuserview.py +++ b/portal/manageuserview.py @@ -11,12 +11,12 @@ from django.http import HttpResponse, HttpResponseRedirec from django.contrib import messages from django.contrib.auth.decorators import login_required from django.core.mail import send_mail - +from theme import ThemeView # import json, os, re, itertools # requires login -class UserView(LoginRequiredAutoLogoutView): +class UserView(LoginRequiredAutoLogoutView, ThemeView): template_name = "manageuserview.html" def dispatch(self, *args, **kwargs): return super(UserView, self).dispatch(*args, **kwargs) @@ -208,6 +208,7 @@ class UserView(LoginRequiredAutoLogoutView): context['topmenu_items'] = topmenu_items_live('My Account', page) # so we can sho who is logged context['username'] = the_user(self.request) + context['theme'] = self.theme # context ['firstname'] = config['firstname'] prelude_env = page.prelude_env() context.update(prelude_env) diff --git a/portal/platformsview.py b/portal/platformsview.py index 8c7640b4..eef773a3 100644 --- a/portal/platformsview.py +++ b/portal/platformsview.py @@ -5,9 +5,10 @@ from unfold.loginrequired import FreeAccessView from ui.topmenu import topmenu_items_live, the_user from plugins.querytable import QueryTable +from theme import ThemeView # View for platforms -class PlatformsView(FreeAccessView): +class PlatformsView(FreeAccessView, ThemeView): template_name = "platforms.html" def get_context_data(self, **kwargs): @@ -45,7 +46,7 @@ class PlatformsView(FreeAccessView): context['topmenu_items'] = topmenu_items_live('Platforms', page) # so we can sho who is logged context['username'] = the_user(self.request) - + context['theme'] = self.theme context.update(page.prelude_env()) context['layout_1_or_2']="layout-unfold2.html" if not context['username'] else "layout-unfold1.html" diff --git a/portal/platformview.py b/portal/platformview.py index a39fce99..d70c99b5 100644 --- a/portal/platformview.py +++ b/portal/platformview.py @@ -15,9 +15,10 @@ from ui.topmenu import topmenu_items_live, the_user from plugins.querytable import QueryTable from myslice.configengine import ConfigEngine +from theme import ThemeView # View for 1 platform and its details -class PlatformView(FreeAccessView): +class PlatformView(FreeAccessView, ThemeView): template_name = "platform.html" def get_context_data(self, **kwargs): @@ -140,7 +141,7 @@ class PlatformView(FreeAccessView): context['topmenu_items'] = topmenu_items_live('Platforms', page) # so we can sho who is logged context['username'] = the_user(self.request) - + context['theme'] = self.theme context.update(page.prelude_env()) return context diff --git a/portal/registrationview.py b/portal/registrationview.py index 455b1754..e04652cf 100644 --- a/portal/registrationview.py +++ b/portal/registrationview.py @@ -19,10 +19,12 @@ from manifold.core.query import Query from portal.models import PendingUser from portal.actions import authority_get_pi_emails, manifold_add_user,manifold_add_account +from theme import ThemeView + # since we inherit from FreeAccessView we cannot redefine 'dispatch' # so let's override 'get' and 'post' instead # -class RegistrationView (FreeAccessView): +class RegistrationView (FreeAccessView, ThemeView): def post (self, request): return self.get_or_post (request, 'POST') @@ -193,6 +195,7 @@ class RegistrationView (FreeAccessView): 'email': request.POST.get('email', ''), 'password': request.POST.get('password', ''), 'authorities': authorities, + 'theme': self.theme } template_env.update(page.prelude_env ()) return render(request, 'registration_view.html',template_env) diff --git a/portal/resourceview.py b/portal/resourceview.py index ac1813c7..a407725a 100644 --- a/portal/resourceview.py +++ b/portal/resourceview.py @@ -10,9 +10,10 @@ from plugins.lists.simplelist import SimpleList from plugins.slicestat import SliceStat from myslice.configengine import ConfigEngine +from theme import ThemeView # View for 1 platform and its details -class ResourceView(FreeAccessView): +class ResourceView(FreeAccessView, ThemeView): template_name = "resource.html" def get_context_data(self, **kwargs): @@ -88,7 +89,7 @@ class ResourceView(FreeAccessView): context['topmenu_items'] = topmenu_items_live(None, page) # so we can sho who is logged context['username'] = the_user(self.request) - + context['theme'] = self.theme context.update(page.prelude_env()) return context diff --git a/portal/sliceview.py b/portal/sliceview.py index eaec3faa..a48b846f 100644 --- a/portal/sliceview.py +++ b/portal/sliceview.py @@ -31,6 +31,8 @@ from plugins.slicestat import SliceStat from myslice.configengine import ConfigEngine +from theme import ThemeView + tmp_default_slice='ple.upmc.myslicedemo' # temporary : turn off the users part to speed things up @@ -46,7 +48,7 @@ insert_grid=False insert_messages=False #insert_messages=True -class SliceView (LoginRequiredAutoLogoutView): +class SliceView (LoginRequiredAutoLogoutView, ThemeView): def get (self,request, slicename=tmp_default_slice): @@ -427,7 +429,9 @@ class SliceView (LoginRequiredAutoLogoutView): template_env [ 'topmenu_items' ] = topmenu_items_live('Slice', page) # so we can sho who is logged template_env [ 'username' ] = the_user (request) - + + template_env ['theme'] = self.theme + # don't forget to run the requests page.expose_js_metadata() # the prelude object in page contains a summary of the requirements() for all plugins diff --git a/portal/static/css/fed4fire.css b/portal/static/css/fed4fire.css new file mode 100644 index 00000000..a014b34d --- /dev/null +++ b/portal/static/css/fed4fire.css @@ -0,0 +1,628 @@ +/* @override unfold/static/css/plugin.css */ +/* GENERAL */ +body { + padding-top: 60px; + padding-bottom: 20px; +} +*/ +/* center the buttons vertically in the header */ +div.topmenu { padding-top: 40px; } +ul.logged-in { + padding-top: 12px; +} +button.logged-in { + font-size: small; + margin-left: 5px; +} +li.username { + margin-bottom: 10px; + font-size: x-small; +} + +.logoTxt{ + font-size: 35px; + position: absolute; + margin-left: 20px; + font-family: verdana,arial,sans-serif; + font-weight: bold; +} +a{ + color: #777777; + text-decoration: none; +} +a:hover{ + color: red; + text-decoration: none; +} +.container { + padding: 0 !important; + color: black; + background-color: white; + margin: 0; + width: 100%; + max-width: 100%; + min-height: 100% !important; + height: 100% !important; + font-family: Ubuntu, Arial, sans-serif !important; +} +div.f4f-title{ + margin-top:20px; + margin-bottom:20px; + text-align: center; + border: 1px solid #61210B; + background-color: orange; +} +.container h1 { + color: #777777; + margin-top: 5px; +} +table { + color:black; +} + +.container h1, .container h2 { + color: #fff !important; +} + +div.plugin-outline-complete, +div.plugin-outline-body { + border: 0px solid; + border-radius: 0; + border-color: #ccc; + -webkit-transition: padding 200ms ease-out; + -moz-transition: padding 200ms ease-out; + -o-transition: padding 200ms ease-out; + transition: padding 0.2s ease-out; + padding: 20px; + margin: 0; +} +/* +div.plugin-outline-complete:hover, +div.plugin-outline-body:hover { + padding: 80px 80px 120px 80px; +} +*/ +a.plugin-tooltip { + font-size: 130%; + font-style: normal; + font-weight: bold; + padding: 5px; + color: #333; + font-family: Ubuntu, Arial, sans-serif; + text-transform: uppercase; +} + +a.plugin-tooltip:hover { + color: #fff; + text-decoration: none; +} + + + +/* LIST VIEW */ + +h2.well.well-lg { + border-radius:0; + border: 0; + font-family: Ubuntu, arial, sans-serif; + /* text-transform: ; */ + font-weight: normal; + font-size: 40px; + /* color: #30196d; */ + color: white; + margin-bottom: 0px; + margin-top: 0; + padding: 40px; + opacity: 1; + text-align: center; + background-color: #30196d; +} + +#complete-resources { +/* background-color: #92f79e ; */ + background-color: #B8B2FF ; +} + +#complete-filters { +/* background-color: #4af25d; */ + background-color: #add7ff; +} + +#complete-users { +/* background-color: #ff7394 ; */ + background-color: #add7ff ; +} +/* +#complete-measurements { + background-color: ; +} +*/ +#complete-pending { +/* background-color: #add7ff ; */ + background-color: #B8B2FF ; + +} + +#complete-customize-resources { + background-color: #efdfdf; +} + +#complete-msgs-pre { + background-color: #ccc; +} + +#complete-resources, +#complete-filters, +#complete-users, +#complete-measurements, +#complete-pending, +#complete-customize-resources, +#complete-msgs-pre { + opacity: 1; + text-align: center; + color: #333; +} + +#complete-resources:hover, +#complete-filters:hover, +#complete-users:hover, +#complete-measurements:hover, +#complete-pending:hover, +#complete-customize-resources:hover, +#complete-msgs-pre:hover { + opacity: 1; +} + +.nav.nav-tabs { + font-family: Ubuntu, Arial, sans-serif; + border: 0 !important; + border-bottom: 3px solid #fff !important; + margin-bottom: 40px; +} + +.nav.nav-tabs li.active a { + color: red; + border-left: 0px solid #572bc9; + border-top: 0px solid #572bc9; + border-right: 0px solid #572bc9; + background-color: orange; +} + +.nav.nav-tabs li a { + color: #333; + border: 0 !important; + margin-right: 5px; +} + +.nav.nav-tabs li a:hover { + color: #333; + background: red; + color: #fff; + border: 0 !important; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: orange; +} + +/* TOPMENU.CSS */ + +body { + /* background: #30196d !important; */ + /* background: black !important; */ + background: white !important; + padding-top: 0px; + padding-bottom: 0px; +} + +.navbar-fixed-top { + position: relative !important; +} + +.navbar-nav li a:hover { + color: red !important; +} + +.navbar-nav li.active a { + background: #eee !important; + background-color: orange; + color: #572bc9 ; +} + +.navbar-nav li.active a { + background: #eee ; +} + +/* Thierry : turning this off +ul.logged-in { + padding-top: 25px; +} +Thierry */ +button.logged-in { + font-size: 1em; + font-weight: bold; + margin-left: 5px; + margin-top: -5px; + /* background: #572bc9; */ + background: #FFD69B; + border: 1px solid orange; + color: #777777; + padding: 5px 15px; + border-radius:5px; +} + +button.logged-in:hover { + /* background: #4af25d; */ + background: orange; + border: 1px solid #777777; + color: #777777; +} +li.username { + margin-bottom: 10px; + font-size: 0.8em; + text-transform: none; + font-weight: normal; + color: #999; +} + + +/* BOOTSTRAP */ + + +ul.pagination li a { + /* background: ; */ + color: #572bc9; + font-family: Ubuntu, Arial, sans-serif; +} + +ul.pagination li.active a { + /* background: #572bc9; */ + background: orange; + border: 1px solid red; +} + +.btn.btn-default { + /* background: #572bc9; */ + background: #FFD69B; + color: #777777; + font-family: Ubuntu, Arial, sans-serif; + font-weight: bold; + border-color: #eea236; +} + +.btn.btn-default:hover { + /* background: #4af25d; */ + /* background: #ff7394; */ + background: orange; + color: #333; + font-family: Ubuntu, Arial, sans-serif; + font-weight: bold; + border-color: #927143; +} + +input { + border-radius: 3px; + border: none; + border: 1px solid #ccc; +} + +div.dataTables_length label, +div.dataTables_filter label, +div.dataTables_info { + font-family: Ubuntu, Arial, sans-serif ; +} + + + + +/* QUERYTABLE */ + +div.QueryTable table.dataTable th { + font: bold 12px/22px Ubuntu, Arial, sans-serif; + color: #333 ; + border-right: 0px solid #333 ; + border-bottom: 0px solid #C1DAD7 ; + border-top: 0px solid #C1DAD7 ; + letter-spacing: 1px; + text-transform: uppercase; + text-align: left; + padding: 8px 12px 4px 20px; + vertical-align:middle; + background: url('../img/tablesort-header.png') no-repeat ; +} + +div.QueryTable table.dataTable td, div.QueryTable table.dataTable textarea, div.QueryTable table.dataTable input [type="text"] { + font: normal 12px Ubuntu, Arial, Helvetica, sans-serif; + border-right: 0px solid #fff ; + border-bottom: 1px solid #fff ; +} + +div.QueryTable table.dataTable thead { + background: url('../img/tablesort-header.png') repeat-x ; + background-color: #caebea; +} + +div.QueryTable table.dataTable tfoot { + background: url('../img/tablesort-header.png') repeat-x ; + /* background-color: # ; */ +} + + +/* QUERY EDITOR */ + +table.query-editor { + margin: 40px auto ; + clear: both; + /* width: 80%;*/ + width: 100% ; + font-family: Ubuntu; +} + +.query-editor-spacer, +.plugin.QueryUpdater, +.plugin.Tabs { + margin-top: 60px !important; +/* Thierry : turning this off +.plugin.Tabs +Thierry */ +{ + margin-top: 60px ; +>>>>>>> 804932e8a431ddbf0d7c56457625457967b48d4c:portal/static/css/onelab_marko.css +} + +table.query-editor td { + padding: 5px 5px ; + font: normal 12px Ubuntu, Arial, sans-serif ; +} + + + +/* DASHBOARD */ + +#ms-dashboard-profile, +#ms-dashboard-testbeds, +#ms-dashboard-slices { + -webkit-transition: all 50ms ease-out; + -moz-transition: all 50ms ease-out; + -o-transition: all 50ms ease-out; + transition: all 0.05s ease-out; + padding-top: 140px; + padding-bottom: 60px; + margin-top: 60px; + color: #777777; + font-family: Ubuntu, Arial, sans-serif; + text-align: center; + +} + +#ms-dashboard-profile:hover, +#ms-dashboard-testbeds:hover, +#ms-dashboard-slices:hover { + margin-top: 65px; +} + +#ms-dashboard-profile { + background: url("../img/icon_users_color.png") top center no-repeat; +} + +#ms-dashboard-testbeds { + background: url("../img/icon_testbed_color.png") top center no-repeat; +} + +#ms-dashboard-slices { + background: url("../img/icon_slices_color.png") top center no-repeat; +} + +.ms-dashboard-content ul { + list-style-type: none ; + padding-left: 0; + text-align: center ; +} + +.ms-dashboard-content { + padding: 0 !important; +} + +.ms-dashboard-content a { +/* color: #ff7394 !important; */ + color: orange !important; +/* color: #ff0099 !important; */ +} + +.ms-dashboard-content a:hover { + color: red !important; +} +.ms-dashboard-caption h2 { + font-family: Ubuntu, Arial, sans-serif; + border-bottom: 0 !important; + text-transform: uppercase; + color: #777777 !important; +} + +#ms-dashboard-profile>div.ms-dashboard-caption { + background: no-repeat url(#) ; + padding-left: 0 ; +} + +#ms-dashboard-testbeds>div.ms-dashboard-caption { + background: no-repeat url(#) ; + padding-left: 0 ; +} + +#ms-dashboard-slices>div.ms-dashboard-caption { + background: no-repeat url(#) ; + padding-left: 0 ; +} + +.simplelist { + font-size: 100%; + text-align: center !important; + margin: 0 auto; +} + +/*** NEW CSS STYLES FOR ONLEAB ***/ + +body { + background-color:white; + color:black; +} +div.wrapper { + width:980px; + margin:0 auto; + position:relative; +} +/* HEADER */ +div#header { + height:100px; + background-color:white; +} + +div#secondary { + +} + +div#secondary ul { + position:absolute; + top:20px; + right:0; +} + +div#secondary li { + font-size:10pt; + float:left; + list-style:none; + margin-right:30px; +} +div#secondary li a { + color:black; +} +div#secondary li a:hover { + color:#270A5A; + text-decoration:none; +} +div#secondary li:last-child { + margin-right:0; +} + +div#navigation { + background-color:black; + width:100%; + height:40px; +} +div#navigation div.wrapper { + text-align:center; +} +div#navigation ul { + margin:0; + padding:0; + display: inline-block; + list-style-type: none; + white-space: nowrap; +} + +div#navigation li { + color:white; + font-family:helvetica, sans-serif; + font-size:10pt ; + font-weight:normal; + line-height:0.8em; + letter-spacing:0.6pt; + list-style:none; + float:left; + padding:0; + margin:15px 50px 0 0; +} +div#navigation li a { + color:white; +} +div#navigation li a:hover { + text-decoration:none; + color:#B8B2FF; +} +div#navigation li:last-child { + margin-right:0; +} + +/* HOME DASHBOARD */ +div#home-dashboard { + color:black; + margin:25px 0; +} +div#home-dashboard table { + margin:25px; + width:100%; +} +div#home-dashboard table td { + text-align:center; + padding:15px 0; + width:33%; +} +div#home-dashboard table tr:first-child td { + font-size:12pt; + font-weight:bold; + color:#270A5A; +} +div#home-dashboard table tr:last-child td { + text-align:left; +} +div#home-dashboard table td.support { + font-size:14pt; + vertical-align:top; + padding-left:11%; +} +div#home-dashboard table td.support a { +} +div#home-dashboard table td.support a:hover { + text-decoration:none; +} + + +.login-submit { + vertical-align:middle; + padding:0; +} +.lost-password { + font-size:10pt; + color:#CCCCCC; + text-align:right; + padding:0px; +} +.lost-password a { +} +.login-signup { + border-top:1px solid #CCCCCC; + text-align:center; + margin-top:15px; + padding:5px 0 0 0; +} +/**/ + +/* NAV TABS */ + +.nav.nav-tabs { +} + +.nav.nav-tabs li.active a { + +} + +.nav.nav-tabs li a { +} + +.nav.nav-tabs li a:hover { +} + +/**/ +/* WELL */ +div.well { +} +/**/ +/* BUTTON */ +.btn.btn-default { + font-weight: bold; +} + +.btn.btn-default:hover { + font-weight: bold; +} \ No newline at end of file diff --git a/portal/static/css/onelab.css b/portal/static/css/onelab.css index 06925d37..d5047550 100644 --- a/portal/static/css/onelab.css +++ b/portal/static/css/onelab.css @@ -345,6 +345,12 @@ div.wrapper { position:relative; } +span.label { + font-size:11pt; + color:gray; + font-weight:normal; + padding:0; +} /***** Notifications *****/ .warning { border: 1px solid red; @@ -429,8 +435,7 @@ div#navigation li:last-child { /* HOME DASHBOARD */ div#home-dashboard { color:black; - margin:25px 0; - border:1px red solid; + margin:25px auto; } div#home-dashboard table { margin:25px; @@ -447,12 +452,21 @@ div#home-dashboard table tr:first-child td { color:#270A5A; } div#home-dashboard table tr:last-child td { + font-size:12pt; + vertical-align:top; + border-right:1px solid #DDDDDD; + padding:25px; +} +div#home-dashboard table tr:last-child td:first-child { +} +div#home-dashboard table tr:last-child td:last-child { + border-right:0; +} +div#home-dashboard table tr:last-child td div { text-align:left; + padding:25px 0; } div#home-dashboard table td.support { - font-size:14pt; - vertical-align:top; - padding-left:11%; } div#home-dashboard table td.support a { } diff --git a/portal/static/img/f4f-logo.png b/portal/static/img/f4f-logo.png new file mode 100644 index 00000000..8a72315d Binary files /dev/null and b/portal/static/img/f4f-logo.png differ diff --git a/portal/templates/fed4fire/_widget-login.html b/portal/templates/fed4fire/_widget-login.html new file mode 100644 index 00000000..db7245cd --- /dev/null +++ b/portal/templates/fed4fire/_widget-login.html @@ -0,0 +1,26 @@ +
+ {% if state %} + {{ state }} + {% endif %} +
+ {% csrf_token %} + {% if next %} + + {% endif %} +
+ + +
+
+ + +
+ + +
+
diff --git a/portal/templates/fed4fire/_widget-topmenu.html b/portal/templates/fed4fire/_widget-topmenu.html new file mode 100644 index 00000000..4b2ae0ee --- /dev/null +++ b/portal/templates/fed4fire/_widget-topmenu.html @@ -0,0 +1,38 @@ +{% insert_str prelude "js/bootstrap.js" %} +{% insert_str prelude "css/bootstrap.css" %} +{% insert_str prelude "css/topmenu.css" %} +{% insert_str prelude "js/logout.js" %} +