update credential list and sidebar style to support nc 25

Signed-off-by: binsky <timo@binsky.org>
This commit is contained in:
binsky 2022-10-21 11:12:38 +02:00
parent 04a6cb4158
commit c9a806d39a
7 changed files with 489 additions and 449 deletions

View file

@ -505,30 +505,19 @@
.link span { .link span {
cursor: pointer; } cursor: pointer; }
#app-sidebar {
height: auto; }
#app-sidebar .sidebar {
display: inline-block; }
#app-sidebar .sidebar .sidebar-icon {
margin-right: 15px; }
#app-sidebar .sidebar .sidebar-icon .icon-image-size {
width: 44px; }
#app-sidebar .sidebar .sidebar-icon i {
width: 44px; }
#app-sidebar .sidebar .sidebar-label {
float: right;
line-height: 44px; }
.vaultlist_sidebar_hidden { .vaultlist_sidebar_hidden {
width: 100vw !important; width: 100vw !important;
margin-left: 0px !important; } margin-left: 0px !important; }
#app-content { #app-content {
overflow-x: hidden; } overflow-x: hidden; }
@media only screen and (max-width: 769px) { #app-content .ng-app-frame {
min-height: 100%;
display: flex; }
@media only screen and (max-width: 1024px) {
#app-content { #app-content {
width: 100vw; } } width: 100vw; } }
@media only screen and (min-width: 770px) { @media only screen and (min-width: 1025px) {
#app-content { #app-content {
width: calc(100vw - 300px); } } width: calc(100vw - 300px); } }
#app-content .edit_credential { #app-content .edit_credential {
@ -639,269 +628,296 @@
padding-right: 10px; } padding-right: 10px; }
#app-content .edit_credential .import-selection select { #app-content .edit_credential .import-selection select {
margin-left: 15px; } margin-left: 15px; }
#app-content .main_list #passman-controls { #app-content .main_list {
text-align: center;
border-bottom: 1px solid #c9c9c9; }
@media screen and (max-width: 765px) {
#app-content .main_list #passman-controls.sidebar-shown .title {
display: none; } }
@media screen and (min-width: 769px) and (max-width: 1120px) {
#app-content .main_list #passman-controls.sidebar-shown .title {
display: none; } }
#app-content .main_list .title {
text-align: center;
display: inline-flex;
font-weight: bold;
margin-top: 10px; }
@media screen and (max-width: 820px) {
#app-content .main_list .title {
display: none; } }
#app-content .main_list .breadcrumb {
float: left; }
#app-content .main_list .actions.creatable {
float: left;
overflow: hidden; }
#app-content .main_list .actions.creatable .bubble {
position: relative;
width: 185px;
-webkit-border-radius: 5px;
border-radius: 5px;
background-clip: padding-box;
/* stops bg color from leaking outside the border: */
box-shadow: 0 1px 10px rgba(50, 50, 50, 0.7); }
#app-content .main_list .actions.creatable .bubble ul li {
padding-left: 10px; }
#app-content .main_list .actions.creatable .bubble ul .menuitem {
font-size: 12px;
display: inline; }
#app-content .main_list .actions.creatable .bubble:after {
right: inherit;
left: 10px;
top: -19px; }
#app-content .main_list .viewModes {
float: right;
margin-right: 5px;
margin-top: 3px; }
#app-content .main_list .viewModes .view-mode:first-child {
-webkit-border-bottom-left-radius: 5px;
border-bottom-left-radius: 5px;
-webkit-border-top-left-radius: 5px;
border-top-left-radius: 5px;
background-clip: padding-box;
border: 1px solid rgba(240, 240, 240, 0.9); }
#app-content .main_list .viewModes .view-mode:last-child {
-webkit-border-bottom-right-radius: 5px;
border-bottom-right-radius: 5px;
-webkit-border-top-right-radius: 5px;
border-top-right-radius: 5px;
background-clip: padding-box;
border: 1px solid rgba(240, 240, 240, 0.9); }
#app-content .main_list .viewModes .view-mode {
display: inline-block;
padding: 7px;
background-color: rgba(240, 240, 240, 0.9); }
#app-content .main_list .viewModes .view-mode.active {
display: inline-block;
padding: 7px;
background-color: rgba(226, 226, 226, 0.9); }
#app-content .main_list .viewModes .view-mode {
cursor: pointer;
display: inline-block;
padding: 7px; }
#app-content .main_list .searchboxContainer {
display: inline-block;
visibility: visible;
float: right; }
#app-content .main_list .searchboxContainer .searchbox {
display: inline-block;
width: calc(100% - 3px); }
#app-content .main_list .searchboxContainer .searchclear {
color: #ccc;
cursor: pointer;
font-size: 18px;
height: 14px;
margin: auto;
position: absolute !important;
right: 10px;
top: 12px;
z-index: 99999999; }
#app-content .main_list .searchboxContainer .searchOptions {
position: relative;
bottom: 5px;
background: #fff;
border: 1px solid #ddd;
padding: 5px;
/*width: calc(100% - 3px);*/
box-shadow: 3px 3px 5px #888888;
-webkit-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
-webkit-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
background-clip: padding-box; }
#app-content .main_list .searchboxContainer .searchOptions input {
cursor: pointer; }
#app-content .main_list .credential-table {
width: 100%; }
#app-content .main_list .credential-table tr:hover {
background-color: whitesmoke; }
#app-content .main_list .credential-table tr.selected {
background-color: #f8f8f8; }
#app-content .main_list .credential-table tr .compromised {
background-color: #f74040; }
#app-content .main_list .credential-table tr .compromised:hover {
background-color: #e10909; }
#app-content .main_list .credential-table tr .compromised-list {
display: inline-block;
margin-left: 50px; }
#app-content .main_list .credential-table tr .compromised-list .icon {
height: 18px; }
#app-content .main_list .credential-table tr .compromised-list .text {
font-style: italic;
font-weight: bold; }
#app-content .main_list .credential-table tr td {
cursor: pointer;
padding: 5px;
border-bottom: 1px solid #eeeeee; }
#app-content .main_list .credential-table tr td .icon {
font-size: 19px;
float: left;
margin-right: 5px;
margin-left: 3px; }
#app-content .main_list .credential-table tr td .icon-more {
display: inline-block;
float: right;
margin-left: 5px;
margin-top: 1px;
opacity: 0.4;
height: 20px;
width: 32px;
cursor: pointer; }
#app-content .main_list .credential-table tr td .icon-more:hover {
opacity: 1; }
#app-content .main_list .credential-table tr td .popovermenu {
margin-top: 25px;
height: 100px;
width: 100px;
right: -2px !important;
box-shadow: 0 1px 10px rgba(50, 50, 50, 0.7); }
#app-content .main_list .credential-table tr td .popovermenu ul {
display: block;
width: 100px;
height: 75px; }
#app-content .main_list .credential-table tr td .popovermenu ul li {
padding: 0px; }
#app-content .main_list .credential-table tr td .popovermenu ul .menuitem {
font-size: 12px;
display: inline; }
#app-content .main_list .credential-table tr td .popovermenu .action {
padding: 10px;
margin: -10px; }
#app-content .main_list .tags {
float: right; }
#app-content .main_list .tags .tag {
background-color: rgba(240, 240, 240, 0.9);
padding: 4px;
font-size: 12px;
margin-right: 3px;
-webkit-border-radius: 5px;
border-radius: 5px;
background-clip: padding-box;
/* stops bg color from leaking outside the border: */ }
#app-content .main_list .tags .tag:last-child {
margin-right: 8px; }
#app-content .main_list .grid-view {
width: 100%; width: 100%;
height: 100%; display: flow-root;
display: flex; padding-right: 15px; }
flex-wrap: wrap; } #app-content .main_list #passman-controls {
#app-content .main_list .grid-view .credential { text-align: center;
display: flex; border-bottom: 1px solid #c9c9c9; }
width: 100%; @media screen and (max-width: 765px) {
border: 2px solid rgba(240, 240, 240, 0.9); #app-content .main_list #passman-controls.sidebar-shown .title {
margin: 25px; display: none; } }
-webkit-border-radius: 10px; @media screen and (min-width: 769px) and (max-width: 1120px) {
border-radius: 10px; #app-content .main_list #passman-controls.sidebar-shown .title {
background-clip: padding-box; display: none; } }
/* stops bg color from leaking outside the border: */ } #app-content .main_list .title {
#app-content .main_list .grid-view .credential .credential_content { text-align: center;
display: flex; display: inline-flex;
padding: 2px; font-weight: bold;
flex-direction: column; margin-top: 10px; }
width: 100%; @media screen and (max-width: 820px) {
#app-content .main_list .title {
display: none; } }
#app-content .main_list .breadcrumb {
float: left; }
#app-content .main_list .actions.creatable {
float: left;
overflow: hidden; }
#app-content .main_list .actions.creatable .bubble {
position: relative;
width: 185px;
-webkit-border-radius: 5px;
border-radius: 5px;
background-clip: padding-box;
/* stops bg color from leaking outside the border: */
box-shadow: 0 1px 10px rgba(50, 50, 50, 0.7); }
#app-content .main_list .actions.creatable .bubble ul li {
padding-left: 10px; }
#app-content .main_list .actions.creatable .bubble ul .menuitem {
font-size: 12px;
display: inline; }
#app-content .main_list .actions.creatable .bubble:after {
right: inherit;
left: 10px;
top: -19px; }
#app-content .main_list .viewModes {
float: right;
margin-right: 5px;
margin-top: 3px; }
#app-content .main_list .viewModes .view-mode:first-child {
-webkit-border-bottom-left-radius: 5px;
border-bottom-left-radius: 5px;
-webkit-border-top-left-radius: 5px;
border-top-left-radius: 5px;
background-clip: padding-box;
border: 1px solid rgba(240, 240, 240, 0.9); }
#app-content .main_list .viewModes .view-mode:last-child {
-webkit-border-bottom-right-radius: 5px;
border-bottom-right-radius: 5px;
-webkit-border-top-right-radius: 5px;
border-top-right-radius: 5px;
background-clip: padding-box;
border: 1px solid rgba(240, 240, 240, 0.9); }
#app-content .main_list .viewModes .view-mode {
display: inline-block;
padding: 7px;
background-color: rgba(240, 240, 240, 0.9); }
#app-content .main_list .viewModes .view-mode.active {
display: inline-block;
padding: 7px;
background-color: rgba(226, 226, 226, 0.9); }
#app-content .main_list .viewModes .view-mode {
cursor: pointer; cursor: pointer;
font-size: 1.75em; } display: inline-block;
#app-content .main_list .grid-view .credential .credential_content .label { padding: 7px; }
padding-top: 0.5em; #app-content .main_list .searchboxContainer {
padding-right: 1em; display: inline-block;
line-height: 1.3em; visibility: visible;
word-wrap: break-word; float: right; }
float: right; } #app-content .main_list .searchboxContainer .searchbox {
#app-content .main_list .grid-view .credential .credential_content .tags { display: inline-block;
margin: 0 0 auto; width: calc(100% - 3px); }
text-align: right; } #app-content .main_list .searchboxContainer .searchclear {
#app-content .main_list .grid-view .credential .credential_content .tags .tag { color: #ccc;
color: #000 !important; cursor: pointer;
margin-top: 5px; font-size: 18px;
display: inline-block; height: 14px;
left: 0; } margin: auto;
@media all and (min-width: 40em) { position: absolute !important;
right: 10px;
top: 12px;
z-index: 99999999; }
#app-content .main_list .searchboxContainer .searchOptions {
position: relative;
bottom: 5px;
background: #fff;
border: 1px solid #ddd;
padding: 5px;
/*width: calc(100% - 3px);*/
box-shadow: 3px 3px 5px #888888;
-webkit-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
-webkit-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
background-clip: padding-box; }
#app-content .main_list .searchboxContainer .searchOptions input {
cursor: pointer; }
#app-content .main_list .credential-list {
display: flex;
height: 100%; }
#app-content .main_list .credential-table-wrapper {
flex: 1;
float: left;
height: auto;
overflow: auto;
width: 100%; }
#app-content .main_list .credential-table {
width: 100%; }
#app-content .main_list .credential-table tr:hover {
background-color: whitesmoke; }
#app-content .main_list .credential-table tr.selected {
background-color: #f8f8f8; }
#app-content .main_list .credential-table tr .compromised {
background-color: #f74040; }
#app-content .main_list .credential-table tr .compromised:hover {
background-color: #e10909; }
#app-content .main_list .credential-table tr .compromised-list {
display: inline-block;
margin-left: 50px; }
#app-content .main_list .credential-table tr .compromised-list .icon {
height: 18px; }
#app-content .main_list .credential-table tr .compromised-list .text {
font-style: italic;
font-weight: bold; }
#app-content .main_list .credential-table tr td {
cursor: pointer;
padding: 5px;
border-bottom: 1px solid #eeeeee; }
#app-content .main_list .credential-table tr td .icon {
font-size: 19px;
float: left;
margin-right: 5px;
margin-left: 3px; }
#app-content .main_list .credential-table tr td .icon-more {
display: inline-block;
float: right;
margin-left: 5px;
margin-top: 1px;
opacity: 0.4;
height: 20px;
width: 32px;
cursor: pointer; }
#app-content .main_list .credential-table tr td .icon-more:hover {
opacity: 1; }
#app-content .main_list .credential-table tr td .popovermenu {
margin-top: 25px;
height: 100px;
width: 100px;
right: -2px !important;
box-shadow: 0 1px 10px rgba(50, 50, 50, 0.7); }
#app-content .main_list .credential-table tr td .popovermenu ul {
display: block;
width: 100px;
height: 75px; }
#app-content .main_list .credential-table tr td .popovermenu ul li {
padding: 0px; }
#app-content .main_list .credential-table tr td .popovermenu ul .menuitem {
font-size: 12px;
display: inline; }
#app-content .main_list .credential-table tr td .popovermenu .action {
padding: 10px;
margin: -10px; }
#app-content .main_list .tags {
float: right; }
#app-content .main_list .tags .tag {
background-color: rgba(240, 240, 240, 0.9);
padding: 4px;
font-size: 12px;
margin-right: 3px;
-webkit-border-radius: 5px;
border-radius: 5px;
background-clip: padding-box;
/* stops bg color from leaking outside the border: */ }
#app-content .main_list .tags .tag:last-child {
margin-right: 8px; }
#app-content .main_list .grid-view {
width: 100%;
height: 100%;
display: flex;
flex-wrap: wrap; }
#app-content .main_list .grid-view li {
height: fit-content; }
#app-content .main_list .grid-view .credential { #app-content .main_list .grid-view .credential {
width: 40%; } } display: flex;
@media all and (min-width: 58em) { width: 100%;
#app-content .main_list .grid-view .credential { border: 2px solid var(--color-primary);
width: 26%; } } margin: 25px;
@media all and (min-width: 78em) { -webkit-border-radius: 10px;
#app-content .main_list .grid-view .credential { border-radius: 10px;
width: 20%; } } background-clip: padding-box;
#app-content .main_list .share { /* stops bg color from leaking outside the border: */ }
overflow: hidden; } #app-content .main_list .grid-view .credential .credential_content {
#app-content .main_list .nopasswords { display: flex;
margin-right: auto; padding: 2px;
margin-left: auto; flex-direction: column;
margin-top: 10%; width: 100%;
text-align: center; } cursor: pointer;
#app-content .main_list .belowList { font-size: 1.75em; }
margin-right: auto; #app-content .main_list .grid-view .credential .credential_content .label {
margin-left: auto; padding-top: 0.5em;
margin-top: 1%; padding-right: 1em;
text-align: center; } line-height: 1.3em;
#app-content .main_list .app_sidebar { word-wrap: break-word;
float: right; }
#app-content .main_list .grid-view .credential .credential_content .tags {
margin: 0 0 auto;
text-align: right; }
#app-content .main_list .grid-view .credential .credential_content .tags .tag {
color: #000 !important;
margin-top: 5px;
display: inline-block;
left: 0; }
@media all and (min-width: 40em) {
#app-content .main_list .grid-view .credential {
width: 40%; } }
@media all and (min-width: 58em) {
#app-content .main_list .grid-view .credential {
width: 26%; } }
@media all and (min-width: 78em) {
#app-content .main_list .grid-view .credential {
width: 20%; } }
#app-content .main_list .share {
overflow: hidden; }
#app-content .main_list .nopasswords {
margin-right: auto;
margin-left: auto;
margin-top: 10%;
text-align: center; }
#app-content .main_list .belowList {
margin-right: auto;
margin-left: auto;
margin-top: 1%;
text-align: center; }
#app-content .app_sidebar {
height: auto;
float: right; float: right;
padding: 10px; padding: 10px;
overflow-y: auto; } overflow-y: auto; }
#app-content .main_list .app_sidebar h2 { #app-content .app_sidebar .sidebar {
display: inline-block; }
#app-content .app_sidebar .sidebar .sidebar-icon {
margin-right: 15px; }
#app-content .app_sidebar .sidebar .sidebar-icon .icon-image-size {
width: 44px; }
#app-content .app_sidebar .sidebar .sidebar-icon i {
width: 44px; }
#app-content .app_sidebar .sidebar .sidebar-label {
float: right;
line-height: 44px; }
#app-content .app_sidebar h2 {
margin-bottom: 10px; margin-bottom: 10px;
font-weight: 400; font-weight: 400;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
max-width: 90%; } max-width: 90%; }
#app-content .main_list .app_sidebar .close.icon-close { #app-content .app_sidebar .close.icon-close {
position: absolute; position: absolute;
top: 10px; top: 10px;
right: 10px; right: 10px;
cursor: pointer; } cursor: pointer; }
#app-content .main_list .app_sidebar.item_selected { #app-content .app_sidebar.item_selected {
height: 25%; height: 25%;
display: inline-block; } display: inline-block; }
#app-content .main_list .app_sidebar .credential-data .compromised-details { #app-content .app_sidebar .credential-data .compromised-details {
margin-top: 15px; margin-top: 15px;
margin-bottom: 15px; margin-bottom: 15px;
display: flex; } display: flex; }
#app-content .main_list .app_sidebar .credential-data .compromised-details .icon { #app-content .app_sidebar .credential-data .compromised-details .icon {
float: left; float: left;
height: 20px; } height: 20px; }
#app-content .main_list .app_sidebar .credential-data .compromised-details .text { #app-content .app_sidebar .credential-data .compromised-details .text {
padding-left: 5px; padding-left: 5px;
padding-right: 30px; padding-right: 30px;
color: #e9322d; } color: #e9322d; }
#app-content .main_list .app_sidebar .credential-data .row { #app-content .app_sidebar .credential-data .row {
margin-bottom: 11px; } margin-bottom: 11px; }
#app-content .main_list .app_sidebar .credential-data .tags { #app-content .app_sidebar .credential-data .tags {
margin-top: 15px; margin-top: 15px;
margin-bottom: 15px; margin-bottom: 15px;
float: none; } float: none; }
#app-content .main_list .app_sidebar .credential-data .tags .tag { #app-content .app_sidebar .credential-data .tags .tag {
background-color: rgba(240, 240, 240, 0.9); background-color: rgba(240, 240, 240, 0.9);
padding: 4px; padding: 4px;
margin-right: 3px; } margin-right: 3px; }
@ -1422,7 +1438,8 @@ h3 {
-moz-user-select: none; -moz-user-select: none;
-ms-user-select: none; -ms-user-select: none;
user-select: none; user-select: none;
height: 54px !important; min-height: 54px !important;
height: auto !important;
padding-right: 20px !important; } padding-right: 20px !important; }
@media only screen and (max-width: 769px) { @media only screen and (max-width: 769px) {
#passman-controls .breadcrumb { #passman-controls .breadcrumb {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -75,7 +75,8 @@
-moz-user-select: none; -moz-user-select: none;
-ms-user-select: none; -ms-user-select: none;
user-select: none; user-select: none;
height: 54px !important; min-height: 54px !important;
height: auto!important;
padding-right: 20px !important; padding-right: 20px !important;
.breadcrumb{ .breadcrumb{
@ -93,11 +94,7 @@
width: 100%; width: 100%;
} }
} }
@media only screen and (min-width: 1024px){
#app-navigation+#app-content #passman-controls {
}
}
#passman-controls .button, #passman-controls, #passman-controls input[type='submit'], #passman-controls input[type='text'], #passman-controls input[type='password'], #passman-controls select { #passman-controls .button, #passman-controls, #passman-controls input[type='submit'], #passman-controls input[type='text'], #passman-controls input[type='password'], #passman-controls select {
box-sizing: border-box; box-sizing: border-box;
//display: inline-block; //display: inline-block;

View file

@ -39,37 +39,21 @@
} }
//this fixes the scrollbars, because passman-contols are shown above the sidebar.
#app-sidebar{
height: auto;
.sidebar{
display: inline-block;
.sidebar-icon {
margin-right: 15px;
.icon-image-size{
width: 44px;
}
i {
width: 44px;
}
}
.sidebar-label{
float:right;
line-height: 44px;
}
}
}
.vaultlist_sidebar_hidden{ .vaultlist_sidebar_hidden{
width: 100vw !important; width: 100vw !important;
margin-left: 0px !important; margin-left: 0px !important;
} }
#app-content { #app-content {
@media only screen and (max-width: 769px) { .ng-app-frame {
min-height: 100%;
display: flex;
}
@media only screen and (max-width: 1024px) {
width: 100vw; width: 100vw;
} }
@media only screen and (min-width: 770px) { @media only screen and (min-width: 1025px) {
width: calc(100vw - 300px); width: calc(100vw - 300px);
} }
@ -231,6 +215,10 @@
//width: 100%; //width: 100%;
.main_list { .main_list {
width: 100%;
display: flow-root;
padding-right: 15px;
//min-height: 95%; //min-height: 95%;
//display:flex; //display:flex;
//hack for missing separatorbar when app-sidebar is opened //hack for missing separatorbar when app-sidebar is opened
@ -354,6 +342,19 @@
} }
} }
.credential-list {
display: flex;
height: 100%;
}
.credential-table-wrapper {
flex: 1;
float: left;
height: auto;
overflow: auto;
width: 100%;
}
.credential-table { .credential-table {
width: 100%; width: 100%;
tr:hover { tr:hover {
@ -453,10 +454,15 @@
//margin-top: 44px; //margin-top: 44px;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
li {
height: fit-content;
}
.credential { .credential {
display: flex; display: flex;
width: 100%; width: 100%;
border: 2px solid rgba(240, 240, 240, .9); border: 2px solid var(--color-primary);
margin: 25px; margin: 25px;
@include border-radius(10px); @include border-radius(10px);
.credential_content { .credential_content {
@ -523,57 +529,77 @@
margin-top: 1%; margin-top: 1%;
text-align: center; text-align: center;
} }
}
.app_sidebar { .app_sidebar {
float:right;
h2 {
margin-bottom: 10px;
font-weight: 400;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 90%;
}
.close.icon-close {
position: absolute;
top: 10px;
right: 10px;
cursor: pointer;
}
padding: 10px;
&.item_selected {
height: 25%;
display: inline-block;
}
overflow-y: auto;
.credential-data { //this fixes the scrollbars, because passman-contols are shown above the sidebar.
.compromised-details{ height: auto;
margin-top: 15px; .sidebar{
margin-bottom: 15px; display: inline-block;
display: flex; .sidebar-icon {
.icon{ margin-right: 15px;
float: left; .icon-image-size{
height: 20px; width: 44px;
}
.text{
padding-left: 5px;
padding-right: 30px;
color: #e9322d;
}
} }
.row { i {
margin-bottom: 11px; width: 44px;
} }
.tags { }
margin-top: 15px; .sidebar-label{
margin-bottom: 15px; float:right;
float: none; line-height: 44px;
.tag { }
background-color: rgba(240, 240, 240, .9); }
padding: 4px;
margin-right: 3px; float:right;
} h2 {
margin-bottom: 10px;
font-weight: 400;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 90%;
}
.close.icon-close {
position: absolute;
top: 10px;
right: 10px;
cursor: pointer;
}
padding: 10px;
&.item_selected {
height: 25%;
display: inline-block;
}
overflow-y: auto;
.credential-data {
.compromised-details{
margin-top: 15px;
margin-bottom: 15px;
display: flex;
.icon{
float: left;
height: 20px;
}
.text{
padding-left: 5px;
padding-right: 30px;
color: #e9322d;
}
}
.row {
margin-bottom: 11px;
}
.tags {
margin-top: 15px;
margin-bottom: 15px;
float: none;
.tag {
background-color: rgba(240, 240, 240, .9);
padding: 4px;
margin-right: 3px;
} }
} }
} }

View file

@ -231,6 +231,6 @@ style('passman', 'app');
</div> </div>
<div id="app-content" ng-class="{'vaultlist_sidebar_hidden': !selectedVault}"> <div id="app-content" ng-class="{'vaultlist_sidebar_hidden': !selectedVault}">
<div ng-view=""></div> <div ng-view="" class="ng-app-frame"></div>
</div> </div>
</div> </div>

View file

@ -40,163 +40,163 @@
<div class="loaderContainer" ng-if="show_spinner"> <div class="loaderContainer" ng-if="show_spinner">
<div class="loader" use-theme type="'border-bottom-color'"></div> <div class="loader" use-theme type="'border-bottom-color'"></div>
</div> </div>
<div ng-init="menuOpen = false;"> <div class="credential-list">
<table class="credential-table" <div class="credential-table-wrapper" ng-init="menuOpen = false;">
ng-if="view_mode === 'list'"> <table class="credential-table"
<tr ng-repeat="credential in filtered_credentials | orderBy:'label'" ng-if="view_mode === 'list'">
ng-if="showCredentialRow(credential)" <tr ng-repeat="credential in filtered_credentials | orderBy:'label'"
ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)" ng-if="showCredentialRow(credential)"
ng-class="{'selected': selectedCredential.credential_id == credential.credential_id}"> ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)"
<td ng-class="{'compromised': credential.compromised }"> ng-class="{'selected': selectedCredential.credential_id == credential.credential_id}">
<td ng-class="{'compromised': credential.compromised }">
<span class="tags"> <span class="tags">
<span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span> <span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span>
</span> </span>
<span class="icon" ng-if="credential.url || (credential.icon && credential.icon.type !== false)"> <span class="icon" ng-if="credential.url || (credential.icon && credential.icon.type !== false)">
<credential-icon credential="credential"></credential-icon> <credential-icon credential="credential"></credential-icon>
</span> </span>
<span class="icon" ng-if="!credential.url && (!credential.icon || (credential.icon && !credential.icon.type))"> <span class="icon" ng-if="!credential.url && (!credential.icon || (credential.icon && !credential.icon.type))">
<i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i>
<i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i>
<i class="fa fa-share-alt-square" ng-if="credential.shared_key"> </i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"> </i>
</span> </span>
<a class="label">{{ ::credential.label}}</a> <a class="label">{{ ::credential.label}}</a>
<span ng-if="credential.compromised" class="compromised-list"> <span ng-if="credential.compromised" class="compromised-list">
<i class="icon-error icon"></i> <i class="icon-error icon"></i>
<span class="text">{{ 'compromised.warning.list' | translate}}</span> <span class="text">{{ 'compromised.warning.list' | translate}}</span>
</span> </span>
</td> </td>
</tr> </tr>
</table> </table>
<ul class="grid-view" ng-if="view_mode === 'grid'"> <ul class="grid-view" ng-if="view_mode === 'grid'">
<li class="credential" <li class="credential"
ng-repeat="credential in filtered_credentials | orderBy:'label'" ng-repeat="credential in filtered_credentials | orderBy:'label'"
ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-if="credential.hidden == 0 && showCredentialRow(credential)"
ng-click="selectCredential(credential)" ng-click="selectCredential(credential)">
use-theme type="'border-color'"> <div class="credential_content">
<div class="credential_content"> <div>
<div>
<span class="icon" ng-if="credential.url"> <span class="icon" ng-if="credential.url">
<credential-icon credential="credential"></credential-icon> <credential-icon credential="credential"></credential-icon>
</span> </span>
<span class="icon" ng-if="!credential.url"> <span class="icon" ng-if="!credential.url">
<i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i>
<i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i>
<i class="fa fa-share-alt-square" ng-if="credential.shared_key"> </i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"> </i>
</span> </span>
<div class="label">{{ ::credential.label}}</div> <div class="label">{{ ::credential.label}}</div>
</div> </div>
<div class="tags"> <div class="tags">
<div class="tag" ng-repeat="tag in credential.tags_raw"> <div class="tag" ng-repeat="tag in credential.tags_raw">
{{ ::tag.text}} {{ ::tag.text}}
</div>
</div> </div>
</div> </div>
</li>
</ul>
<div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length==0 && filterOptions.filterText==''" class="nopasswords" ng-hide="delete_time>0">
<b>{{'vault.hint.hello' | translate}}</b><br>
<div>{{'vault.hint.hello.add' | translate}}</div>
<div class="">
<button ng-click="addCredential()">+</button>
</div> </div>
</li>
</ul>
<div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length==0 && filterOptions.filterText==''" class="nopasswords" ng-hide="delete_time>0">
<b>{{'vault.hint.hello' | translate}}</b><br>
<div>{{'vault.hint.hello.add' | translate}}</div>
<div class="">
<button ng-click="addCredential()">+</button>
</div> </div>
<!--nopassword-hint for missing tagresults -->
<div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length>0" class="nopasswords" ng-hide="delete_time>0">
<div>{{ 'vault.hint.list.notags' | translate}}</div>
</div>
<!--nopassword-hint for missing searchresults -->
<div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length==0 && filterOptions.filterText!=''" class="nopasswords" ng-hide="delete_time>0">
<div>{{ 'vault.hint.list.nosearch' | translate}} <b>'{{filterOptions.filterText}}'</b></div>
</div>
<!--nopassword-hint for good strength -->
<div class="nopasswords" ng-if="no_credentials_label.s_good" ng-hide="getListSizes().listsize_wout_deleted>0">
<div>{{ 'vault.hint.list.nogood' | translate}}</div>
</div>
<!--nopassword-hint for medium strength -->
<div class="nopasswords" ng-if="no_credentials_label.s_medium" ng-hide="getListSizes().listsize_wout_deleted>0">
<div>{{ 'vault.hint.list.nomedium' | translate}}</div>
</div>
<!--nopassword-hint for bad strength -->
<div class="nopasswords" ng-if="no_credentials_label.s_low" ng-hide="getListSizes().listsize_wout_deleted>0">
<div>{{ 'vault.hint.list.nobad' | translate}}</div>
</div>
<!--nopassword-hint for expired -->
<div class="nopasswords" ng-if="no_credentials_label.expired" ng-hide="getListSizes().listsize_wout_deleted>0">
<div>{{ 'vault.hint.list.noexpired' | translate}}</div>
</div>
<!--nopassword-hint for deleted -->
<div class="nopasswords" ng-if="getListSizes().listsize_deleted==0" ng-hide="delete_time==0">
<div>{{ 'vault.hint.list.nodeleted' | translate}}</div>
</div>
</div> </div>
<div id="app-sidebar" class="app_sidebar" ng-show="selectedCredential" off-click="closeSelected()" >
<!--nopassword-hint for missing tagresults --> <span class="close icon-close" ng-click="closeSelected()" alt="Close"></span>
<div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length>0" class="nopasswords" ng-hide="delete_time>0">
<div>{{ 'vault.hint.list.notags' | translate}}</div>
</div>
<!--nopassword-hint for missing searchresults --> <div class="sidebar">
<div ng-if="getListSizes().listsize_wout_deleted==0 && no_credentials_label.all && !show_spinner && selectedtags.length==0 && filterOptions.filterText!=''" class="nopasswords" ng-hide="delete_time>0">
<div>{{ 'vault.hint.list.nosearch' | translate}} <b>'{{filterOptions.filterText}}'</b></div>
</div>
<!--nopassword-hint for good strength -->
<div class="nopasswords" ng-if="no_credentials_label.s_good" ng-hide="getListSizes().listsize_wout_deleted>0">
<div>{{ 'vault.hint.list.nogood' | translate}}</div>
</div>
<!--nopassword-hint for medium strength -->
<div class="nopasswords" ng-if="no_credentials_label.s_medium" ng-hide="getListSizes().listsize_wout_deleted>0">
<div>{{ 'vault.hint.list.nomedium' | translate}}</div>
</div>
<!--nopassword-hint for bad strength -->
<div class="nopasswords" ng-if="no_credentials_label.s_low" ng-hide="getListSizes().listsize_wout_deleted>0">
<div>{{ 'vault.hint.list.nobad' | translate}}</div>
</div>
<!--nopassword-hint for expired -->
<div class="nopasswords" ng-if="no_credentials_label.expired" ng-hide="getListSizes().listsize_wout_deleted>0">
<div>{{ 'vault.hint.list.noexpired' | translate}}</div>
</div>
<!--nopassword-hint for deleted -->
<div class="nopasswords" ng-if="getListSizes().listsize_deleted==0" ng-hide="delete_time==0">
<div>{{ 'vault.hint.list.nodeleted' | translate}}</div>
</div>
</div>
</div>
<div id="app-sidebar" class="app_sidebar" ng-show="selectedCredential" off-click="closeSelected()" >
<span class="close icon-close" ng-click="closeSelected()" alt="Close"></span>
<div class="sidebar">
<span class="icon sidebar-icon" ng-if="selectedCredential.url || (selectedCredential.icon && selectedCredential.icon.type !== false)"> <span class="icon sidebar-icon" ng-if="selectedCredential.url || (selectedCredential.icon && selectedCredential.icon.type !== false)">
<credential-icon credential="selectedCredential"></credential-icon> <credential-icon credential="selectedCredential"></credential-icon>
</span> </span>
<span class="icon sidebar-icon" ng-if="!selectedCredential.url && (!selectedCredential.icon || (selectedCredential.icon && !selectedCredential.icon.type))"> <span class="icon sidebar-icon" ng-if="!selectedCredential.url && (!selectedCredential.icon || (selectedCredential.icon && !selectedCredential.icon.type))">
<i class="fa fa-lock fa-3x icon-image-size"></i> <i class="fa fa-lock fa-3x icon-image-size"></i>
</span> </span>
<h2 class="sidebar-label">{{selectedCredential.label}}</h2> <h2 class="sidebar-label">{{selectedCredential.label}}</h2>
</div> </div>
<div credential-template="selectedCredential"></div> <div credential-template="selectedCredential"></div>
<div ng-show="selectedCredential"> <div ng-show="selectedCredential">
<div> <div>
<button class="button" <button class="button"
ng-click="editCredential(selectedCredential)" ng-click="editCredential(selectedCredential)"
ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"> ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
<span class="fa fa-edit"></span> {{ 'edit' | translate}} <span class="fa fa-edit"></span> {{ 'edit' | translate}}
</button> </button>
<button class="button" <button class="button"
ng-click="deleteCredential(selectedCredential)" ng-click="deleteCredential(selectedCredential)"
ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"> ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
<span class="fa fa-trash"></span> {{ 'delete' | translate}} <span class="fa fa-trash"></span> {{ 'delete' | translate}}
</button> </button>
<button class="button" <button class="button"
ng-click="shareCredential(selectedCredential)" ng-click="shareCredential(selectedCredential)"
ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined && ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&
(settings.user_sharing_enabled === 1 || settings.user_sharing_enabled === '1' || settings.link_sharing_enabled === 1 || settings.link_sharing_enabled === '1')"> (settings.user_sharing_enabled === 1 || settings.user_sharing_enabled === '1' || settings.link_sharing_enabled === 1 || settings.link_sharing_enabled === '1')">
<span class="fa fa-share"></span> {{ 'share' | translate}} <span class="fa fa-share"></span> {{ 'share' | translate}}
</button> </button>
<button class="button" <button class="button"
ng-click="getRevisions(selectedCredential)" ng-click="getRevisions(selectedCredential)"
ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"> ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)">
<span class="fa fa-undo"></span> {{ 'revisions' | translate}} <span class="fa fa-undo"></span> {{ 'revisions' | translate}}
</button> </button>
<button class="button" <button class="button"
ng-if="selectedCredential.delete_time > 0" ng-if="selectedCredential.delete_time > 0"
ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"> ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
<span class="fa fa-recycle"></span> {{'recover' | translate}} <span class="fa fa-recycle"></span> {{'recover' | translate}}
</button> </button>
<button class="button" <button class="button"
ng-if="selectedCredential.delete_time > 0" ng-if="selectedCredential.delete_time > 0"
ng-click="destroyCredential(selectedCredential)"> ng-click="destroyCredential(selectedCredential)">
<span class="fa fa-bomb"></span> {{'destroy' | translate}} <span class="fa fa-bomb"></span> {{'destroy' | translate}}
</button> </button>
</div> </div>
</div> </div>
</div>
</div>
</div> </div>
<div class="share_popup" style="display: none" title="{{ 'sharereq.title' | translate }}"> <div class="share_popup" style="display: none" title="{{ 'sharereq.title' | translate }}">