Add breadcrumb to all pages

This commit is contained in:
brantje 2016-09-20 20:51:41 +02:00
parent 83b5fa40e1
commit 5bfe5a7218
10 changed files with 189 additions and 129 deletions

View file

@ -22,9 +22,9 @@
text-decoration: underline; }
.tab_header {
margin: 44px 0 0;
list-style: none;
padding: 0;
margin: 0; }
padding: 0; }
.tab_header li.tab:first-child {
margin-left: 0; }
.tab_header li.tab {
@ -145,10 +145,9 @@
#app-content #app-content-wrapper {
min-height: 95%; }
#app-content #app-content-wrapper #controls {
width: calc( 100% - 280px ); }
border-bottom: 1px solid #c9c9c9; }
#app-content #app-content-wrapper .actions.creatable {
padding-left: 10px;
width: 100%; }
overflow: hidden; }
#app-content #app-content-wrapper .actions.creatable .bubble {
position: relative;
width: 185px;
@ -172,7 +171,9 @@
display: inline-block;
font-weight: bold; }
#app-content #app-content-wrapper .actions.creatable .searchboxContainer {
display: inline-block; }
display: inline-block;
float: right;
margin-right: 10px; }
#app-content #app-content-wrapper .actions.creatable .searchboxContainer .searchbox {
display: inline-block; }
#app-content #app-content-wrapper .credential-table {
@ -231,62 +232,60 @@
#app-content #app-content-wrapper .credential-table tr td .popovermenu .action {
padding: 10px;
margin: -10px; }
#app-content #app-content-wrapper .edit_credential {
padding-top: 10px; }
#app-content #app-content-wrapper .edit_credential label {
display: block; }
#app-content #app-content-wrapper .edit_credential input[type="text"], #app-content #app-content-wrapper .edit_credential input[type="password"] {
width: 100%; }
#app-content #app-content-wrapper .edit_credential .tags {
#app-content #app-content-wrapper .edit_credential label {
display: block; }
#app-content #app-content-wrapper .edit_credential input[type="text"], #app-content #app-content-wrapper .edit_credential input[type="password"] {
width: 100%; }
#app-content #app-content-wrapper .edit_credential .tags {
float: left; }
#app-content #app-content-wrapper .edit_credential .tags .tag {
background-color: rgba(240, 240, 240, 0.9);
padding: 4px;
font-size: 11px; }
#app-content #app-content-wrapper .edit_credential tags-input .tags {
width: 100%; }
#app-content #app-content-wrapper .edit_credential .credential_textarea {
width: 100%;
height: 100px; }
#app-content #app-content-wrapper .edit_credential .password_settings label {
overflow: hidden; }
#app-content #app-content-wrapper .edit_credential .password_settings label input[type="checkbox"] {
width: auto !important;
float: left; }
#app-content #app-content-wrapper .edit_credential .tags .tag {
background-color: rgba(240, 240, 240, 0.9);
padding: 4px;
font-size: 11px; }
#app-content #app-content-wrapper .edit_credential tags-input .tags {
#app-content #app-content-wrapper .edit_credential .password_settings label .label {
float: left; }
#app-content #app-content-wrapper .edit_credential .password_settings label .label.sm {
font-size: 12px; }
#app-content #app-content-wrapper .edit_credential .custom_fields, #app-content #app-content-wrapper .edit_credential .files {
margin-top: 10px; }
#app-content #app-content-wrapper .edit_credential .custom_fields table, #app-content #app-content-wrapper .edit_credential .files table {
width: 100%; }
#app-content #app-content-wrapper .edit_credential .credential_textarea {
width: 100%;
height: 100px; }
#app-content #app-content-wrapper .edit_credential .password_settings label {
overflow: hidden; }
#app-content #app-content-wrapper .edit_credential .password_settings label input[type="checkbox"] {
width: auto !important;
float: left; }
#app-content #app-content-wrapper .edit_credential .password_settings label .label {
float: left; }
#app-content #app-content-wrapper .edit_credential .password_settings label .label.sm {
font-size: 12px; }
#app-content #app-content-wrapper .edit_credential .custom_fields, #app-content #app-content-wrapper .edit_credential .files {
margin-top: 10px; }
#app-content #app-content-wrapper .edit_credential .custom_fields table, #app-content #app-content-wrapper .edit_credential .files table {
width: 100%; }
#app-content #app-content-wrapper .edit_credential .custom_fields table thead th, #app-content #app-content-wrapper .edit_credential .files table thead th {
color: #fff; }
#app-content #app-content-wrapper .edit_credential .custom_fields table thead th.field_actions, #app-content #app-content-wrapper .edit_credential .files table thead th.field_actions {
width: 15%; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr:hover, #app-content #app-content-wrapper .edit_credential .files table tr:hover {
background-color: transparent; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.field_actions, #app-content #app-content-wrapper .edit_credential .files table tr td.field_actions {
font-size: 13px;
width: 15%; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.field_actions i, #app-content #app-content-wrapper .edit_credential .files table tr td.field_actions i {
cursor: pointer; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td, #app-content #app-content-wrapper .edit_credential .custom_fields table tr th, #app-content #app-content-wrapper .edit_credential .files table tr td, #app-content #app-content-wrapper .edit_credential .files table tr th {
width: 20%;
padding: 5px; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td .editable-has-buttons.editable-input, #app-content #app-content-wrapper .edit_credential .custom_fields table tr th .editable-has-buttons.editable-input, #app-content #app-content-wrapper .edit_credential .files table tr td .editable-has-buttons.editable-input, #app-content #app-content-wrapper .edit_credential .files table tr th .editable-has-buttons.editable-input {
width: 55%; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td, #app-content #app-content-wrapper .edit_credential .files table tr td {
height: 50px;
vertical-align: middle; }
#app-content #app-content-wrapper .edit_credential .file_tab .progress {
margin-top: 10px;
height: 10px; }
#app-content #app-content-wrapper .edit_credential .file_tab .progress .progress-bar {
height: 10px;
background-image: none;
background-color: #0082c9; }
#app-content #app-content-wrapper .edit_credential .custom_fields table thead th, #app-content #app-content-wrapper .edit_credential .files table thead th {
color: #fff; }
#app-content #app-content-wrapper .edit_credential .custom_fields table thead th.field_actions, #app-content #app-content-wrapper .edit_credential .files table thead th.field_actions {
width: 15%; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr:hover, #app-content #app-content-wrapper .edit_credential .files table tr:hover {
background-color: transparent; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.field_actions, #app-content #app-content-wrapper .edit_credential .files table tr td.field_actions {
font-size: 13px;
width: 15%; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td.field_actions i, #app-content #app-content-wrapper .edit_credential .files table tr td.field_actions i {
cursor: pointer; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td, #app-content #app-content-wrapper .edit_credential .custom_fields table tr th, #app-content #app-content-wrapper .edit_credential .files table tr td, #app-content #app-content-wrapper .edit_credential .files table tr th {
width: 20%;
padding: 5px; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td .editable-has-buttons.editable-input, #app-content #app-content-wrapper .edit_credential .custom_fields table tr th .editable-has-buttons.editable-input, #app-content #app-content-wrapper .edit_credential .files table tr td .editable-has-buttons.editable-input, #app-content #app-content-wrapper .edit_credential .files table tr th .editable-has-buttons.editable-input {
width: 55%; }
#app-content #app-content-wrapper .edit_credential .custom_fields table tr td, #app-content #app-content-wrapper .edit_credential .files table tr td {
height: 50px;
vertical-align: middle; }
#app-content #app-content-wrapper .edit_credential .file_tab .progress {
margin-top: 10px;
height: 10px; }
#app-content #app-content-wrapper .edit_credential .file_tab .progress .progress-bar {
height: 10px;
background-image: none;
background-color: #0082c9; }
#app-content #app-content-wrapper .app_sidebar {
padding: 10px;
overflow-y: auto; }

File diff suppressed because one or more lines are too long

View file

@ -77,4 +77,33 @@ jQuery(document).ready(function () {
angular.element('#app-content-wrapper').scope().deleteCredential(credential);
angular.element('#app-content-wrapper').scope().$apply();
});
var adjustControlsWidth = function() {
if($('#controls').length) {
var controlsWidth;
// if there is a scrollbar …
if($('#app-content').get(0).scrollHeight > $('#app-content').height()) {
if($(window).width() > 768) {
controlsWidth = $('#content').width() - $('#app-navigation').width() - OC.Util.getScrollBarWidth();
if (!$('#app-sidebar').hasClass('hidden') && !$('#app-sidebar').hasClass('disappear')) {
controlsWidth -= $('#app-sidebar').width();
}
} else {
controlsWidth = $('#content').width() - OC.Util.getScrollBarWidth();
}
} else { // if there is none
if($(window).width() > 768) {
controlsWidth = $('#content').width() - $('#app-navigation').width();
if (!$('#app-sidebar').hasClass('hidden') && !$('#app-sidebar').hasClass('disappear')) {
//controlsWidth -= $('#app-sidebar').width();
}
} else {
controlsWidth = $('#content').width();
}
}
$('#controls').css('width', controlsWidth);
$('#controls').css('min-width', controlsWidth);
}
};
$(window).resize(_.debounce(adjustControlsWidth, 256));
adjustControlsWidth()
});

View file

@ -3,9 +3,7 @@ angular.module('templates-main', ['views/edit_credential.html', 'views/partials/
angular.module('views/edit_credential.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/edit_credential.html',
'<ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)">{{tab.title}}</li></ul><div class="tab_container edit_credential"><div ng-include="currentTab.url"></div></div><button ng-click="saveCredential()">Save</button> <button ng-click="cancel()">Cancel</button><textarea>\n' +
'{{storedCredential}}\n' +
' </textarea>');
'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a>{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">Edit credential "{{storedCredential.label}}"</a> <a ng-if="!storedCredential.credential_id">Create new credential</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)">{{tab.title}}</li></ul><div class="tab_container edit_credential"><div ng-include="currentTab.url"></div><button ng-click="saveCredential()">Save</button> <button ng-click="cancel()">Cancel</button></div>');
}]);
angular.module('views/partials/forms/edit_credential/basics.html', []).run(['$templateCache', function($templateCache) {
@ -29,7 +27,7 @@ angular.module('views/partials/forms/edit_credential/files.html', []).run(['$tem
angular.module('views/partials/forms/edit_credential/otp.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/edit_credential/otp.html',
'<div class="row"><div class="col-xs-12"><div class="col-xs-2 nopadding">Upload your OTP qr code</div><div class="col-xs-6 nopadding"><input type="file" qrread on-read="parseQR(qrdata)" class="input_secret" on-read="parseQR(qrdata)"></div></div></div><hr><div class="col-xs-12" ng-if="storedCredential.otp">Current OTP settings</div><div class="col-xs-5 col-sm-4 col-md-2" ng-if="storedCredential.otp.qr_uri"><img ng-src="{{storedCredential.otp.qr_uri.image}}"></div><div class="col-sm-4 col-sm-5 col-md-5"><table ng-show="storedCredential.otp"><tr ng-show="storedCredential.otp.type"><td>Type:</td><td>{{storedCredential.otp.type}}</td></tr><tr ng-show="storedCredential.otp.label"><td>Label:</td><td>{{storedCredential.otp.label}}</td></tr><tr ng-show="storedCredential.otp.issuer"><td>Issuer:</td><td>{{storedCredential.otp.issuer}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>Secret:</td><td>{{storedCredential.otp.secret}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>OTP:</td><td><span otp-generator secret="storedCredential.otp.secret"></span></td></tr></table></div>');
'<div class="row"><div class="col-xs-12"><div class="col-xs-2 nopadding">Upload your OTP qr code</div><div class="col-xs-6 nopadding"><input type="file" qrread on-read="parseQR(qrdata)" class="input_secret" on-read="parseQR(qrdata)"></div></div></div><div class="row"><div class="col-xs-12" ng-if="storedCredential.otp">Current OTP settings</div></div><div class="row"><div class="col-xs-5 col-sm-4 col-md-2" ng-if="storedCredential.otp.qr_uri"><img ng-src="{{storedCredential.otp.qr_uri.image}}"></div><div class="col-sm-4 col-sm-5 col-md-5"><table ng-show="storedCredential.otp"><tr ng-show="storedCredential.otp.type"><td>Type:</td><td>{{storedCredential.otp.type}}</td></tr><tr ng-show="storedCredential.otp.label"><td>Label:</td><td>{{storedCredential.otp.label}}</td></tr><tr ng-show="storedCredential.otp.issuer"><td>Issuer:</td><td>{{storedCredential.otp.issuer}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>Secret:</td><td>{{storedCredential.otp.secret}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>OTP:</td><td><span otp-generator secret="storedCredential.otp.secret"></span></td></tr></table></div></div>');
}]);
angular.module('views/partials/forms/edit_credential/password.html', []).run(['$templateCache', function($templateCache) {
@ -47,7 +45,7 @@ angular.module('views/partials/password-meter.html', []).run(['$templateCache',
angular.module('views/show_vault.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/show_vault.html',
'<div id="controls"><div class="breadcrumb"></div><div class="actions creatable"><span ng-click="menuOpen = !menuOpen" class="button new" ng-init="menuOpen = false" off-click="menuOpen = false;"><span>New</span></span><div class="actionList popovermenu bubble menu" ng-show="menuOpen"><ul><li><span ng-click="addCredential()" class="menuitem action"><span class="icon icon-rename"></span> <span>New credential</span></span></li><li><span href="#" class="menuitem action"><span class="icon icon-shared"></span> <span>New shared credential</span></span></li></ul></div><div class="searchboxContainer"><input type="text" ng-model="itemFilter.label" class="searchbox" placeholder="Search credential..."></div><span class="title" ng-if="delete_time">Showing deleted since: <span ng-if="delete_time == 1">All time</span> <span ng-if="delete_time > 1">{{delete_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></span></div></div><div off-click="closeSelected()"><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="credential in credentials | filter:itemFilter | tagFilter:selectedtags | as:this:\'filtered_credentials\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td><span class="icon"><i class="fa fa-lock"></i></span> <span class="label">{{credential.label}}</span> <span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{tag.text}}</span></span></td></tr></table><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedCredential"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span><table><tr ng-show="selectedCredential.label"><td>Label</td><td>{{selectedCredential.label}}</td></tr><tr ng-show="selectedCredential.username"><td>Account</td><td><span credential-field value="selectedCredential.username"></span></td></tr><tr ng-show="selectedCredential.password"><td>Password</td><td><span credential-field value="selectedCredential.password" secret="\'true\'"></span></td></tr><tr ng-show="selectedCredential.otp.secret"><td>OTP</td><td><span otp-generator secret="selectedCredential.otp.secret"></span></td></tr><tr ng-show="selectedCredential.email"><td>E-mail</td><td><span credential-field value="selectedCredential.email"></span></td></tr><tr ng-show="selectedCredential.url"><td>URL</td><td><span credential-field value="selectedCredential.url"></span></td></tr><tr ng-show="selectedCredential.files.length > 0"><td>Files</td><td><div ng-repeat="file in selectedCredential.files" class="link" ng-click="downloadFile(file)">{{file.filename}} ({{file.size | bytes}})</div></td></tr><tr ng-repeat="field in selectedCredential.custom_fields"><td>{{field.label}}</td><td><span credential-field value="field.value" secret="field.secret"></span></td></tr><tr ng-show="selectedCredential.changed"><td>Changed</td><td>{{selectedCredential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td></tr><tr ng-show="selectedCredential.created"><td>Created</td><td>{{selectedCredential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td></tr></table><div class="tags"><span class="tag" ng-repeat="tag in selectedCredential.tags">{{tag.text}}</span></div><div ng-show="selectedCredential"><span class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0"><span class="fa fa-edit"></span> Edit</span> <span class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0"><span class="fa fa-trash"></span> Delete</span> <span class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential)"><span class="fa fa-recycle"></span> Recover</span> <span class="button" ng-if="selectedCredential.delete_time == 0"><span class="fa fa-share"></span> Share</span></div></div></div>');
'<div id="controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a><i class="fa fa-home"></i></a></div><div class="crumb svg last"><a>{{active_vault.name}}</a></div></div></div><div class="actions creatable"><span ng-click="menuOpen = !menuOpen" class="button new" ng-init="menuOpen = false" off-click="menuOpen = false;"><span>+</span></span><div class="actionList popovermenu bubble menu" ng-show="menuOpen"><ul><li><span ng-click="addCredential()" class="menuitem action"><span class="icon icon-rename"></span> <span>New credential</span></span></li><li><span href="#" class="menuitem action"><span class="icon icon-shared"></span> <span>New shared credential</span></span></li></ul></div><div class="searchboxContainer"><input type="text" ng-model="itemFilter.label" class="searchbox" placeholder="Search credential..."></div><span class="title" ng-if="delete_time">Showing deleted since: <span ng-if="delete_time == 1">All time</span> <span ng-if="delete_time > 1">{{delete_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></span></div></div><div off-click="closeSelected()" off-click-filter="\'.link, .credential-table\'"><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="credential in credentials | filter:itemFilter | tagFilter:selectedtags | as:this:\'filtered_credentials\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td><span class="icon"><i class="fa fa-lock"></i></span> <span class="label">{{credential.label}}</span> <span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{tag.text}}</span></span></td></tr></table><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedCredential"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span><table><tr ng-show="selectedCredential.label"><td>Label</td><td>{{selectedCredential.label}}</td></tr><tr ng-show="selectedCredential.username"><td>Account</td><td><span credential-field value="selectedCredential.username"></span></td></tr><tr ng-show="selectedCredential.password"><td>Password</td><td><span credential-field value="selectedCredential.password" secret="\'true\'"></span></td></tr><tr ng-show="selectedCredential.otp.secret"><td>OTP</td><td><span otp-generator secret="selectedCredential.otp.secret"></span></td></tr><tr ng-show="selectedCredential.email"><td>E-mail</td><td><span credential-field value="selectedCredential.email"></span></td></tr><tr ng-show="selectedCredential.url"><td>URL</td><td><span credential-field value="selectedCredential.url"></span></td></tr><tr ng-show="selectedCredential.files.length > 0"><td>Files</td><td><div ng-repeat="file in selectedCredential.files" class="link" ng-click="downloadFile(file)">{{file.filename}} ({{file.size | bytes}})</div></td></tr><tr ng-repeat="field in selectedCredential.custom_fields"><td>{{field.label}}</td><td><span credential-field value="field.value" secret="field.secret"></span></td></tr><tr ng-show="selectedCredential.changed"><td>Changed</td><td>{{selectedCredential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td></tr><tr ng-show="selectedCredential.created"><td>Created</td><td>{{selectedCredential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td></tr></table><div class="tags"><span class="tag" ng-repeat="tag in selectedCredential.tags">{{tag.text}}</span></div><div ng-show="selectedCredential"><span class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0"><span class="fa fa-edit"></span> Edit</span> <span class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0"><span class="fa fa-trash"></span> Delete</span> <span class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential)"><span class="fa fa-recycle"></span> Recover</span> <span class="button" ng-if="selectedCredential.delete_time == 0"><span class="fa fa-share"></span> Share</span></div></div></div>');
}]);
angular.module('views/vaults.html', []).run(['$templateCache', function($templateCache) {

View file

@ -3,11 +3,11 @@
#app-content-wrapper {
min-height: 95%;
#controls{
width: calc( 100% - 280px );
border-bottom: 1px solid #c9c9c9
}
.actions.creatable {
padding-left: 10px;
width: 100%;
overflow: hidden;
.bubble {
position: relative;
width: 185px;
@ -36,6 +36,9 @@
}
.searchboxContainer{
display: inline-block;
float: right;
margin-right: 10px;
.searchbox{
display: inline-block;
}
@ -113,7 +116,6 @@
}
.edit_credential {
padding-top: 10px;
label {
display: block;
}

View file

@ -1,7 +1,7 @@
.tab_header {
margin: 44px 0 0;
list-style: none;
padding: 0;
margin: 0;
li.tab:first-child {
margin-left: 0;
}

View file

@ -106,8 +106,10 @@ style('passman', 'app');
</div>
<div id="app-content" ng-class="{'with-app-sidebar': app_sidebar}">
<div id="app-content-wrapper" ng-view="">
<div id="app-content-wrapper">
<div id="content" ng-view="">
</div>
</div>
</div>
</div>

View file

@ -1,14 +1,30 @@
<div id="controls">
<div class="actions creatable">
<div class="breadcrumb">
<div class="crumb svg ui-droppable" data-dir="/">
<a><i class="fa fa-home"></i></a>
</div>
<div class="crumb svg" data-dir="/Test">
<a>{{active_vault.name}}</a>
</div>
<div class="crumb svg last" data-dir="/Test">
<a ng-if="storedCredential.credential_id">Edit credential
"{{storedCredential.label}}"</a>
<a ng-if="!storedCredential.credential_id">Create new
credential</a>
</div>
</div>
</div>
</div>
<ul class="tab_header">
<li ng-repeat="tab in tabs track by $index" class="tab"
ng-class="{active:isActiveTab(tab)}"
ng-click="onClickTab(tab)">{{tab.title}}</li>
ng-click="onClickTab(tab)">{{tab.title}}
</li>
</ul>
<div class="tab_container edit_credential">
<div ng-include="currentTab.url"></div>
<button ng-click="saveCredential()">Save</button>
<button ng-click="cancel()">Cancel</button>
</div>
<button ng-click="saveCredential()">Save</button>
<button ng-click="cancel()">Cancel</button>
<textarea>
{{storedCredential}}
</textarea>

View file

@ -4,41 +4,45 @@
Upload your OTP qr code
</div>
<div class="col-xs-6 nopadding">
<input type="file" qrread on-read="parseQR(qrdata)" class="input_secret"
on-read="parseQR(qrdata)" />
<input type="file" qrread on-read="parseQR(qrdata)"
class="input_secret"
on-read="parseQR(qrdata)"/>
</div>
</div>
</div>
<hr>
<div class="col-xs-12" ng-if="storedCredential.otp">Current OTP settings</div>
<div class="col-xs-5 col-sm-4 col-md-2" ng-if="storedCredential.otp.qr_uri">
<img ng-src="{{storedCredential.otp.qr_uri.image}}"/>
</div>
<div class="col-sm-4 col-sm-5 col-md-5">
<table ng-show="storedCredential.otp">
<tr ng-show="storedCredential.otp.type">
<td>Type:</td>
<td>{{storedCredential.otp.type}}</td>
</tr>
<tr ng-show="storedCredential.otp.label">
<td>Label:</td>
<td>{{storedCredential.otp.label}}</td>
</tr>
<tr ng-show="storedCredential.otp.issuer">
<td>Issuer:</td>
<td>{{storedCredential.otp.issuer}}</td>
</tr>
<tr ng-show="storedCredential.otp.secret">
<td>Secret:</td>
<td>{{storedCredential.otp.secret}}</td>
</tr>
<tr ng-show="storedCredential.otp.secret">
<td>OTP:</td>
<td><span otp-generator
secret="storedCredential.otp.secret"></span>
</td>
</tr>
</table>
<div class="row">
<div class="col-xs-12" ng-if="storedCredential.otp">Current OTP settings
</div>
</div>
<div class="row">
<div class="col-xs-5 col-sm-4 col-md-2" ng-if="storedCredential.otp.qr_uri">
<img ng-src="{{storedCredential.otp.qr_uri.image}}"/>
</div>
<div class="col-sm-4 col-sm-5 col-md-5">
<table ng-show="storedCredential.otp">
<tr ng-show="storedCredential.otp.type">
<td>Type:</td>
<td>{{storedCredential.otp.type}}</td>
</tr>
<tr ng-show="storedCredential.otp.label">
<td>Label:</td>
<td>{{storedCredential.otp.label}}</td>
</tr>
<tr ng-show="storedCredential.otp.issuer">
<td>Issuer:</td>
<td>{{storedCredential.otp.issuer}}</td>
</tr>
<tr ng-show="storedCredential.otp.secret">
<td>Secret:</td>
<td>{{storedCredential.otp.secret}}</td>
</tr>
<tr ng-show="storedCredential.otp.secret">
<td>OTP:</td>
<td><span otp-generator
secret="storedCredential.otp.secret"></span>
</td>
</tr>
</table>
</div>
</div>

View file

@ -1,16 +1,20 @@
<div id="controls">
<div class="breadcrumb">
<!--<div class="crumb svg last" data-dir="/"><a-->
<!--href="/ncdev/index.php/apps/files?dir=/"><img class="svg"-->
<!--src="/ncdev/core/img/places/home.svg"-->
<!--alt="Home"></a>-->
<!--</div>-->
<div class="breadcrumb">
<div class="crumb svg ui-droppable" data-dir="/">
<a><i class="fa fa-home"></i></a>
</div>
<div class="crumb svg last">
<a>{{active_vault.name}}</a>
</div>
</div>
</div>
<div class="actions creatable">
<span ng-click="menuOpen = !menuOpen" class="button new"
ng-init="menuOpen = false" off-click="menuOpen = false;">
<span
>New</span></span>
>+</span></span>
<div class="actionList popovermenu bubble menu" ng-show="menuOpen">
<ul>
<li>
@ -30,7 +34,8 @@
</ul>
</div>
<div class="searchboxContainer">
<input type="text" ng-model="itemFilter.label" class="searchbox" placeholder="Search credential...">
<input type="text" ng-model="itemFilter.label" class="searchbox"
placeholder="Search credential...">
</div>
<span class="title" ng-if="delete_time">
Showing deleted since:
@ -40,7 +45,7 @@
</span>
</div>
</div>
<div off-click="closeSelected()">
<div off-click="closeSelected()" off-click-filter="'.link, .credential-table'">
<table class="credential-table" ng-init="menuOpen = false;">
<tr ng-repeat="credential in credentials | filter:itemFilter | tagFilter:selectedtags | as:this:'filtered_credentials'"
ng-if="credential.hidden == 0 && showCredentialRow(credential)"
@ -49,7 +54,7 @@
<td>
<span class="icon"><i class="fa fa-lock"></i> </span>
<span class="label">{{credential.label}}</span>
<span class="tags">
<span class="tags">
<span class="tag" ng-repeat="tag in credential.tags_raw">{{tag.text}}</span>
</span>
@ -113,7 +118,7 @@
</td>
<td>
<span otp-generator
secret="selectedCredential.otp.secret"></span>
secret="selectedCredential.otp.secret"></span>
</td>
</tr>
<tr ng-show="selectedCredential.email">
@ -159,7 +164,8 @@
Changed
</td>
<td>
{{selectedCredential.changed * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
{{selectedCredential.changed * 1000 | date:'dd-MM-yyyy @
HH:mm:ss'}}
</td>
</tr>
<tr ng-show="selectedCredential.created">
@ -167,27 +173,31 @@
Created
</td>
<td>
{{selectedCredential.created * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
{{selectedCredential.created * 1000 | date:'dd-MM-yyyy @
HH:mm:ss'}}
</td>
</tr>
</table>
<div class="tags">
<span class="tag" ng-repeat="tag in selectedCredential.tags">{{tag.text}}</span>
<span class="tag" ng-repeat="tag in selectedCredential.tags">{{tag.text}}</span>
</div>
<div ng-show="selectedCredential">
<span class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0" >
<span class="button" ng-click="editCredential(selectedCredential)"
ng-if="selectedCredential.delete_time == 0">
<span class="fa fa-edit"></span> Edit
</span>
<span class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0" >
<span class="fa fa-trash" ></span> Delete
<span class="button" ng-click="deleteCredential(selectedCredential)"
ng-if="selectedCredential.delete_time == 0">
<span class="fa fa-trash"></span> Delete
</span>
<span class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential)">
<span class="fa fa-recycle" ></span> Recover
<span class="button" ng-if="selectedCredential.delete_time > 0"
ng-click="recoverCredential(selectedCredential)">
<span class="fa fa-recycle"></span> Recover
</span>
<span class="button" ng-if="selectedCredential.delete_time == 0" >
<span class="button" ng-if="selectedCredential.delete_time == 0">
<span class="fa fa-share"></span> Share
</span>
</div>