[WO-333] Fix lightbox outer scrollbar

* Use ng-animate with display:none instead of visibility:hidden
* Fix min-height in lightbox
* Start refactoring lightbox opening code using scope.state.lightbox
This commit is contained in:
Tankred Hase 2014-04-23 15:24:48 +02:00
parent 6adc9da8c1
commit c08ff4f287
9 changed files with 63 additions and 45 deletions

View File

@ -19,7 +19,7 @@
<!-- error dialog lightbox --> <!-- error dialog lightbox -->
<div class="lightbox-overlay" ng-class="{'show': state.dialog.open}"> <div class="lightbox-overlay" ng-class="{'show': state.dialog.open}">
<div class="lightbox lightbox-effect dialog view-dialog" ng-include="'tpl/dialog.html'"></div> <div class="lightbox dialog view-dialog" ng-include="'tpl/dialog.html'"></div>
</div><!--/.lightbox-overlay--> </div><!--/.lightbox-overlay-->
</body> </body>

View File

@ -10,9 +10,8 @@ define(function(require) {
var AboutCtrl = function($scope) { var AboutCtrl = function($scope) {
$scope.state.about = { $scope.state.about = {
open: false,
toggle: function(to) { toggle: function(to) {
this.open = to; $scope.state.lightbox = (to) ? 'about' : undefined;
} }
}; };

View File

@ -15,9 +15,8 @@ define(function(require) {
pgp = appController._crypto; pgp = appController._crypto;
$scope.state.account = { $scope.state.account = {
open: false,
toggle: function(to) { toggle: function(to) {
this.open = to; $scope.state.lightbox = (to) ? 'account' : undefined;
} }
}; };

View File

@ -15,9 +15,9 @@ define(function(require) {
pgp = appController._crypto; pgp = appController._crypto;
$scope.state.contacts = { $scope.state.contacts = {
open: false,
toggle: function(to) { toggle: function(to) {
this.open = to; $scope.state.lightbox = (to) ? 'contacts' : undefined;
$scope.listKeys(); $scope.listKeys();
} }
}; };

View File

@ -13,9 +13,8 @@ define(function(require) {
pgp = appController._crypto; pgp = appController._crypto;
$scope.state.setPassphrase = { $scope.state.setPassphrase = {
open: false,
toggle: function(to) { toggle: function(to) {
this.open = to; $scope.state.lightbox = (to) ? 'set-passphrase' : undefined;
$scope.newPassphrase = undefined; $scope.newPassphrase = undefined;
$scope.oldPassphrase = undefined; $scope.oldPassphrase = undefined;

View File

@ -25,9 +25,8 @@ define(function(require) {
// //
$scope.state.writer = { $scope.state.writer = {
open: false,
write: function(replyTo, replyAll, forward) { write: function(replyTo, replyAll, forward) {
this.open = true; $scope.state.lightbox = 'write';
$scope.replyTo = replyTo; $scope.replyTo = replyTo;
resetFields(); resetFields();
@ -39,7 +38,7 @@ define(function(require) {
$scope.verify($scope.to[0]); $scope.verify($scope.to[0]);
}, },
close: function() { close: function() {
this.open = false; $scope.state.lightbox = undefined;
} }
}; };

View File

@ -40,4 +40,4 @@
@import "views/mail-list"; @import "views/mail-list";
@import "views/read"; @import "views/read";
@import "views/write"; @import "views/write";
@import "views/login"; @import "views/login";

View File

@ -5,14 +5,12 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 2000; z-index: 2000;
visibility: hidden;
backface-visibility: hidden; backface-visibility: hidden;
@include respond-to(desktop) { @include respond-to(desktop) {
margin: 0 auto; margin: 0 auto;
width: $lightbox-width; width: $lightbox-width;
max-width: $lightbox-max-width; max-width: $lightbox-max-width;
max-height: $lightbox-min-height;
height: auto; height: auto;
text-align: left; text-align: left;
} }
@ -22,6 +20,11 @@
padding: $lightbox-padding; padding: $lightbox-padding;
background: #fff; background: #fff;
backface-visibility: hidden; backface-visibility: hidden;
@include respond-to(desktop) {
max-height: $lightbox-min-height;
}
header { header {
text-align: center; text-align: center;
position: relative; position: relative;
@ -53,39 +56,54 @@
} }
} }
.lightbox-overlay.show .lightbox {
visibility: visible;
}
.lightbox-overlay { .lightbox-overlay {
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%; height: 100%;
visibility: hidden; display: none;
top: 0; top: 0;
left: 0; left: 0;
z-index: 1000; z-index: 1000;
opacity: 0;
background: $color-grey-dark-alpha; background: $color-grey-dark-alpha;
transition: all 0.3s;
@include respond-to(desktop) { @include respond-to(desktop) {
@include scut-vcenter-ib(".lightbox"); @include scut-vcenter-ib(".lightbox");
text-align: center; text-align: center;
} }
}
.lightbox-overlay.show { &.show {
opacity: 1; display: block;
visibility: visible; }
}
// effect /* ngAnimate */
.lightbox-effect .lightbox-body { &.show-add {
transform: scale(0.7); display: block;
transition: all 0.3s; opacity: 0;
} transition: opacity 0.3s;
.lightbox-body {
.lightbox-overlay.show .lightbox-effect .lightbox-body { transform: scale(0.7);
transform: scale(1); transition: transform 0.3s;
}
}
&.show-add-active {
opacity: 1;
.lightbox-body {
transform: scale(1);
}
}
&.show-remove {
display: block;
opacity: 1;
transition: opacity 0.3s;
.lightbox-body {
transform: scale(1);
transition: transform 0.3s;
}
}
&.show-remove-active {
opacity: 0;
.lightbox-body {
transform: scale(0.7);
}
}
} }

View File

@ -19,18 +19,22 @@
</div><!--/.nav-container--> </div><!--/.nav-container-->
<!-- lightbox --> <!-- lightbox -->
<div class="lightbox-overlay" ng-class="{'show': state.writer.open}"> <div class="lightbox-overlay" ng-class="{'show': state.lightbox === 'write'}">
<div class="lightbox lightbox-effect" ng-include="'tpl/write.html'"></div> <div class="lightbox" ng-include="'tpl/write.html'"></div>
</div> </div>
<div class="lightbox-overlay" ng-class="{'show': state.account.open}">
<div class="lightbox lightbox-effect" ng-include="'tpl/account.html'"></div> <div class="lightbox-overlay" ng-class="{'show': state.lightbox === 'account'}">
<div class="lightbox" ng-include="'tpl/account.html'"></div>
</div> </div>
<div class="lightbox-overlay" ng-class="{'show': state.setPassphrase.open}">
<div class="lightbox lightbox-effect" ng-include="'tpl/set-passphrase.html'"></div> <div class="lightbox-overlay" ng-class="{'show': state.lightbox === 'set-passphrase'}">
<div class="lightbox" ng-include="'tpl/set-passphrase.html'"></div>
</div> </div>
<div class="lightbox-overlay" ng-class="{'show': state.contacts.open}">
<div class="lightbox lightbox-effect" ng-include="'tpl/contacts.html'"></div> <div class="lightbox-overlay" ng-class="{'show': state.lightbox === 'contacts'}">
<div class="lightbox" ng-include="'tpl/contacts.html'"></div>
</div> </div>
<div class="lightbox-overlay" ng-class="{'show': state.about.open}">
<div class="lightbox lightbox-effect view-about" ng-include="'tpl/about.html'"></div> <div class="lightbox-overlay" ng-class="{'show': state.lightbox === 'about'}">
<div class="lightbox view-about" ng-include="'tpl/about.html'"></div>
</div> </div>