Merge master into task/3530/upgrade_to_django_1.11

This commit is contained in:
M.Ravi 2017-12-21 15:33:48 +01:00
commit 17d95609c6
21 changed files with 782 additions and 614 deletions

View file

@ -1,10 +1,17 @@
Next release: Next:
* #3911: [dcl] Integrate resend activation link into dcl landing payment page
* #3972: [hosting] Add ungleich company info to invoice footer
* #3974: [hosting] Improve invoice number: Show 404 for invoice resources that do not belong to the user
1.2.13: 2017-12-09
* [cms] Introduce UngleichHeaderBackgroundImageAndTextSliderPlugin that allows to have scrolling images and texts
* [cms] Remove <p> tag for ungleich cms customer item template
1.2.12: 2017-12-09
* #3594: [digitalglarus] Remove white scroll bar on the right in mobile
* #3905: [ungleich] Update ungleich.ch header into a slider * #3905: [ungleich] Update ungleich.ch header into a slider
* [all] Enable logging custom modules * [all] Enable logging custom modules
1.2.11: 2017-11-30 1.2.11: 2017-11-30
* [all] TravisCI: Test against python 3.4.2 only * [all] TravisCI: Test against python 3.4.2 only
* [ungleich] Remove data-replaced image in ungleich CMS services item * [ungleich] Remove data-replaced image in ungleich CMS services item plugin template
plugin template
1.2.10: 2017-11-26 1.2.10: 2017-11-26
* #3843: [ungleich] Add generic ungleich CMS template * #3843: [ungleich] Add generic ungleich CMS template
* #3672: [all] Clean existing automated tests * #3672: [all] Clean existing automated tests

View file

@ -39,7 +39,7 @@
<p> <p>
{% trans "Don't have an account yet?" %}<br> {% trans "Don't have an account yet?" %}<br>
{% trans "You can sign up by filling in the information below." %}<br> {% trans "You can sign up by filling in the information below." %}<br>
<a href="{% url 'hosting:reset_password' %}">{% trans "Forgot password?" %}</a> <a href="{% url 'hosting:reset_password' %}" target="_blank">{% trans "Forgot password?" %}</a> or <a href="{% url 'hosting:resend_activation_link' %}" target="_blank">{% trans "Resend activation link" %}?</a>
</p> </p>
{% endif %} {% endif %}
</div> </div>

View file

@ -235,7 +235,7 @@ fieldset[disabled] .btn-xl.active {
.navbar-default .navbar-brand { .navbar-default .navbar-brand {
font-family: "Helvetica Neue", Helvetica, Arial, cursive; font-family: "Helvetica Neue", Helvetica, Arial, cursive;
color: #a1cfd7; color: #a1cfd7;
padding-top: 10px; padding-top: 11px;
} }
.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:hover,

View file

@ -250,6 +250,7 @@ header.history {
text-align:center; text-align:center;
line-height: 2.5; line-height: 2.5;
color: #fff; color: #fff;
margin-bottom: 100px;
} }
.supporter-intro { .supporter-intro {

View file

@ -1,4 +1,4 @@
#page-top #services .container .row .col-lg-12.text-center .section-heading { #page-top #services .section-heading {
font-style: normal; font-style: normal;
color: #494949; color: #494949;
padding-top: 50px; padding-top: 50px;

View file

@ -4,150 +4,148 @@
{% block content %} {% block content %}
<style type="text/css"> <style type="text/css">
@media screen and (max-width: 600px) {
@media screen and (max-width: 600px) { #timeline{
display: none;
#timeline{ }
display: none; h2 {font-size: 2em !important;}
} }
h2 {font-size: 2em !important;}
}
</style> </style>
<!-- Header --> <!-- Header -->
<header class="history"> <header class="history">
<div class="container header-history"> <div class="container header-history">
<div class="intro-text"> <div class="intro-text">
<p> <div class="intro-headline">
</p> <span class="intro-headline">
<div class="intro-headline"> Where great minds work
<span class="intro-headline"> </span>
Where great minds work
</span>
</div>
</div> </div>
</div> </div>
</div> </div>
</header> </header>
<!-- form section ends--> <!-- form section ends-->
<!-- Services Section -->
<section id="history">
<div class="container-fluid">
<div class="row-fluid">
<div class="col-lg-12 col-md-12 text-center wow fadeInDown">
<span class="glyphicon glyphicon-star glyphicon-inverse"></span>
<h2 class="section-heading">the story of Digital Glarus</h2>
<p class="carousel-text text-center supporter-black"> <!-- Services Section -->
In search for a better environment for creativity, ungleich <section id="history">
arrived at a small village in Glarus. First we were driven by the <div class="container-fluid">
cheap real estate price, then we were genuinely surprised by the beauty of its nature. People were incredibly friendly as well. Working just became so relaxed and enjoyable in such a beautiful <div class="text-center wow fadeInDown">
surrounding..How come we are the only ones here?! We can't be <span class="glyphicon glyphicon-star glyphicon-inverse"></span>
enjoying this alone, we need to let others know about this great <h2 class="section-heading">the story of Digital Glarus</h2>
place. That's how it all started... <p class="carousel-text text-center supporter-black">
</p> In search for a better environment for creativity, ungleich
<span class="glyphicon glyphicon-heart glyphicon-inverse"></span> arrived at a small village in Glarus. First we were driven by the
<h2 class="section-heading">we fell in love</h2> cheap real estate price, then we were genuinely surprised by the
beauty of its nature. People were incredibly friendly as well.
Working just became so relaxed and enjoyable in such a beautiful
surrounding..How come we are the only ones here?! We can't be
enjoying this alone, we need to let others know about this great
place. That's how it all started...
</p>
<span class="glyphicon glyphicon-heart glyphicon-inverse"></span>
<p class="carousel-text text-center supporter-black"> <h2 class="section-heading">we fell in love</h2>
We didn't see this coming, but we really fell in love with Glarus. The lakes, the mountains, the mist, the (amazing) snow, <p class="carousel-text text-center supporter-black">
the fresh air, the stream, the people, the stars...how could we not? And before long, we found an 100 something years old house, We didn't see this coming, but we really fell in love with Glarus.
formerly a family home, but long time unused, next to a river in The lakes, the mountains, the mist, the (amazing) snow,
Schwanden. Full of old furniture, the house and the neighborhood the fresh air, the stream, the people, the stars...how could we
was stepping in a time machine. There, we found our first not? And before long, we found an 100 something years old house,
coworking space in Glarus.</p> formerly a family home, but long time unused, next to a river in
<span class="glyphicon glyphicon-home glyphicon-inverse"></span> Schwanden. Full of old furniture, the house and the neighborhood
<h2 class="section-heading">Our crowdfunding success</h2> was stepping in a time machine. There, we found our first
coworking space in Glarus.
</p>
<span class="glyphicon glyphicon-home glyphicon-inverse"></span>
<p class="carousel-text text-center supporter-black"> <h2 class="section-heading">Our crowdfunding success</h2>
What comes with a very old house? Lots of charm, yes. Great <p class="carousel-text text-center supporter-black">
history, yes. A contract stating that we can park our goats in the What comes with a very old house? Lots of charm, yes. Great
storage room, yes. And, yes, tons of things to be fixed. We history, yes. A contract stating that we can park our goats in the
couldn't afford much of renovation-we are a young start up rich storage room, yes. And, yes, tons of things to be fixed. We
with creativity but not much money (yet)-that is why we decided to ask for help. To our surprise, generous people found hope and couldn't afford much of renovation-we are a young start up rich
inspiration from our project. We got much supports from people we with creativity but not much money (yet)-that is why we decided to
know and we don't know. People wrote to us, called us, met us. We ask for help. To our surprise, generous people found hope and
were on the cover of newspaper. We were on TV. We became the talk inspiration from our project. We got much supports from people we
of the town. know and we don't know. People wrote to us, called us, met us. We
</p> were on the cover of newspaper. We were on TV. We became the talk
of the town.
</p>
<div>
<iframe class="center-block" frameborder="0" height="330" scrolling="no" src="//www.100-days.net/de/projekt/start-digital-glarus/widget/v2" width="220"></iframe>
</div>
<span class="glyphicon glyphicon-road glyphicon-inverse"></span>
<div><iframe class="center-block" frameborder="0" height="330" scrolling="no" src="//www.100-days.net/de/projekt/start-digital-glarus/widget/v2" width="220"></iframe></div> <h2 class="section-heading text-cente">And the story continues..!</h2>
<span class="glyphicon glyphicon-road glyphicon-inverse"></span> <p class="carousel-text text-center supporter-black">
<h2 class="section-heading text-cente">And the story continues..!</h2> With the money we raised from our crowdfunding campaign, we
<p class="carousel-text text-center supporter-black"> started renovating the hourse, ripping floors off and fixing
With the money we raised from our crowdfunding campaign, we walls, giving a fresh coat of paint on old walls. We hired Samuel,
started renovating the hourse, ripping floors off and fixing who came to Glarus as a refugee from Eritrea, as our intern to
walls, giving a fresh coat of paint on old walls. We hired Samuel, renovate the house and learn computer science. We opened our door
who came to Glarus as a refugee from Eritrea, as our intern to for students to live. Our coworking space is growing slowly but
renovate the house and learn computer science. We opened our door for students to live. Our coworking space is growing slowly but meaningfully. Our journey only started!
meaningfully. Our journey only started! </p>
</p> <hr class="primary">
<hr class="primary"> </div>
</div> </div>
</section>
<!-- Half Page Image Background Carousel -->
<section>
<div id="timeline">
<iframe frameborder="0" width="100%" height="650" src="//cdn.knightlab.com/libs/timeline3/latest/embed/index.html?source=15clFd1fjnVScVziBlF-X7j5M7V6uNFt9jt9QZVylaYI&amp;font=Default&amp;lang=en&amp;initial_zoom=2&amp;height=650" width="100%"></iframe>
</div>
</section>
<!-- Supporters -->
<section id="supporters">
<div class="supporter-bg">
<div class="container">
<div class="text-center wow fadeInUp">
<h2 class="supporter-headline">Our Supporters</h2>
<hr class="primary">
<p class="carousel-text supporter-intro text-muted text-center">
Here are our proud supporters of project Digital Glarus. Thanks to our supporters,
the first cowerking space in Glarus is going to have a new look!
</p>
<p class="supporter" style="text-transform: uppercase;">
{% for supporter in supporters %}
{{ supporter.name }}
<br>
{% endfor %}
<br>
<a href="{% url 'digitalglarus:supportus' %}" class="btn btn-default btn-primary sr-button">Become a supporter</a>
</p>
</div> </div>
</div> </div>
</section> </div>
</section>
<!-- Half Page Image Background Carousel --> <section id="contact">
<section> <div class="fill">
<div id="timeline"> <div class="container">
<iframe frameborder="0" width="100%" height="650" src="//cdn.knightlab.com/libs/timeline3/latest/embed/index.html?source=15clFd1fjnVScVziBlF-X7j5M7V6uNFt9jt9QZVylaYI&amp;font=Default&amp;lang=en&amp;initial_zoom=2&amp;height=650" width="100%"></iframe> <div class="wow fadeInUp text-center">
</div> <h2 class="section-heading" style="margin-top: 40px;">Contact Us</h2>
<div class="map-wrap">
</section> <iframe style="margin-top:20px;" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2721.4267495037207!2d9.070190915609343!3d46.99259307914885!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47852e9322cc1971%3A0xf1558647dfdfaa60!2sIn+der+Au+7%2C+8762+Glarus+S%C3%BCd!5e0!3m2!1sen!2sch!4v1470238006004" width="100%" height="450" frameborder="0" style="border:0"></iframe>
<!-- Supporters -->
<section id="supporters">
<div class="supporter-bg">
<div class="container">
<div class="col-lg-12 text-center wow fadeInDown">
<h2 class="supporter-headline">Our Supporters</h2>
<hr class="primary">
<p class="carousel-text supporter-intro text-muted text-center"> Here are our proud supporters of project Digital Glarus. Thanks to our supporters, the first cowerking space in Glarus
is going to have a new look!</p>
<p class="supporter" style="text-transform: uppercase;">
{% for supporter in supporters %}
{{ supporter.name }}
<br>
{% endfor %}
<br>
<a href="{% url 'digitalglarus:supportus' %}" class="btn btn-default btn-primary sr-button">Become a supporter</a>
<br>
<br>
<br>
<br>
</div>
</div>
</div>
</section>
<section id="contact">
<div class="fill">
<div class="row" class="wow fadeInDown">
<div class="col-lg-12 text-center wow fadeInDown">
<div class=" map-wrap">
<iframe style="pointer-events:none;margin-top:20px;" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2721.4267495037207!2d9.070190915609343!3d46.99259307914885!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47852e9322cc1971%3A0xf1558647dfdfaa60!2sIn+der+Au+7%2C+8762+Glarus+S%C3%BCd!5e0!3m2!1sen!2sch!4v1470238006004" width="100%" height="450" frameborder="0" style="border:0"></iframe>
</div> </div>
<div class="col-md-4 map-title"> </div>
Digital Glarus<br> <div class="row">
<span class="map-caption">In der Au 7 Schwanden 8762 Switzerland <div class="col-md-4 map-title">
Digital Glarus<br>
<span class="map-caption">
In der Au 7 Schwanden 8762 Switzerland
<br>info@digitalglarus.ch <br>info@digitalglarus.ch
<br> <br>
(044) 534-66-22 (044) 534-66-22
<p>&nbsp;</p> <br>
</span> </span>
</div> <p>&nbsp;</p>
<p>&nbsp;</p>
</div> </div>
</div> </div>
</div> </div>
</section> </div>
</section>
{% endblock %} {% endblock %}

View file

@ -3,245 +3,248 @@
{% block content %} {% block content %}
<!-- Header --> <style type="text/css">
<header>
<div class="container">
<div class="intro-text">
<p>
</p>
<div class="intro-headline">
<span class="intro-headline">
Where great minds work
</span>
</div>
</div>
</div>
<div class="container-fluid darkened-container"> .caption-style-1{
<h3 class="intro-small"> list-style-type: none;
Book a date today and dive in</h3> margin: 0px;
<a href="{% url 'digitalglarus:booking' %}" class="btn btn-primary">Join now</a> padding: 0px;
<!-- <form class="form-inline"> }
<div class="form-group">
<label class="sr-only" for="exampleInputPassword3">Pick a date</label>
<input type="password" class="form-control" id="exampleInputPassword3" placeholder="Pick a date">
<div class="form-group">
<label class="sr-only" for="exampleInputEmail3">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail3" placeholder="Enter email">
</div>
</div>
<button type="submit" class="btn btn-primary">book a date</button>
</form> -->
</div> .caption-style-1 li{
float: left;
padding: 0px;
position: relative;
overflow: hidden;
}
<style type="text/css"> .caption-style-1 li:hover .caption{
opacity: 1;
}
.caption-style-1{ .caption-style-1 img{
list-style-type: none; margin: 0px;
margin: 0px; padding: 0px;
padding: 0px; float: left;
z-index: 4;
}
} .caption-style-1 .caption{
cursor: pointer;
opacity: 0;
-webkit-transition:all 0.45s ease-in-out;
-moz-transition:all 0.45s ease-in-out;
-o-transition:all 0.45s ease-in-out;
-ms-transition:all 0.45s ease-in-out;
transition:all 0.45s ease-in-out;
}
.caption-style-1 .blur{
background-color: rgba(0,0,0,0.65);
height: 800px;
width: 800px;
z-index: 10;
position: absolute;
}
.caption-style-1 li{ .caption-style-1 .caption-text h1{
float: left; text-transform: uppercase;
padding: 0px; font-size: 24px;
position: relative; }
overflow: hidden; .caption-style-1 .caption-text{
} z-index: 0;
color: #fff;
width: 400px;
height: 200px;
text-align: center;
top:30px;
}
.caption-style-1 li:hover .caption{ /** content **/
opacity: 1; .content{
margin-top: 100px;
margin-left: 100px;
width: 700px;
}
} .content p{
color: #ecf0f1;
font-family: "Lato";
line-height: 28px;
font-size: 15px;
padding-top: 50px;
}
p.credit{
padding-top: 20px;
font-size: 12px;
}
.caption-style-1 img{ p a{
margin: 0px; color: #ecf0f1;
padding: 0px; }
float: left; .section-top-content {
z-index: 4; font-size: 30px;
} font-weight: 600;
padding-top: 50px;
display: flex;
.caption-style-1 .caption{ justify-content: center;
cursor: pointer; }
opacity: 0; .section-top-content span{
-webkit-transition:all 0.45s ease-in-out; font-weight: 300;
-moz-transition:all 0.45s ease-in-out; }
-o-transition:all 0.45s ease-in-out; .section-top-txt {
-ms-transition:all 0.45s ease-in-out; padding-top: 80px;
transition:all 0.45s ease-in-out; text-transform: uppercase;
text-align: right;
} }
.caption-style-1 .blur{ .section-top-img {
background-color: rgba(0,0,0,0.65); max-width: 50%;
height: 800px; padding: 0px;
width: 800px; }
z-index: 10; @media(max-width:500px) {
position: absolute; .section-top-txt {
} padding: 55px 5px 0 0px;
}
.caption-style-1 .caption-text h1{ .section-top-content {
text-transform: uppercase; font-size: 28px;
font-size: 24px; }
} }
.caption-style-1 .caption-text{ @media(max-width:360px) {
z-index: 0; .section-top-txt {
color: #fff; padding: 32px 5px 0 0px;
width: 400px; }
height: 200px; .section-top-content {
text-align: center; font-size: 18px;
top:30px; }
}
@media screen and (min-device-width: 768px) and (max-device-width: 991px) {
} .section-top-txt {
padding-top: 43px;
/** content **/ }
.content{ }
margin-top: 100px; @media screen and (min-device-width: 992px) and (max-device-width: 1200px) {
margin-left: 100px; .section-top-txt {
width: 700px; padding-top: 65px;
} }
}
.content p{ @media screen and (min-device-width: 361px) and (max-device-width: 428px) {
color: #ecf0f1; .section-top-txt {
font-family: "Lato"; padding: 35px 5px 0 0px;
line-height: 28px; }
font-size: 15px; .section-top-content {
padding-top: 50px; font-size: 22px;
} }
}
p.credit{
padding-top: 20px;
font-size: 12px;
}
p a{
color: #ecf0f1;
}
.section-top-content {
font-size: 30px;
font-weight: 600;
padding-top: 50px;
}
.section-top-content span{
font-weight: 300;
}
.section-top-txt {
padding-top: 80px;
text-transform: uppercase;
text-align: right;
}
.section-top-img {
padding:0px;
}
@media(max-width:500px) {
.section-top-txt {
padding: 55px 5px 0 0px;
}
.section-top-content {
font-size: 28px;
}
}
@media(max-width:360px) {
.section-top-txt {
padding: 32px 5px 0 0px;
}
.section-top-content {
font-size: 18px;
}
}
@media screen and (min-device-width: 768px) and (max-device-width: 991px) {
.section-top-txt {
padding-top: 43px;
}
}
@media screen and (min-device-width: 992px) and (max-device-width: 1200px) {
.section-top-txt {
padding-top: 65px;
}
}
</style> </style>
<!-- Header -->
<header>
</header> <div class="container">
<!-- form section ends--> <div class="intro-text">
<!-- Services Section --> <div class="intro-headline">
<section id="services"> <span class="intro-headline">
<div class="container"> Where great minds work
<div class="row"> </span>
<div class="col-lg-12 text-center wow fadeInDown section-top-content"> </div>
<div class="col-lg-3 col-sm-2 col-xs-12"></div>
<div class="col-lg-6 col-sm-10 col-xs-12">
<div class="col-lg-5 col-sm-5 col-xs-6 section-top-txt">Partner <span>of</span></div>
<div class="col-lg-7 col-sm-4 col-xs-6 section-top-img"><a href="https://zurich.impacthub.ch" target="_blank"><img src="{% static 'digitalglarus/img/impacthub_logo.jpg' %}" class="img-responsive" alt=""></a></div>
</div>
<div class="col-lg-3 col-sm-12 col-xs-12"></div>
</div> </div>
<div class="col-lg-12 col-xs-12 text-center wow fadeInDown"> </div>
<div class="container-fluid darkened-container">
<h3 class="intro-small">Book a date today and dive in</h3>
<a href="{% url 'digitalglarus:booking' %}" class="btn btn-primary">Join now</a>
{% comment %}
<form class="form-inline">
<div class="form-group">
<label class="sr-only" for="exampleInputPassword3">Pick a date</label>
<input type="password" class="form-control" id="exampleInputPassword3" placeholder="Pick a date">
<div class="form-group">
<label class="sr-only" for="exampleInputEmail3">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail3" placeholder="Enter email">
</div>
</div>
<button type="submit" class="btn btn-primary">book a date</button>
</form>
{% endcomment %}
</div>
</header>
<!-- form section ends-->
<!-- Services Section -->
<section id="services">
<div class="container">
<div class="text-center wow fadeInUp section-top-content">
<div class="section-top-txt">Partner <span>of</span></div>
<div class="section-top-img">
<a href="https://zurich.impacthub.ch" target="_blank">
<img src="{% static 'digitalglarus/img/impacthub_logo.jpg' %}" class="img-responsive" alt="">
</a>
</div>
</div>
<div class="text-center wow fadeInUp">
<h2 class="section-heading">In Digital Glarus you can..</h2> <h2 class="section-heading">In Digital Glarus you can..</h2>
<hr class="primary"> <hr class="primary">
</div> </div>
</div>
<!--dropdown icons--> <!--dropdown icons-->
<div class="row text-center"> <div class="row text-center">
<div class="col-xs-6 col-sm-3"> <div class="col-xs-6 col-sm-3">
<div class="team-member wow fadeInDown" data-wow-delay="0.3s"> <div class="team-member wow fadeInUp" data-wow-delay="0.3s">
<img src="{% static 'digitalglarus/img/services/sleep.svg' %}" class="img-responsive img-toggle" alt=""> <img src="{% static 'digitalglarus/img/services/sleep.svg' %}" class="img-responsive img-toggle" alt="">
</div>
</div> </div>
</div> <div class="col-xs-6 col-sm-3">
<div class="col-xs-6 col-sm-3"> <div class="team-member wow fadeInUp" data-wow-delay="0.5s">
<div class="team-member wow fadeInDown" data-wow-delay="0.5s"> <img src="{% static 'digitalglarus/img/services/eat.svg' %}" class="img-responsive img-toggle" alt="">
<img src="{% static 'digitalglarus/img/services/eat.svg' %}" class="img-responsive img-toggle" alt=""> </div>
</div> </div>
</div> <div class="col-xs-6 col-sm-3">
<div class="col-xs-6 col-sm-3"> <div class="team-member wow fadeInUp" data-wow-delay="0.7s">
<div class="team-member wow fadeInDown" data-wow-delay="0.7s"> <img src="{% static 'digitalglarus/img/services/freshenup.svg' %}" class="img-responsive img-toggle cursor-pointer" alt="">
<img src="{% static 'digitalglarus/img/services/freshenup.svg' %}" class="img-responsive img-toggle cursor-pointer" alt=""> </div>
</div> </div>
</div> <div class="col-xs-6 col-sm-3">
<div class="col-xs-6 col-sm-3"> <div class="team-member wow fadeInUp" data-wow-delay="0.8s">
<div class="team-member wow fadeInDown" data-wow-delay="0.8s"> <img src="{% static 'digitalglarus/img/services/work.svg' %}" class="img-responsive img-toggle" alt="">
<img src="{% static 'digitalglarus/img/services/work.svg' %}" class="img-responsive img-toggle" alt=""> </div>
</div>
</div>
<div class="row text-center" style="margin-left: 0px; margin-right: 0px;">
<div class="col-xs-6 col-sm-3">
<div class="team-member wow fadeInDown" data-wow-delay="0.9s">
<img src="{% static 'digitalglarus/img/services/enjoy.svg' %}" class="img-responsive img-toggle" alt="">
</div> </div>
</div> <div class="row text-center" style="margin-left: 0px; margin-right: 0px;">
<div class="col-xs-6 col-sm-3"> <div class="col-xs-6 col-sm-3">
<div class="team-member wow fadeInDown" data-wow-delay="1s"> <div class="team-member wow fadeInUp" data-wow-delay="0.9s">
<img src="{% static 'digitalglarus/img/services/network.svg' %}" class="img-responsive img-toggle" alt=""> <img src="{% static 'digitalglarus/img/services/enjoy.svg' %}" class="img-responsive img-toggle" alt="">
</div> </div>
</div> </div>
<div class="col-xs-6 col-sm-3"> <div class="col-xs-6 col-sm-3">
<div class="team-member wow fadeInDown" data-wow-delay="1.1s"> <div class="team-member wow fadeInUp" data-wow-delay="1s">
<img src="{% static 'digitalglarus/img/services/lightbulb.svg' %}" class="img-responsive img-toggle cursor-pointer" alt=""> <img src="{% static 'digitalglarus/img/services/network.svg' %}" class="img-responsive img-toggle" alt="">
</div> </div>
</div> </div>
<div class="col-xs-6 col-sm-3"> <div class="col-xs-6 col-sm-3">
<div class="team-member wow fadeInDown" data-wow-delay="1.2s"> <div class="team-member wow fadeInUp" data-wow-delay="1.1s">
<img src="{% static 'digitalglarus/img/services/beinspired.svg' %}" class="img-responsive img-toggle" alt=""> <img src="{% static 'digitalglarus/img/services/lightbulb.svg' %}" class="img-responsive img-toggle cursor-pointer" alt="">
</div>
</div>
<div class="col-xs-6 col-sm-3">
<div class="team-member wow fadeInUp" data-wow-delay="1.2s">
<img src="{% static 'digitalglarus/img/services/beinspired.svg' %}" class="img-responsive img-toggle" alt="">
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- start:recommendationSlider --> <!-- start:recommendationSlider -->
<hr class="primary"> <hr class="primary">
<div id="carousel-recommendation-ungleich" class="carousel slide ungleich ungleich-gallery ungleich-gallery-text-carousel" data-ride="carousel" data-interval="false"> <div id="carousel-recommendation-ungleich" class="carousel slide ungleich ungleich-gallery ungleich-gallery-text-carousel" data-ride="carousel" data-interval="false">
<!-- Indicators --> <!-- Indicators -->
<ol class="carousel-indicators"> <ol class="carousel-indicators">
<li data-target="#carousel-recommendation-ungleich" data-slide-to="0" class="active"></li> <li data-target="#carousel-recommendation-ungleich" data-slide-to="0" class="active"></li>
<li data-target="#carousel-recommendation-ungleich" data-slide-to="1"></li> <li data-target="#carousel-recommendation-ungleich" data-slide-to="1"></li>
<li data-target="#carousel-recommendation-ungleich" data-slide-to="2"></li> <li data-target="#carousel-recommendation-ungleich" data-slide-to="2"></li>
</ol> </ol>
<!-- Wrapper for slides --> <!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox"> <div class="carousel-inner" role="listbox">
<div class="item active"> <div class="item active">
<p class="carousel-text text-muted text-center"> <p class="carousel-text text-muted text-center">
When we first moved our company HQ to Glarus, When we first moved our company HQ to Glarus,
@ -256,13 +259,13 @@
</div> </div>
<div class="item"> <div class="item">
<p class="carousel-text text-muted text-center"> <p class="carousel-text text-muted text-center">
After my first visit to Digital Glarus, I felt After my first visit to Digital Glarus, I felt
right at home and at peace. Now that 200ok has a right at home and at peace. Now that 200ok has a
mountain-side office, our meetings, workshops and mountain-side office, our meetings, workshops and
code-retreats are so much more intense and productive code-retreats are so much more intense and productive
for everyone. And in the end, when people came for everyone. And in the end, when people came
over from the city for work, they want to come back over from the city for work, they want to come back
real soon, because it just feels like going on vacation. real soon, because it just feels like going on vacation.
</p> </p>
<p class="text-center"> <p class="text-center">
<strong> - Alain Lafon </strong>, CEO of 200ok GmbH <strong> - Alain Lafon </strong>, CEO of 200ok GmbH
@ -281,205 +284,185 @@
Swiss Federal Institute for Forest, Snow and Landscape Research WSL Swiss Federal Institute for Forest, Snow and Landscape Research WSL
</p> </p>
</div> </div>
</div> </div>
</div> </div>
<!-- end:recommendationSlider --> <!-- end:recommendationSlider -->
</div></section> </section>
<!-- Portfolio Grid Section -->
<!-- Portfolio Grid Section --> <section id="portfolio" class="no-padding">
<section id="portfolio" class="no-padding">
<div class="container-fluid"> <div class="container-fluid">
<!--<div class="row"> <!--<div class="row">
<div class="col-lg-12 text-center wow fadeInDown"> <div class="col-lg-12 text-center wow fadeInUp">
<h2 class="section-heading">here you can</h2> <h2 class="section-heading">here you can</h2>
<h3 class="section-subheading text-muted">Join our community. Inspire and be inspired.</h3> <h3 class="section-subheading text-muted">Join our community. Inspire and be inspired.</h3>
</div>--> </div>-->
</div>
<div class="row no-gutter popup-gallery">
<div class="row no-gutter popup-gallery">
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInDown text-center" data-wow-delay="0.5s"> <div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInUp text-center" data-wow-delay="0.5s">
<ul class="caption-style-1"> <ul class="caption-style-1">
<li> <li>
<img src="{% static 'digitalglarus/img/portfolio/excursion.png' %}" class="img-responsive inline-block" alt=""> <img src="{% static 'digitalglarus/img/portfolio/excursion.png' %}" class="img-responsive inline-block" alt="">
<div class="caption"> <div class="caption">
<div class="blur"></div> <div class="blur"></div>
</div> </div>
</li> </li>
</ul> </ul>
<div class="caption portfolio-caption-white">excursions</div> <div class="caption portfolio-caption-white">excursions</div>
</div>
</div> <div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInUp text-center" data-wow-delay="0.8s">
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInDown text-center" data-wow-delay="0.8s">
<ul class="caption-style-1"> <ul class="caption-style-1">
<li> <li>
<img src="{% static 'digitalglarus/img/portfolio/ski.png' %}" class="img-responsive inline-block" alt=""> <img src="{% static 'digitalglarus/img/portfolio/ski.png' %}" class="img-responsive inline-block" alt="">
<div class="caption"> <div class="caption">
<div class="blur"></div> <div class="blur"></div>
</div>
</div>
</li> </li>
</ul> </ul>
<div class="caption portfolio-caption-white">enjoy the great outdoors</div> <div class="caption portfolio-caption-white">enjoy the great outdoors</div>
</div> </div>
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInUp text-center" data-wow-delay="1.1s">
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInDown text-center" data-wow-delay="1.1s"> <ul class="caption-style-1">
<ul class="caption-style-1"> <li>
<li> <img src="{% static 'digitalglarus/img/portfolio/concert.png' %}" class="img-responsive inline-block" alt="">
<img src="{% static 'digitalglarus/img/portfolio/concert.png' %}" class="img-responsive inline-block" alt="">
<div class="caption">
<div class="blur"></div>
</div>
</li>
</ul>
<div class="caption portfolio-caption-white">cultural events</div>
</div>
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInDown text-center" data-wow-delay="1.2s">
<ul class="caption-style-1">
<li>
<img src="{% static 'digitalglarus/img/portfolio/inspire.png' %}" class="img-responsive inline-block" alt="">
<div class="caption">
<div class="blur"></div>
</div>
</li>
</ul>
<div class="caption portfolio-caption-white">be inspired</div>
</div>
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInDown text-center" data-wow-delay="1.3s">
<ul class="caption-style-1">
<li>
<img src="{% static 'digitalglarus/img/portfolio/workshop.png' %}" class="img-responsive inline-block" alt="">
<div class="caption"> <div class="caption">
<div class="blur"></div> <div class="blur"></div>
</div> </div>
</li> </li>
</ul> </ul>
<div class="caption portfolio-caption-white">workshops</div> <div class="caption portfolio-caption-white">cultural events</div>
</div> </div>
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInDown text-center" data-wow-delay="1.4s"> <div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInUp text-center" data-wow-delay="1.2s">
<ul class="caption-style-1"> <ul class="caption-style-1">
<li> <li>
<img src="{% static 'digitalglarus/img/portfolio/recharge.png' %}" class="img-responsive inline-block" alt=""> <img src="{% static 'digitalglarus/img/portfolio/inspire.png' %}" class="img-responsive inline-block" alt="">
<div class="caption"> <div class="caption">
<div class="blur"></div> <div class="blur"></div>
</div> </div>
</li> </li>
</ul> </ul>
<div class="caption portfolio-caption-white">recharge</div> <div class="caption portfolio-caption-white">be inspired</div>
</div>
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInUp text-center" data-wow-delay="1.3s">
<ul class="caption-style-1">
<li>
<img src="{% static 'digitalglarus/img/portfolio/workshop.png' %}" class="img-responsive inline-block" alt="">
<div class="caption">
<div class="blur"></div>
</div>
</li>
</ul>
<div class="caption portfolio-caption-white">workshops</div>
</div>
<div class="col-lg-4 col-md-4 col-sm-6 portfolio-item wow fadeInUp text-center" data-wow-delay="1.4s">
<ul class="caption-style-1">
<li>
<img src="{% static 'digitalglarus/img/portfolio/recharge.png' %}" class="img-responsive inline-block" alt="">
<div class="caption">
<div class="blur"></div>
</div>
</li>
</ul>
<div class="caption portfolio-caption-white">recharge</div>
</div>
</div> </div>
</div>
</div>
</section> </section>
<!--aside-->
<aside class="bg-dark">
<div class="container text-center">
<!--aside--> <div class="call-to-action aside-caption-white">
<aside class="bg-dark"> Join our community. Be our member now!
<div class="container text-center">
<div class="call-to-action aside-caption-white">
Join our community. Be our member now!
<br>
<br>
<a href="{% url 'digitalglarus:signup' %}" class="btn btn-default btn-primary sr-button"> Sign Up </a>
</div>
</div>
</aside>
<!-- Half Page Image Background Carousel -->
<section id="myCarousel" class="carousel slide">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
<li data-target="#myCarousel" data-slide-to="3"></li>
</ol>
<!-- Wrapper for Slides -->
<div class="carousel-inner">
<div class="item active">
<!-- Set the first background image using inline CSS below. -->
<div class="fill" style="background-image:url({% static 'digitalglarus/img/portfolio/slider_1.png' %})"></div>
<div class="carousel-caption carousel-caption-text">
<strong>OpenNebula workshop</strong> : <br>
push your geeky boundary with us at Digital Chalet
</div>
</div>
<div class="item">
<!-- Set the second background image using inline CSS below. -->
<div class="fill" style="background-image:url({% static 'digitalglarus/img/portfolio/slider_2.png' %})"></div>
<div class="carousel-caption carousel-caption-text">
<strong>Lorawan meetup</strong> : <br>
connect with like-minded people and discuss your latest tech obsession.
</div>
</div>
<div class="item">
<!-- Set the third background image using inline CSS below. -->
<div class="fill" style="background-image:url({% static 'digitalglarus/img/portfolio/slider_3.png' %})"></div>
<div class="carousel-caption carousel-caption-text">
Cooking and Hacking at Digital Chalet Schwanden
</div>
</div>
<div class="item">
<!-- Set the third background image using inline CSS below. -->
<div class="fill" style="background-image:url({% static 'digitalglarus/img/portfolio/slider_4.png' %})"></div>
<div class="carousel-caption carousel-caption-text">
Dive into the beautiful nature around you anytime you want
</div>
</div>
</div>
<!-- Controls -->
<a class="left carousel-control" href="#myCarousel" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a class="right carousel-control" href="#myCarousel" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</section>
<section id="contact">
<div class="fill">
<div class="row" class="wow fadeInDown">
<div class="col-lg-12 text-center wow fadeInDown">
<h2 class="section-heading">Contact Us</h2>
<div class=" map-wrap">
<iframe style="pointer-events:none" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2721.4267495037207!2d9.070190915609343!3d46.99259307914885!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47852e9322cc1971%3A0xf1558647dfdfaa60!2sIn+der+Au+7%2C+8762+Glarus+S%C3%BCd!5e0!3m2!1sen!2sch!4v1470238006004" width="100%" height="450" frameborder="0" style="border:0"></iframe></div>
<div class="col-md-4 map-title">
Digital Glarus<br>
<span class="map-caption">In der Au 7 Schwanden 8762 Switzerland
<br>info@digitalglarus.ch
<br> <br>
(044) 534-66-22 <br>
<p>&nbsp;</p> <a href="{% url 'digitalglarus:signup' %}" class="btn btn-default btn-primary sr-button"> Sign Up </a>
</span>
</div> </div>
<p>&nbsp;</p>
</div>
</div>
</div> </div>
</aside>
<!-- Half Page Image Background Carousel -->
<section id="myCarousel" class="carousel slide">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
<li data-target="#myCarousel" data-slide-to="3"></li>
</ol>
<!-- Wrapper for Slides -->
<div class="carousel-inner">
<div class="item active">
<!-- Set the first background image using inline CSS below. -->
<div class="fill" style="background-image:url({% static 'digitalglarus/img/portfolio/slider_1.png' %})"></div>
<div class="carousel-caption carousel-caption-text">
<strong>OpenNebula workshop</strong> : <br>
push your geeky boundary with us at Digital Chalet
</div>
</div> </div>
</section> <div class="item">
<!-- Set the second background image using inline CSS below. -->
<div class="fill" style="background-image:url({% static 'digitalglarus/img/portfolio/slider_2.png' %})"></div>
<div class="carousel-caption carousel-caption-text">
<strong>Lorawan meetup</strong> : <br>
connect with like-minded people and discuss your latest tech obsession.
</div>
</div>
<div class="item">
<!-- Set the third background image using inline CSS below. -->
<div class="fill" style="background-image:url({% static 'digitalglarus/img/portfolio/slider_3.png' %})"></div>
<div class="carousel-caption carousel-caption-text">
Cooking and Hacking at Digital Chalet Schwanden
</div>
</div>
<div class="item">
<!-- Set the third background image using inline CSS below. -->
<div class="fill" style="background-image:url({% static 'digitalglarus/img/portfolio/slider_4.png' %})"></div>
<div class="carousel-caption carousel-caption-text">
Dive into the beautiful nature around you anytime you want
</div>
</div>
</div>
<!-- Controls -->
<a class="left carousel-control" href="#myCarousel" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a class="right carousel-control" href="#myCarousel" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</section>
<section id="contact">
<div class="fill">
<div class="container">
<div class="wow fadeInUp">
<div class="text-center">
<h2 class="section-heading">Contact Us</h2>
<div class="map-wrap">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2721.4267495037207!2d9.070190915609343!3d46.99259307914885!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47852e9322cc1971%3A0xf1558647dfdfaa60!2sIn+der+Au+7%2C+8762+Glarus+S%C3%BCd!5e0!3m2!1sen!2sch!4v1470238006004" width="100%" height="450" frameborder="0" style="border:0"></iframe>
</div>
<div class="map-title">
Digital Glarus<br>
<span class="map-caption">In der Au 7 Schwanden 8762 Switzerland
<br>info@digitalglarus.ch
<br>
(044) 534-66-22
<p>&nbsp;</p>
</span>
</div>
<p>&nbsp;</p>
</div>
</div>
</div>
</div>
</section>
<!-- <!--

View file

@ -7,7 +7,7 @@
@media(min-width: 768px) { @media(min-width: 768px) {
.order-detail-container { .order-detail-container {
padding: 30px; padding: 30px 30px 20px;
} }
} }
@ -53,7 +53,7 @@
} }
.order-detail-container .order-details { .order-detail-container .order-details {
margin-bottom: 30px; margin-bottom: 15px;
} }
.order-detail-container .order-details strong { .order-detail-container .order-details strong {
@ -90,3 +90,18 @@
width: 16px; width: 16px;
} }
} }
.order_detail_footer {
font-size: 9px;
letter-spacing: 1px;
color: #333333;
}
.order_detail_footer strong {
font-size: 11px;
}
#virtual_machine_create_form {
padding: 15px 0;
}

View file

@ -135,9 +135,7 @@
</div> </div>
</div> </div>
</div> </div>
{% if not order %} <hr>
<hr>
{% endif %}
</div> </div>
{% if not order %} {% if not order %}
{% block submit_btn %} {% block submit_btn %}
@ -155,6 +153,11 @@
</div> </div>
</form> </form>
{% endblock submit_btn %} {% endblock submit_btn %}
{% else %}
<div class="order_detail_footer">
<strong>ungleich glarus ag</strong>&nbsp;&nbsp;Bahnhotstrasse 1, 8783 Linthal, Switzerland<br>
www.datacenterlight.ch&nbsp;&nbsp;|&nbsp;&nbsp;info@datacenterlight.ch
</div>
{% endif %} {% endif %}
{% endif %} {% endif %}
</div> </div>

View file

@ -39,27 +39,25 @@
</thead> </thead>
<tbody> <tbody>
{% for vm in vms %} {% for vm in vms %}
<tr> <tr>
<td data-header="ID">{{vm.vm_id}}</td> <td data-header="ID">{{vm.vm_id}}</td>
{% if vm.ipv6 %} <td data-header="IPv4">{% if vm.ipv4 %}{{vm.ipv4}}{% endif %}</td>
<td data-header="IPv4">{{vm.ipv4}}</td> <td data-header="IPv6">{% if vm.ipv6 %}{{vm.ipv6}}{% endif %}</td>
<td data-header="IPv6">{{vm.ipv6}}</td> <td data-header="{% trans 'Status' %}">
{% endif %} <strong>
<td data-header="{% trans 'Status' %}"> {% if vm.state == 'ACTIVE' %}
<strong> <span class="vm-status-active">{{vm.state|title}}</span>
{% if vm.state == 'ACTIVE' %} {% elif vm.state == 'FAILED' %}
<span class="vm-status-active">{{vm.state|title}}</span> <span class="vm-status-failed">{{vm.state|title}}</span>
{% elif vm.state == 'FAILED' %} {% else %}
<span class="vm-status-failed">{{vm.state|title}}</span> <span class="vm-status">{{vm.state|title}}</span>
{% else %} {% endif %}
<span class="vm-status">{{vm.state|title}}</span> </strong>
{% endif %} </td>
</strong> <td class="text-right last-td">
</td> <a class="btn btn-vm-detail" href="{% url 'hosting:virtual_machines' vm.vm_id %}">{% trans "View Detail" %}</a>
<td class="text-right last-td"> </td>
<a class="btn btn-vm-detail" href="{% url 'hosting:virtual_machines' vm.vm_id %}">{% trans "View Detail" %}</a> </tr>
</td>
</tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>

View file

@ -8,7 +8,8 @@ from .views import (
MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView, MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView,
HostingPricingView, CreateVirtualMachinesView, HostingBillListView, HostingPricingView, CreateVirtualMachinesView, HostingBillListView,
HostingBillDetailView, SSHKeyDeleteView, SSHKeyCreateView, SSHKeyListView, HostingBillDetailView, SSHKeyDeleteView, SSHKeyCreateView, SSHKeyListView,
SSHKeyChoiceView, DashboardView, SettingsView, ResendActivationEmailView) SSHKeyChoiceView, DashboardView, SettingsView, ResendActivationEmailView
)
urlpatterns = [ urlpatterns = [

View file

@ -672,13 +672,25 @@ class OrdersHostingDetailView(LoginRequiredMixin,
permission_required = ['view_hostingorder'] permission_required = ['view_hostingorder']
model = HostingOrder model = HostingOrder
def get_object(self): def get_object(self, queryset=None):
return HostingOrder.objects.get( order_id = self.kwargs.get('pk')
pk=self.kwargs.get('pk')) if self.kwargs.get('pk') else None try:
hosting_order_obj = HostingOrder.objects.get(pk=order_id)
logger.debug("Found HostingOrder for id {order_id}".format(
order_id=order_id
))
except HostingOrder.DoesNotExist:
logger.debug("HostingOrder not found for id {order_id}".format(
order_id=order_id
))
hosting_order_obj = None
return hosting_order_obj
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
# Get context # Get context
context = super(DetailView, self).get_context_data(**kwargs) context = super(
OrdersHostingDetailView, self
).get_context_data(**kwargs)
obj = self.get_object() obj = self.get_object()
owner = self.request.user owner = self.request.user
stripe_api_cus_id = self.request.session.get('customer') stripe_api_cus_id = self.request.session.get('customer')
@ -692,6 +704,17 @@ class OrdersHostingDetailView(LoginRequiredMixin,
context['page_header_text'] = _('Confirm Order') context['page_header_text'] = _('Confirm Order')
else: else:
context['page_header_text'] = _('Invoice') context['page_header_text'] = _('Invoice')
if not self.request.user.has_perm(
self.permission_required[0], obj
):
logger.debug(
"User {user} does not have permission on HostingOrder "
"{order_id}. Raising 404 error now.".format(
user=self.request.user.email,
order_id=obj.id if obj else 'None'
)
)
raise Http404
if obj is not None: if obj is not None:
# invoice for previous order # invoice for previous order

View file

@ -1,11 +1,11 @@
Babel==2.3.4 Babel==2.3.4
Django==1.11.8 Django==1.9.4
Django-Select2==4.3.2 Django-Select2==4.3.2
Pillow==4.3.0 Pillow==3.2.0
URLObject==2.4.0 URLObject==2.4.0
Unidecode==0.04.21 Unidecode==0.04.19
YURL==0.13 YURL==0.13
aldryn-apphooks-config==0.3.3 aldryn-apphooks-config==0.2.7
aldryn-boilerplates==0.7.4 aldryn-boilerplates==0.7.4
aldryn-categories==1.0.3 aldryn-categories==1.0.3
aldryn-common==1.0.1 aldryn-common==1.0.1
@ -14,48 +14,41 @@ aldryn-people==1.2.0
aldryn-reversion==1.0.8 aldryn-reversion==1.0.8
aldryn-search==0.2.11 aldryn-search==0.2.11
aldryn-translation-tools==0.2.1 aldryn-translation-tools==0.2.1
amqp==2.2.1
backport-collections==0.1 backport-collections==0.1
billiard==3.5.0.3
cdist==4.7.0
celery==4.0.2
cmsplugin-filer==1.0.1 cmsplugin-filer==1.0.1
coverage==4.3.4
django-admin-honeypot==1.0.0
django-appconf==1.0.2 django-appconf==1.0.2
django-appdata==0.1.6 django-appdata==0.1.5
django-bootstrap3==9.1.0 django-bootstrap3==7.0.1
django-celery-results==1.0.1 django-classy-tags==0.7.2
django-classy-tags==0.8.0 django-cms==3.2.5
django-cms==3.4.5
django-compressor==2.0 django-compressor==2.0
django-debug-toolbar==1.4 django-debug-toolbar==1.4
django-dotenv==1.4.1 django-dotenv==1.4.1
django-extensions==1.6.7 django-extensions==1.6.7
django-filer==1.3.0 django-filer==1.2.0
django-filter==0.13.0 django-filter==0.13.0
django-formtools==2.1 django-formtools==1.0
django-guardian==1.4.9 django-guardian==1.4.4
django-haystack==2.4.1 django-haystack==2.4.1
django-meta==1.2 django-meta==1.2
django-meta-mixin==0.3.0 django-meta-mixin==0.3.0
django-model-utils==2.5 django-model-utils==2.5
django-mptt==0.8.7 django-mptt==0.8.4
django-parler==1.6.3 django-parler==1.6.3
django-phonenumber-field==1.1.0 django-phonenumber-field==1.1.0
django-polymorphic==1.3 django-polymorphic==0.9.2
django-reversion==1.10.2 django-reversion==1.10.2
django-sekizai==0.10.0 django-sekizai==0.9.0
django-sortedm2m==1.2.2 django-sortedm2m==1.2.2
django-spurl==0.6.4 django-spurl==0.6.4
django-standard-form==1.1.1 django-standard-form==1.1.1
django-stored-messages==1.4.0 django-stored-messages==1.4.0
django-taggit==0.22.1 django-taggit==0.18.3
django-taggit-autosuggest==0.3.1 django-taggit-autosuggest==0.2.8
django-taggit-templatetags==0.2.5 django-taggit-templatetags==0.2.5
django-templatetag-sugar==1.0 django-templatetag-sugar==1.0
django-treebeard==4.1.2 django-treebeard==4.0.1
djangocms-admin-style==1.2.7 djangocms-admin-style==1.1.1
djangocms-apphook-setup==0.1.2 djangocms-apphook-setup==0.1.2
djangocms-blog==0.7.0 djangocms-blog==0.7.0
djangocms-file==1.0 djangocms-file==1.0
@ -68,33 +61,39 @@ djangocms-picture==1.0.0
djangocms-teaser==0.2.0 djangocms-teaser==0.2.0
djangocms-text-ckeditor==2.9.3 djangocms-text-ckeditor==2.9.3
djangocms-video==1.0.0 djangocms-video==1.0.0
djangorestframework==3.6.3 easy-thumbnails==2.3
easy-thumbnails==2.4.2
flake8==3.3.0
html5lib==0.9999999 html5lib==0.9999999
kombu==4.1.0
lxml==3.6.0 lxml==3.6.0
mccabe==0.6.1
model-mommy==1.2.6 model-mommy==1.2.6
git+https://github.com/ungleich/python-oca.git#egg=python-oca
olefile==0.44
phonenumbers==7.4.0 phonenumbers==7.4.0
phonenumberslite==7.4.0 phonenumberslite==7.4.0
psycopg2==2.6.1 psycopg2==2.7.1
pycodestyle==2.3.1
pycryptodome==3.4 pycryptodome==3.4
pyflakes==1.5.0
pylibmc==1.5.1 pylibmc==1.5.1
python-dateutil==2.5.3 python-dateutil==2.5.3
python-memcached==1.58
python-slugify==1.2.0 python-slugify==1.2.0
pytz==2017.3 pytz==2016.4
rcssmin==1.0.6 rcssmin==1.0.6
redis==2.10.5
requests==2.10.0 requests==2.10.0
rjsmin==1.0.12 rjsmin==1.0.12
six==1.10.0 six==1.10.0
sqlparse==0.1.19 sqlparse==0.1.19
stripe==1.33.0 stripe==1.33.0
vine==1.1.4
wheel==0.29.0 wheel==0.29.0
django-admin-honeypot==1.0.0
coverage==4.3.4
git+https://github.com/ungleich/python-oca.git#egg=python-oca
djangorestframework==3.6.3
flake8==3.3.0
python-memcached==1.58
celery==4.0.2
redis==2.10.5
django-celery-results==1.0.1
kombu==4.1.0
mccabe==0.6.1
pycodestyle==2.3.1
pyflakes==1.5.0
billiard==3.5.0.3
amqp==2.2.1
vine==1.1.4
cdist==4.7.0

View file

@ -5,7 +5,9 @@ from .models import (
UngelichContactUsSection, UngelichTextSection, Service, ServiceItem, UngelichContactUsSection, UngelichTextSection, Service, ServiceItem,
About, AboutItem, SectionWithImage, UngleichServiceItem, UngleichHeader, About, AboutItem, SectionWithImage, UngleichServiceItem, UngleichHeader,
UngleichHeaderItem, UngleichProductItem, UngleichProduct, UngleichCustomer, UngleichHeaderItem, UngleichProductItem, UngleichProduct, UngleichCustomer,
UngleichCustomerItem, UngleichHTMLOnly, UngleichSimpleHeader UngleichCustomerItem, UngleichHTMLOnly, UngleichSimpleHeader,
UngleichHeaderWithBackgroundImageSlider,
UngleichHeaderWithBackgroundImageSliderItem
) )
@ -224,6 +226,41 @@ class UngleichHeaderItemPlugin(CMSPluginBase):
return context return context
@plugin_pool.register_plugin
class UngleichHeaderBackgroundImageAndTextSliderPlugin(CMSPluginBase):
name = "ungleich Header with Background and Image Slider Plugin"
model = UngleichHeaderWithBackgroundImageSlider
render_template = (
'ungleich_page/ungleich/header_with_background_image_slider.html'
)
cache = False
allow_children = True
child_classes = ['UngleichHeaderBackgroundImageAndTextItemPlugin']
def render(self, context, instance, placeholder):
context['instance'] = instance
return context
@plugin_pool.register_plugin
class UngleichHeaderBackgroundImageAndTextItemPlugin(CMSPluginBase):
name = "ungleich Header with Background and Image and Text Item Plugin"
model = UngleichHeaderWithBackgroundImageSliderItem
render_template = (
'ungleich_page/ungleich/_header_with_background_image_slider_item.html'
)
cache = False
require_parent = True
parent_classes = ['UngleichHeaderBackgroundImageAndTextSliderPlugin']
def render(self, context, instance, placeholder):
context = super(
UngleichHeaderBackgroundImageAndTextItemPlugin, self
).render(context, instance, placeholder)
context['instance'] = instance
return context
@plugin_pool.register_plugin @plugin_pool.register_plugin
class UngleichProductsPlugin(CMSPluginBase): class UngleichProductsPlugin(CMSPluginBase):
name = "ungleich Products Plugin" name = "ungleich Products Plugin"

View file

@ -22,7 +22,7 @@ msgid "Glasfaser menu"
msgstr "" msgstr ""
msgid "\"Sorry, we could not find the page you are looking for!\"" msgid "\"Sorry, we could not find the page you are looking for!\""
msgstr "" msgstr "\"Leider konnten wir die von dir gesuchte Seite nicht finden!\""
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "Umschalten" msgstr "Umschalten"

View file

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2017-12-02 07:30
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import djangocms_text_ckeditor.fields
import filer.fields.image
class Migration(migrations.Migration):
dependencies = [
('filer', '0004_auto_20160328_1434'),
('cms', '0014_auto_20160404_1908'),
('ungleich_page', '0015_ungleichsimpleheader'),
]
operations = [
migrations.CreateModel(
name='UngleichHeaderWithBackgroundImageSlider',
fields=[
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
('carousel_data_interval', models.IntegerField(default=2000)),
],
options={
'abstract': False,
},
bases=('cms.cmsplugin',),
),
migrations.CreateModel(
name='UngleichHeaderWithBackgroundImageSliderItem',
fields=[
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
('description', djangocms_text_ckeditor.fields.HTMLField(default='<div class="intro-cap">We Design, Configure &amp; Maintain <br>Your Linux Infrastructure</div><p class="intro_lead">Ruby on Rails, Django, Java, Webserver, Mailserver, any infrastructure that needs to configured, we provide comprehensive solutions. Amazon, rackspace or bare metal servers, we configure for you.</p><p style="text-align: right;"><a class="btn btn-trans" href="">Learn More</a></p>')),
('background_image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ungleich_header_slider_item_image', to='filer.Image')),
],
options={
'abstract': False,
},
bases=('cms.cmsplugin',),
),
]

View file

@ -124,6 +124,27 @@ class UngleichHeader(CMSPlugin):
carousel_data_interval = models.IntegerField(default=5000) carousel_data_interval = models.IntegerField(default=5000)
class UngleichHeaderWithBackgroundImageSliderItem(CMSPlugin):
background_image = FilerImageField(
null=True, blank=True,
related_name="ungleich_header_slider_item_image",
on_delete=models.SET_NULL
)
description = HTMLField(
default='<div class="intro-cap">We Design, Configure &amp; Maintain '
'<br>Your Linux Infrastructure</div><p class="intro_lead">'
'Ruby on Rails, Django, Java, Webserver, Mailserver, any '
'infrastructure that needs to configured, we provide '
'comprehensive solutions. Amazon, rackspace or bare metal '
'servers, we configure for you.</p><p style="text-align: '
'right;"><a class="btn btn-trans" href="">Learn More</a></p>'
)
class UngleichHeaderWithBackgroundImageSlider(CMSPlugin):
carousel_data_interval = models.IntegerField(default=2000)
class UngleichHeaderItem(CMSPlugin): class UngleichHeaderItem(CMSPlugin):
image = FilerImageField( image = FilerImageField(
null=True, null=True,

View file

@ -280,7 +280,10 @@ fieldset[disabled] .btn-xl.active {
} }
.navbar-default .navbar-brand { .navbar-default .navbar-brand {
padding: 8px; padding: 4px 8px 12px;
}
.navbar-default.navbar-shrink .navbar-brand {
padding: 6px 8px 10px;
} }
} }
@ -440,6 +443,7 @@ section h3.section-subheading {
max-width: 400px; max-width: 400px;
text-align: center; text-align: center;
background-color: #fff; background-color: #fff;
width: 100%;
} }
#portfolio .portfolio-item .portfolio-caption h4 { #portfolio .portfolio-item .portfolio-caption h4 {

View file

@ -1,2 +1,2 @@
<a href="{{ instance.url }}"><img class="center-block img-client img-responsive" src="{{ instance.image.url}}"></a> <a href="{{ instance.url }}"><img class="center-block img-client img-responsive" src="{{ instance.image.url}}"></a>
<p class="carousel-text text-muted text-center">{{ instance.description }}</p> {{ instance.description }}

View file

@ -0,0 +1,4 @@
<div class="bg_img" style="background-image:url({{ instance.background_image.url }})"></div>
<div class="container">
{{ instance.description }}
</div>

View file

@ -0,0 +1,31 @@
{% load cms_tags %}
<header class="header_slider">
<div id="carousel-header-ungleich" class="carousel slide" data-interval="{{ instance.carousel_data_interval}}">
<!-- Indicators -->
{% if instance.child_plugin_instances|length > 1 %}
<ol class="carousel-indicators">
{% for plugin in instance.child_plugin_instances %}
<li data-target="#carousel-header-ungleich" data-slide-to="{{forloop.counter0}}" {% if forloop.counter0 == 0 %}class="active" {% endif %}></li>
{% endfor %}
</ol>
{% endif %}
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
{% for plugin in instance.child_plugin_instances %}
<div class="item {% if forloop.counter0 == 0 %}active{% endif %}">
{% render_plugin plugin %}
</div>
{% endfor %}
</div>
{% if instance.child_plugin_instances|length > 1 %}
<a class="left carousel-control" href="#carousel-header-ungleich" role="button" data-slide="prev">
<span class="fa fa-angle-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-header-ungleich" role="button" data-slide="next">
<span class="fa fa-angle-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
{% endif %}
</div>
</header>