diff --git a/Changelog b/Changelog index 98142cd4..5ab95416 100644 --- a/Changelog +++ b/Changelog @@ -1,20 +1,24 @@ +1.0.22: 2017-07-30 + * #3593: [datacenterlight] Removed underbars between social icons in index + * #3509: [datacenterlight, hosting] Made navbar transparent and removed mobile navbar bug in login/signup/reset-password + * #3592: [datacenterlight] Changed “Order Now” button text to “Continue/weiter” + * #3579: [datacenterlight] Removed “blinks” on click on navbar menus + * #3577: [datacenterlight] Added backend CPU, RAM, SSD fields validation + * #3615: [datacenterlight] Decoupled landing VM templates from OpenNebula + * #3604: [datacenterlight, hosting] Font colour change for better visibility in signup/login/password request footer links + [all] Introduced ENABLE_DEBUG_LOGGING + * #3542: [datacenterlight, hosting] Fixed warning messages and deprecated url + * #3603: [datacenterlight] Removed navbar language option dropdown + * #3629: [datacenterlight] Fixed navbar language switching bug 1.0.21: 2017-07-21 * #3591: [datacenterlight, payment] Fixed card holder name to appear on Confirm Order page * #3558: [datacenterlight] Changed font family and background color for header * #3581: [datacenterlight] Lead font weight change * #3584: [all] Add flag is_superuser=True in MyUserManager 1.0.20: 2017-07-18 - * #3590: [digitalglarus] Added impact hub partner logo and text in digitalglarus - [datacenterlight, hosting] Fixed overlapping of date and billing address in the mobile view - * #3580: [datacenterlight, hosting] Introduced newly designed payment page. Cust1.0.20: 2017-07-18 * #3590: [digitalglarus] Added impact hub partner logo and text in digitalglarus [datacenterlight, hosting] Fixed overlapping of date and billing address in the mobile view * #3580: [datacenterlight, hosting] Introduced newly designed payment page. Customized Stripe credit card input fields - * #3568: [all] Improved the way of adding Google analytics (ga) code. We now have ga code for ungleich, digitalglarus, blog, hosting - and datacenterlight - * #3564: [datacenterlight] Improved calculator form validations, both client side and server side - [datacenterlight] Changed "Place order" button to "Submit" in the payment page - * #3540: [datacenterlight] Improved credit card section with Stripe clarification texts and corresponding DE translationsomized Stripe credit card input fields * #3568: [all] Improved the way of adding Google analytics (ga) code. We now have ga code for ungleich, digitalglarus, blog, hosting and datacenterlight * #3564: [datacenterlight] Improved calculator form validations, both client side and server side diff --git a/alplora/urls.py b/alplora/urls.py index 071bb2ac..058f5499 100644 --- a/alplora/urls.py +++ b/alplora/urls.py @@ -4,9 +4,9 @@ from .views import IndexView, LoginView, ContactView urlpatterns = [ - url(r'^/?$', IndexView.as_view(), name='index'), - url(r'/login/', LoginView.as_view(), name='login'), - url(r'/contact', ContactView.as_view(), name='contact'), + url(r'^$', IndexView.as_view(), name='index'), + url(r'login/', LoginView.as_view(), name='login'), + url(r'contact', ContactView.as_view(), name='contact'), # url(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'), # url(r'^/landing/?$', LandingProgramView.as_view(), name='landing'), ] diff --git a/datacenterlight/static/datacenterlight/css/landing-page.css b/datacenterlight/static/datacenterlight/css/landing-page.css index 07ecc3b6..ba2546c8 100755 --- a/datacenterlight/static/datacenterlight/css/landing-page.css +++ b/datacenterlight/static/datacenterlight/css/landing-page.css @@ -156,6 +156,14 @@ h6 { background-color: transparent; } +.navbar-transparent .navbar-nav>li>.on-hover-border { + transition: all 0.3s linear; + box-shadow: none; +} +.navbar-transparent .navbar-nav>li>.on-hover-border:hover { + box-shadow: 0 0 0 1px #eee; + border-radius: 5px; +} .navbar-default .btn-link { box-shadow: none; } @@ -196,44 +204,61 @@ h6 { margin-right: 5px; font-family: 'Lato', sans-serif; } - -.nav-language .drop-language { - position: absolute; +.nav-language .drop-language{ + /*position: absolute;*/ top: 45px; - left: -8px; - background: #fff; + left: auto !important; + /* background: #fff; */ width: 100px; + min-width: 100px; height: 40px; padding: 9px 10px; - -webkit-box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); - -moz-box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); - box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); - display: none; + -webkit-box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); + -moz-box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); + box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); + /*display: none;*/ z-index: 100; /* margin-left: 10px; */ text-align: center; border-radius: 4px; } -.nav-language .drop-language a { - cursor: pointer; - font-family: 'Lato', sans-serif; +.nav-language .open .drop-language{ + width: 100px; + min-width: 100px; } -.navbar-transparent .nav-language .drop-language { +.nav-language .drop-language a{ + cursor: pointer; + padding: 5px 10px !important; + font-family: 'Lato-Light', sans-serif; +} + +/* Show the dropdown menu on hover */ +@media (min-width: 769px) { + .nav-language .dropdown:hover .dropdown-menu { + display: block; + } +} +@media (max-width: 767px){ + .nav-language .open .dropdown-menu>li>a { + line-height: 1.42857143; + } +} + +.navbar-transparent .nav-language .drop-language{ background: transparent; border: 1px solid #fff; } .navbar-transparent .nav-language .drop-language a { color: #fff; + padding: 5px 10px !important; font-family: 'Lato-Light', sans-serif; } - -.nav-language:hover .drop-language { +/* .nav-language:hover .drop-language{ display: block; -} - +} */ .intro-header { height: 100vh; text-align: center; @@ -1188,8 +1213,8 @@ tech-sub-sec h2 { font-size: 14px; color: #777; } - .nav-language:hover { - height: 80px; + .nav-language:hover{ + /*height: 80px;*/ } .navbar-transparent .nav-language .select-language { color: #777; diff --git a/datacenterlight/static/datacenterlight/js/main.js b/datacenterlight/static/datacenterlight/js/main.js index 44b92a0c..5594fe11 100644 --- a/datacenterlight/static/datacenterlight/js/main.js +++ b/datacenterlight/static/datacenterlight/js/main.js @@ -91,16 +91,12 @@ var href = $(this).attr('data-url'); $('.navbar-collapse').removeClass('in'); $('.navbar-collapse').addClass('collapsing'); - var url = window.location.pathname; - var urlSplit = url.split('/'); - if (urlSplit.length === 3 && urlSplit[2] === 'datacenterlight') { + if ($(href).length) { $('html, body').animate({ scrollTop: $(href).offset().top }, 1000); } else { - var allUrl = window.location.href; - var redirect = allUrl.split('whydatacenterlight') - window.location.href = '/en-us/datacenterlight' + href; + window.location.href = '/datacenterlight' + href; } }); } diff --git a/datacenterlight/templates/datacenterlight/includes/_footer.html b/datacenterlight/templates/datacenterlight/includes/_footer.html index 2a53c2e1..f9d0758c 100644 --- a/datacenterlight/templates/datacenterlight/includes/_footer.html +++ b/datacenterlight/templates/datacenterlight/includes/_footer.html @@ -4,7 +4,7 @@ <div class="container"> <div class="row"> <div class="col-lg-12"> - + <ul class="list-inline"> {% if request.resolver_match.url_name == "index" %} <li> @@ -45,7 +45,7 @@ </li> {% endif %} </ul> - + <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. All Rights Reserved</p> </div> </div> diff --git a/datacenterlight/templates/datacenterlight/includes/_navbar.html b/datacenterlight/templates/datacenterlight/includes/_navbar.html index 84358b4d..99f6a4a8 100644 --- a/datacenterlight/templates/datacenterlight/includes/_navbar.html +++ b/datacenterlight/templates/datacenterlight/includes/_navbar.html @@ -1,8 +1,6 @@ -{% load staticfiles i18n%} -{% get_current_language as LANGUAGE_CODE %} -{% load custom_tags %} +{% load staticfiles i18n%} {% get_current_language as LANGUAGE_CODE %} {% load custom_tags %} <nav class="navbar navbar-default navbar-fixed-top topnav"> -<div class="topnav"> + <div class="topnav"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> @@ -22,44 +20,55 @@ </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><!-- Start Navbar collapse--> <ul class="nav navbar-nav navbar-right"> - {% if request.resolver_match.url_name == "index" or request.resolver_match.url_name == "whydatacenterlight" %} + {% if request.resolver_match.url_name == "index" or request.resolver_match.url_name == "whydatacenterlight" %} <li class="dropdown"> <a class="dropdown-toggle visible-mobile" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{% trans "Highlights" %}<span class="caret"></span></a> <a class="dropdown-toggle url disabled visible-desktop menu-url" data-url="#how" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{% trans "Highlights" %}<span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a class="url menu-url" data-url="#your" href="#your">{% trans "Scale out" %}</a></li> - <li><a class="url menu-url" data-url="#our" href="#our">{% trans "Reliable and light" %}</a></li> - <li> <a class="url menu-url" data-url="#price" href="#price">{% trans "Order VM" %}</a></li> - </ul> - </li> - <li> - <a href="{% url 'datacenterlight:index' %}/whydatacenterlight" >{% trans "Why Data Center Light?" %}</a> - </li> - <li> - <a class="url" href="{% url 'datacenterlight:index' %}#contact" data-url="#contact" >{% trans "Contact" %}</a> - </li> - {% endif %} - <li class="nav-language"> - <div class="select-language"> - {% if LANGUAGE_CODE == 'en-us'%} - <span>English</span> - {% else %} - <span>Deutsch</span> - {% endif %} - <i class="fa fa-globe" aria-hidden="true"></i> - </div> + <ul class="dropdown-menu"> + <li><a class="url menu-url" data-url="#your" href="#your">{% trans "Scale out" %}</a></li> + <li><a class="url menu-url" data-url="#our" href="#our">{% trans "Reliable and light" %}</a></li> + <li> <a class="url menu-url" data-url="#price" href="#price">{% trans "Order VM" %}</a></li> + </ul> + </li> + <li> + <a href="{% url 'datacenterlight:whydatacenterlight' %}" >{% trans "Why Data Center Light?" %}</a> + </li> + <li> + <a class="url" href="{% url 'datacenterlight:index' %}#contact" data-url="#contact" >{% trans "Contact" %}</a> + </li> + {% endif %} - <div class="drop-language"> - {% if LANGUAGE_CODE == 'en-us'%} - <a href="{% change_lang 'de' %}">Deutsch</a> - {% else %} - <a href="{% change_lang 'en-us' %}" >English</a> - {% endif %} - </div> - - </li> - </ul> - </div><!-- /.navbar-collapse --> + <li> + {% if LANGUAGE_CODE == 'en-us'%} + <a class="on-hover-border" href="{% change_lang 'de' %}">Deutsch <i class="fa fa-globe" aria-hidden="true"></i></a> + {% else %} + <a class="on-hover-border" href="{% change_lang 'en-us' %}">English <i class="fa fa-globe" aria-hidden="true"></i></a> + {% endif %} + </li> + {% comment %} + <!-- to be used when more than one option for language --> + <li class="nav-language"> + <div class="dropdown"> + <div class="dropdown-toggle select-language" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> + {% if LANGUAGE_CODE == 'en-us'%} + <span>English</span> + {% else %} + <span>Deutsch</span> + {% endif %} + <i class="fa fa-globe" aria-hidden="true"></i> + </div> + <ul class="dropdown-menu drop-language dropdown-menu-right"> + {% if LANGUAGE_CODE == 'en-us'%} + <li><a class="url" href="{% change_lang 'de' %}">Deutsch</a></li> + {% else %} + <li><a class="url" href="{% change_lang 'en-us' %}">English</a></li> + {% endif %} + </ul> + </div> + </li> + {% endcomment %} + </ul> + </div> + <!-- /.navbar-collapse --> </div> - </div> -</nav> +</nav> \ No newline at end of file diff --git a/datacenterlight/urls.py b/datacenterlight/urls.py index a08bacdb..a3aed7a6 100644 --- a/datacenterlight/urls.py +++ b/datacenterlight/urls.py @@ -5,13 +5,13 @@ from .views import IndexView, BetaProgramView, LandingProgramView, BetaAccessVie urlpatterns = [ - url(r'^/?$', IndexView.as_view(), name='index'), - url(r'^/whydatacenterlight/?$', WhyDataCenterLightView.as_view(), name='whydatacenterlight'), - url(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'), - url(r'^/landing/?$', LandingProgramView.as_view(), name='landing'), - url(r'^/pricing/?$', PricingView.as_view(), name='pricing'), - url(r'^/payment/?$', PaymentOrderView.as_view(), name='payment'), - url(r'^/order-confirmation/?$', OrderConfirmationView.as_view(), name='order_confirmation'), - url(r'^/order-success/?$', SuccessView.as_view(), name='order_success'), - url(r'^/beta_access?$', BetaAccessView.as_view(), name='beta_access'), + url(r'^$', IndexView.as_view(), name='index'), + url(r'^whydatacenterlight/?$', WhyDataCenterLightView.as_view(), name='whydatacenterlight'), + url(r'^beta-program/?$', BetaProgramView.as_view(), name='beta'), + url(r'^landing/?$', LandingProgramView.as_view(), name='landing'), + url(r'^pricing/?$', PricingView.as_view(), name='pricing'), + url(r'^payment/?$', PaymentOrderView.as_view(), name='payment'), + url(r'^order-confirmation/?$', OrderConfirmationView.as_view(), name='order_confirmation'), + url(r'^order-success/?$', SuccessView.as_view(), name='order_success'), + url(r'^beta_access?$', BetaAccessView.as_view(), name='beta_access'), ] diff --git a/digitalglarus/urls.py b/digitalglarus/urls.py index eba9896e..92cd8e11 100644 --- a/digitalglarus/urls.py +++ b/digitalglarus/urls.py @@ -1,5 +1,6 @@ from django.conf.urls import url from django.utils.translation import ugettext_lazy as _ +from django.contrib.auth import views as auth_views from . import views from .views import ContactView, IndexView, HistoryView, LoginView, SignupView,\ @@ -20,7 +21,7 @@ urlpatterns = [ url(_(r'contact/?$'), ContactView.as_view(), name='contact'), url(_(r'login/?$'), LoginView.as_view(), name='login'), url(_(r'signup/?$'), SignupView.as_view(), name='signup'), - url(r'^logout/?$', 'django.contrib.auth.views.logout', + url(r'^logout/?$', auth_views.logout, {'next_page': '/digitalglarus/login?logged_out=true'}, name='logout'), url(r'reset-password/?$', PasswordResetView.as_view(), name='reset_password'), url(r'reset-password-confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py index 5e10a1a5..40187f84 100644 --- a/dynamicweb/settings/base.py +++ b/dynamicweb/settings/base.py @@ -199,13 +199,11 @@ DATABASES = { } } - AUTHENTICATION_BACKENDS = ( 'guardian.backends.ObjectPermissionBackend', 'django.contrib.auth.backends.ModelBackend', ) - # Internationalization # https://docs.djangoproject.com/en/1.7/topics/i18n/ @@ -464,7 +462,6 @@ META_USE_SITES = True PARLER_LANGUAGES = {1: ({'code': 'en-us'}, {'code': 'de'},)} AUTH_USER_MODEL = 'membership.CustomUser' - # PAYMENT STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services" @@ -481,7 +478,6 @@ STRIPE_API_PUBLIC_KEY = env('STRIPE_API_PUBLIC_KEY') ANONYMOUS_USER_NAME = 'anonymous@ungleich.ch' GUARDIAN_GET_INIT_ANONYMOUS_USER = 'membership.models.get_anonymous_user_instance' - ############################################# # configurations for opennebula-integration # ############################################# @@ -508,7 +504,6 @@ OPENNEBULA_PORT = env('OPENNEBULA_PORT') # default value is /RPC2 OPENNEBULA_ENDPOINT = env('OPENNEBULA_ENDPOINT') - # dcl email configurations DCL_TEXT = env('DCL_TEXT') DCL_SUPPORT_FROM_ADDRESS = env('DCL_SUPPORT_FROM_ADDRESS') @@ -526,9 +521,31 @@ GOOGLE_ANALYTICS_PROPERTY_IDS = { 'dynamicweb-staging.ungleich.ch': 'staging' } +ENABLE_DEBUG_LOGGING = bool_env('ENABLE_DEBUG_LOGGING') + +if ENABLE_DEBUG_LOGGING: + LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'handlers': { + 'file': { + 'level': 'DEBUG', + 'class': 'logging.FileHandler', + 'filename': "{PROJECT_DIR}/debug.log".format(PROJECT_DIR=PROJECT_DIR), + }, + }, + 'loggers': { + 'django': { + 'handlers': ['file'], + 'level': 'DEBUG', + 'propagate': True, + }, + }, + } + DEBUG = bool_env('DEBUG') if DEBUG: - from .local import * # flake8: noqa + from .local import * # flake8: noqa else: - from .prod import * # flake8: noqa + from .prod import * # flake8: noqa diff --git a/dynamicweb/urls.py b/dynamicweb/urls.py index 66bf74df..b5cccff3 100644 --- a/dynamicweb/urls.py +++ b/dynamicweb/urls.py @@ -1,8 +1,8 @@ -from django.conf.urls import patterns, include, url +from django.conf.urls import include, url from django.contrib import admin -# deprecated in version 1.8 from django.conf.urls.i18n import i18n_patterns from django.conf.urls.static import static +from django.views import i18n, static as static_view from django.conf import settings from hosting.views import RailsHostingView, DjangoHostingView, NodeJSHostingView @@ -22,17 +22,17 @@ urlpatterns = [url(r'^index.html$', LandingView.as_view()), url(r'^nosystemd/', include('nosystemd.urls', namespace="nosystemd")), url(r'^taggit_autosuggest/', include('taggit_autosuggest.urls')), url(r'^jsi18n/(?P<packages>\S+?)/$', - 'django.views.i18n.javascript_catalog'), + i18n.javascript_catalog), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # note the django CMS URLs included via i18n_patterns -urlpatterns += i18n_patterns('', - url(r'^/?$', LandingView.as_view()), +urlpatterns += i18n_patterns( + url(r'^$', LandingView.as_view()), url(r'^admin/', include(admin.site.urls)), - url(r'^datacenterlight', include('datacenterlight.urls', namespace="datacenterlight")), + url(r'^datacenterlight/', include('datacenterlight.urls', namespace="datacenterlight")), url(r'^hosting/', RedirectView.as_view( url=reverse_lazy('hosting:login')), name='redirect_hosting_login'), - url(r'^alplora', include('alplora.urls', namespace="alplora")), + url(r'^alplora/', include('alplora.urls', namespace="alplora")), url(r'^membership/', include(membership_urls)), url(r'^digitalglarus/', include('digitalglarus.urls', namespace="digitalglarus")), @@ -43,11 +43,11 @@ urlpatterns += i18n_patterns('', url(r'^blog/', include('ungleich.urls', namespace='ungleich')), url(r'^', include('cms.urls')) ) -urlpatterns += patterns('', +urlpatterns += [ url(r'^media/(?P<path>.*)$', - 'django.views.static.serve', { + static_view.serve, { 'document_root': settings.MEDIA_ROOT, }), - ) + ] if settings.DEBUG: - urlpatterns += patterns('', url(r'^__debug__/', include(debug_toolbar.urls))) + urlpatterns += [url(r'^__debug__/', include(debug_toolbar.urls))] diff --git a/hosting/static/hosting/css/landing-page.css b/hosting/static/hosting/css/landing-page.css index 63a2f54a..a7d69094 100644 --- a/hosting/static/hosting/css/landing-page.css +++ b/hosting/static/hosting/css/landing-page.css @@ -714,3 +714,8 @@ a.unlink:hover { width: 100% !important; } } + + +.footer-light a:hover, .footer-light a:focus, .footer-light a:active { + color: #ddd; +} \ No newline at end of file diff --git a/hosting/templates/hosting/base_short.html b/hosting/templates/hosting/base_short.html index 39b5a0fc..b4f4949e 100644 --- a/hosting/templates/hosting/base_short.html +++ b/hosting/templates/hosting/base_short.html @@ -119,7 +119,9 @@ </div> </footer> {% else %} - {% include "datacenterlight/includes/_footer.html" %} + <div class="footer-light"> + {% include "datacenterlight/includes/_footer.html" %} + </div> {% endif %} <!-- jQuery --> <script src="{% static 'hosting/js/jquery.js' %}"></script> diff --git a/hosting/urls.py b/hosting/urls.py index fc8198ef..ea96af77 100644 --- a/hosting/urls.py +++ b/hosting/urls.py @@ -1,4 +1,5 @@ from django.conf.urls import url +from django.contrib.auth import views as auth_views from .views import DjangoHostingView, RailsHostingView, PaymentVMView,\ NodeJSHostingView, LoginView, SignupView, SignupValidateView, SignupValidatedView, IndexView, \ @@ -41,7 +42,7 @@ urlpatterns = [ url(r'reset-password/?$', PasswordResetView.as_view(), name='reset_password'), url(r'reset-password-confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', PasswordResetConfirmView.as_view(), name='reset_password_confirm'), - url(r'^logout/?$', 'django.contrib.auth.views.logout', + url(r'^logout/?$', auth_views.logout, {'next_page': '/hosting/login?logged_out=true'}, name='logout'), url(r'^validate/(?P<validate_slug>.*)/$', SignupValidatedView.as_view(), name='validate') ] diff --git a/nosystemd/urls.py b/nosystemd/urls.py index d95127da..7c3965f8 100644 --- a/nosystemd/urls.py +++ b/nosystemd/urls.py @@ -1,4 +1,5 @@ from django.conf.urls import url +from django.contrib.auth import views as auth_views from .views import LandingView, LoginView, SignupView, PasswordResetView,\ PasswordResetConfirmView, DonationView, DonationDetailView, ChangeDonatorStatusDetailView,\ @@ -8,7 +9,7 @@ urlpatterns = [ url(r'^$', LandingView.as_view(), name='landing'), url(r'^login/?$', LoginView.as_view(), name='login'), url(r'^signup/?$', SignupView.as_view(), name='signup'), - url(r'^logout/?$', 'django.contrib.auth.views.logout', + url(r'^logout/?$', auth_views.logout, {'next_page': '/nosystemd/login?logged_out=true'}, name='logout'), url(r'reset-password/?$', PasswordResetView.as_view(), name='reset_password'), url(r'reset-password-confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',