Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/passman.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcos Zuriaga <wolfi@wolfi.es>2022-10-25 21:52:36 +0300
committerMarcos Zuriaga <wolfi@wolfi.es>2022-10-25 21:52:36 +0300
commit531c4b00779d9f1c08934bff361645e69749e506 (patch)
treefad607e876f0934522cecb108c071de059ec8b8a
parentcb467c9fa3e1c604f0c0bbe439f5eecef02b0109 (diff)
parent4175c836feae1b91beff242dfb9307093fada8ee (diff)
Merge branch 'nc_25_support'
-rw-r--r--appinfo/info.xml2
-rw-r--r--controller/translationcontroller.php1
-rw-r--r--css/admin.css6
-rw-r--r--css/admin.css.map2
-rw-r--r--css/app.css74
-rw-r--r--css/app.css.map2
-rw-r--r--css/bookmarklet.css3
-rw-r--r--css/bookmarklet.css.map2
-rw-r--r--js/settings-admin.js4
-rw-r--r--js/templates.js26
-rw-r--r--sass/admin.scss9
-rw-r--r--sass/app.scss13
-rw-r--r--sass/bookmarklet.scss6
-rw-r--r--sass/credentials.scss27
-rw-r--r--sass/menu.scss2
-rw-r--r--sass/settings.scss23
-rw-r--r--sass/share_credential.scss22
-rw-r--r--sass/vaults.scss4
-rw-r--r--templates/main.php4
-rw-r--r--templates/views/credential_revisions.html351
-rw-r--r--templates/views/edit_credential.html5
-rw-r--r--templates/views/partials/forms/edit_credential/basics.html47
-rw-r--r--templates/views/partials/forms/edit_credential/files.html4
-rw-r--r--templates/views/partials/forms/edit_credential/password.html73
-rw-r--r--templates/views/partials/forms/settings/export.html2
-rw-r--r--templates/views/partials/forms/settings/general_settings.html89
-rw-r--r--templates/views/partials/forms/settings/import.html2
-rw-r--r--templates/views/partials/forms/settings/password_settings.html87
-rw-r--r--templates/views/partials/forms/settings/sharing.html2
-rw-r--r--templates/views/partials/forms/share_credential/link_sharing.html8
-rw-r--r--templates/views/settings.html5
-rw-r--r--templates/views/share_credential.html5
-rw-r--r--templates/views/show_vault.html107
-rw-r--r--templates/views/vaults.html29
34 files changed, 581 insertions, 467 deletions
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 68601a16..0a0ebc3e 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -42,7 +42,7 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
<database>pgsql</database>
<database min-version="5.5">mysql</database>
<lib>openssl</lib>
- <nextcloud min-version="20" max-version="24"/>
+ <nextcloud min-version="20" max-version="25"/>
</dependencies>
<background-jobs>
diff --git a/controller/translationcontroller.php b/controller/translationcontroller.php
index 9e123c39..42c9a72c 100644
--- a/controller/translationcontroller.php
+++ b/controller/translationcontroller.php
@@ -187,6 +187,7 @@ class TranslationController extends ApiController {
'generation.settings' => $this->trans->t('Password generation settings'),
'password.generation.length' => $this->trans->t('Password length'),
'password.generation.min_digits' => $this->trans->t('Minimum amount of digits'),
+ 'password.generation.on_create' => $this->trans->t('Generate password on creation'),
'password.generation.uppercase' => $this->trans->t('Use uppercase letters'),
'password.generation.lowercase' => $this->trans->t('Use lowercase letters'),
'password.generation.digits' => $this->trans->t('Use numbers'),
diff --git a/css/admin.css b/css/admin.css
index 06ea9af9..e39536f1 100644
--- a/css/admin.css
+++ b/css/admin.css
@@ -8,5 +8,11 @@
height: 34px; }
#passwordSharingSettings #requests-table {
width: 100%; }
+#passwordSharingSettings .link {
+ cursor: pointer; }
+#passwordSharingSettings .link.accept:hover {
+ color: var(--color-error); }
+#passwordSharingSettings .link.ignore:hover {
+ color: var(--color-primary); }
/*# sourceMappingURL=admin.css.map */
diff --git a/css/admin.css.map b/css/admin.css.map
index df50b77a..6aa1a475 100644
--- a/css/admin.css.map
+++ b/css/admin.css.map
@@ -1,6 +1,6 @@
{
"version": 3,
-"mappings": "AAGM,wCAAE;EACA,OAAO,EAAE,GAAG;AAGhB,kDAAkB;EAChB,KAAK,EAAE,KAAK;AAEd,uDAAwB;EACtB,KAAK,EAAE,KAAK;EACZ,uEAAgB;IACd,MAAM,EAAE,IAAI;AAIlB,wCAAe;EACb,KAAK,EAAE,IAAI",
+"mappings": "AAGM,wCAAE;EACA,OAAO,EAAE,GAAG;AAGhB,kDAAkB;EAChB,KAAK,EAAE,KAAK;AAEd,uDAAwB;EACtB,KAAK,EAAE,KAAK;EACZ,uEAAgB;IACd,MAAM,EAAE,IAAI;AAIlB,wCAAe;EACb,KAAK,EAAE,IAAI;AAEb,8BAAM;EACJ,MAAM,EAAE,OAAO;AAEjB,2CAAmB;EACjB,KAAK,EAAE,kBAAkB;AAE3B,2CAAmB;EACjB,KAAK,EAAE,oBAAoB",
"sources": ["../sass/admin.scss"],
"names": [],
"file": "admin.css"
diff --git a/css/app.css b/css/app.css
index 5d10c799..fa9d7beb 100644
--- a/css/app.css
+++ b/css/app.css
@@ -417,7 +417,7 @@
.vault_wrapper {
margin: 0 auto auto auto;
- max-width: 420px;
+ max-width: 450px;
-webkit-border-radius: 5px;
border-radius: 5px;
background-clip: padding-box;
@@ -490,10 +490,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-#content {
- padding-top: 47px !important;
+#inner-app-content {
+ padding-top: 58px !important;
height: 100%;
- width: 100%; }
+ width: 100%;
+ display: flex; }
.icon-image-size {
width: 16px; }
@@ -510,7 +511,7 @@
#app-sidebar {
height: auto; }
#app-sidebar .sidebar {
- display: inline-block; }
+ display: flex; }
#app-sidebar .sidebar .sidebar-icon {
margin-right: 15px; }
#app-sidebar .sidebar .sidebar-icon .icon-image-size {
@@ -518,26 +519,26 @@
#app-sidebar .sidebar .sidebar-icon i {
width: 44px; }
#app-sidebar .sidebar .sidebar-label {
- float: right;
- line-height: 44px; }
+ float: right; }
.vaultlist_sidebar_hidden {
width: 100vw !important;
margin-left: 0px !important; }
#app-content {
- margin-left: 300px;
+ position: sticky;
overflow-x: hidden; }
- @media only screen and (max-width: 769px) {
+ @media only screen and (max-width: 1024px) {
#app-content {
width: 100vw; } }
- @media only screen and (min-width: 770px) {
+ @media only screen and (min-width: 1025px) {
#app-content {
width: calc(100vw - 300px); } }
#app-content #app-content-wrapper {
- min-height: 95%;
+ height: 100%;
display: flex;
- height: calc(100vh - 49px); }
+ width: 100%;
+ padding-right: 15px; }
#app-content #app-content-wrapper #passman-controls {
text-align: center;
border-bottom: 1px solid #c9c9c9; }
@@ -853,6 +854,8 @@
padding-right: 10px; }
#app-content #app-content-wrapper .edit_credential .import-selection select {
margin-left: 15px; }
+ #app-content #app-content-wrapper .credential-revisions div.crumb > a {
+ max-width: initial !important; }
#app-content #app-content-wrapper .main_list {
flex: 1;
float: left;
@@ -878,7 +881,6 @@
#app-content #app-content-wrapper .app_sidebar h2 {
margin-bottom: 10px;
font-weight: 400;
- white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 90%; }
@@ -1081,7 +1083,7 @@
opacity: 1 !important;
z-index: 140; }
.nav-trashbin a.active {
- background-image: var(--icon-delete-e9322d); }
+ background-image: var(--icon-delete-color-red); }
.nav-trashbin a .fa {
margin-right: 15px; }
@@ -1180,6 +1182,20 @@
.shared_table .fa-trash:hover {
color: #ce3702; }
+.tags {
+ float: left; }
+ .tags .tag {
+ background-color: rgba(240, 240, 240, 0.9);
+ padding: 4px;
+ font-size: 11px; }
+
+tags-input .tags {
+ width: 100%; }
+ tags-input .tags .input {
+ width: auto !important; }
+ tags-input .tags .tag-item {
+ color: var(--color-text-lighter); }
+
/**
* Nextcloud - passman
*
@@ -1201,6 +1217,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+.ng-app-frame {
+ display: block !important; }
+
.spacer-top-30 {
margin-top: 30px; }
@@ -1255,6 +1274,23 @@
h3 {
font-weight: bold; }
+.setting-group label, .setting-group input {
+ display: block; }
+.setting-group input[type="text"], .setting-group input[type="password"], .setting-group textarea {
+ width: 100%; }
+
+.setting-group.margin-bottom-25 {
+ margin-bottom: 25px; }
+
+.setting-group.margin-bottom-10 {
+ margin-bottom: 10px; }
+
+.display-grid {
+ display: grid; }
+
+.password-settings-padding-left-fix {
+ padding-left: 0 !important; }
+
/**
* Nextcloud - passman
*
@@ -1411,18 +1447,17 @@ h3 {
#passman-controls {
box-sizing: border-box;
position: fixed;
- margin: -45px 0 0;
+ margin: -58px 8px 0 0;
right: 0;
left: 0;
border-bottom: 1px solid #c9c9c9;
- padding: 0 !important;
- background-color: rgba(255, 255, 255, 0.95);
z-index: 50;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
- height: 44px !important; }
+ min-height: 58px !important;
+ padding-right: 20px !important; }
@media only screen and (max-width: 769px) {
#passman-controls .breadcrumb {
padding-left: 15px; } }
@@ -1434,8 +1469,7 @@ h3 {
width: 100%; } }
@media only screen and (min-width: 1024px) {
#app-navigation + #app-content #passman-controls {
- left: 300px;
- width: calc( 100% - 300px ) !important; } }
+ left: 308px; } }
#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;
display: inline-block;
diff --git a/css/app.css.map b/css/app.css.map
index e9c6a7b8..30a92ed1 100644
--- a/css/app.css.map
+++ b/css/app.css.map
@@ -1,6 +1,6 @@
{
"version": 3,
-"mappings": "AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;ACpBH;;;;;;;;;;;;;;;;;;;;GAoBG;ACpBH;;;;;;;;;;;;;;;;;;;;GAoBG;ACpBH;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,YAAY;EACV,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,IAAI;;AAEb,kBAAkB;EAChB,UAAU,EAAE,OAAoB;EAChC,KAAK,EAAE,IAAI;;AAGb,WAAW;EACT,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,IAAI;;AAEb,iBAAiB;EACf,UAAU,EAAE,OAAoB;EAChC,KAAK,EAAE,IAAI;;ACrCb;;;;;;;;;;;;;;;;;;;;GAoBG;ACpBH;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,iBAAkB;EAChB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,UAAU,EAAE,CAAC;EACb,IAAI,EAAE,QAAQ;EACd,OAAO,EAAE,EAAE;EACX,UAAU,EAAE,4BAA4B;;AAG1C,sBAAuB;EACrB,UAAU,EAAE,6BAA6B;EAEzC,yBAAG;IACD,OAAO,EAAE,IAAI;IACb,eAAe,EAAE,OAAO;;AAK1B,mCAAuB;EACrB,UAAU,EAAE,8BAA8B;;AAI9C,6BAA8B;EAC5B,KAAK,EAAE,uBAAuB;EAC9B,mBAAmB,EAAE,4BAA4B;EACjD,UAAU,EAAE,2CAA2C;EACvD,WAAW,EAAE,IAAI;;AAGnB,oFAAqF;EACnF,mBAAmB,EAAE,8BAA8B;EACnD,UAAU,EAAE,6CAA6C;;AAG3D,wHAAyH;EACvH,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,OAAO;;AAGjB,sBAAuB;EACrB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,mBAAmB;EAC5B,UAAU,EAAE,iGAAiG;EAC7G,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,MAAM;EACnB,aAAa,EAAE,QAAQ;EACvB,OAAO,EAAE,EAAE;EACX,KAAK,EAAE,sBAAsB;EAC7B,aAAa,EAAE,6BAA6B;;AAG9C,cAAe;EACb,MAAM,EAAE,cAAc;EACtB,gBAAgB,EAAE,OAAO;EACzB,mBAAmB,EAAE,CAAC;EACtB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK;;AClFhB;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO;EACL,QAAQ,EAAC,MAAM;EACf,aAAK;IACH,KAAK,EAAE,4BAA4B;IACnC,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,OAAO;IACpB,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,WAAW;IACpB,SAAS,EAAE,IAAI;IJYjB,kCAAkC,EIXH,CAAC;IJYhC,0BAA0B,EIZK,CAAC;IJahC,+BAA+B,EIbA,CAAC;IJchC,uBAAuB,EIdQ,CAAC;IJehC,eAAe,EAAE,WAAW;EIb5B,oBAAY;IACV,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,IAAI;IACjB,cAAc,EAAC,GAAG;IAClB,0BAAK;MACH,OAAO,EAAE,GAAG;MACZ,OAAO,EAAE,YAAY;MACrB,SAAS,EAAE,IAAI;MACf,MAAM,EAAE,cAAc;MACtB,gBAAgB,EAAE,OAAiB;MACnC,MAAM,EAAE,OAAO;IAEjB,gCAAW;MACT,KAAK,EAAE,OAAgB;IAEzB,qCAAgB;MJPlB,kCAAkC,EIQD,GAAG;MJPpC,0BAA0B,EIOO,GAAG;MJNpC,+BAA+B,EIME,GAAG;MJLpC,uBAAuB,EIKU,GAAG;MJJpC,eAAe,EAAE,WAAW;;AKpD9B;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,kBAAkB;EAChB,aAAa,EAAE,qCAAqC;EACpD,UAAU,EAAE,gCAAgC;EA0B5C,OAAO,EAAE,eAAe;EAzBxB,6BAAU;IACR,aAAa,EAAE,0BAA0B;IACzC,UAAU,EAAE,gCAAgC;EAE9C,oCAAkB;IAChB,UAAU,EAAE,IAAI;EAGlB,sCAAoB;IAClB,mBAAmB,EAAE,OAAO;EAG9B,sCAAoB;IAClB,gBAAgB,EAAE,qBAAqB;EAGzC,kCAAgB;IAAC,MAAM,EAAE,eAAe;EACxC,2BAAS;IAAC,MAAM,EAAE,eAAe;EACjC,sCAAoB;IAAC,MAAM,EAAE,eAAe;EAC5C,iCAAe;IAAC,MAAM,EAAE,eAAe;EACvC,oCAAkB;IAAC,UAAU,EAAE,gBAAgB;EAC/C,6BAAW;IAAC,UAAU,EAAE,gBAAgB;;AAQxC,qBAAU;EACR,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,GAAG;EACV,UAAU,EAAE,KAAK;EACjB,QAAQ,EAAE,IAAI;EACd,2BAAK;IAIH,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,IAAI;IALX,+BAAG;MACD,MAAM,EAAE,OAAO;AAOrB,yBAAc;EACZ,WAAW,EAAE,IAAI;EACjB,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,gBAAgB;AAEzB,uBAAY;EACV,KAAK,EAAE,IAAI;AAGb,kBAAO;EACL,MAAM,EAAE,OAAO;EACf,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;AAGb,wBAAa;EACX,MAAM,EAAE,OAAO;EACf,YAAY,EAAE,IAAI;EAClB,UAAU,EAAE,IAAI;EAChB,SAAS,EAAE,IAAI;AAEjB,oBAAS;EACP,OAAO,EAAE,IAAI;AAEf,yBAAc;EACZ,OAAO,EAAE,KAAK;;AC7FlB;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qBAAqB;EACnB,aAAa,EAAE,qCAAqC;EACpD,UAAU,EAAE,gCAAgC;EAgC5C,OAAO,EAAE,eAAe;EA9BxB,gCAAU;IACR,aAAa,EAAE,0BAA0B;IACzC,UAAU,EAAE,gCAAgC;EAE9C,uCAAkB;IAChB,UAAU,EAAE,eAAe;EAG7B,yCAAoB;IAClB,mBAAmB,EAAE,OAAO;EAG9B,yCAAoB;IAClB,gBAAgB,EAAE,qBAAqB;EAGzC,+CAA0B;IACxB,gBAAgB,EAAE,qBAAqB;IACvC,MAAM,EAAE,kBAAkB;EAG5B,qCAAgB;IAAC,MAAM,EAAE,eAAe;EACxC,8BAAS;IAAC,MAAM,EAAE,eAAe;EACjC,yCAAoB;IAAC,MAAM,EAAE,eAAe;EAC5C,oCAAe;IAAC,MAAM,EAAE,eAAe;EACvC,uCAAkB;IAAC,UAAU,EAAE,gBAAgB;EAC/C,gCAAW;IAAC,UAAU,EAAE,gBAAgB;;ACnD1C;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,YAAY;EACV,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,MAAM;EAClB,OAAO,EAAE,IAAI;EACb,gBAAgB,EAAE,GAAG;EACrB,KAAK,EAAE,KAAK;EACZ,sBAAS;IACP,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,OAAO;;AAGnB,cAAc;EACZ,MAAM,EAAC,gBAAgB;EAEvB,SAAS,EAAE,KAAK;EPPhB,qBAAqB,EOQE,GAAG;EPP1B,aAAa,EOOU,GAAG;EPN1B,eAAe,EAAE,WAAW;EAAG,qDAAqD;EOOpF,UAAU,EAAE,cAAc;EAC1B,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,KAAK;EACd,yBAAU;IAER,OAAO,EAAE,GAAG;IACZ,4HAAiB;MACf,MAAM,EAAE,OAAO;IAEjB,+BAAK;MACH,KAAK,EAAE,OAAO;IAEhB,qCAAW;MACT,gBAAgB,EAAE,kBAAkB;MACpC,KAAK,EAAE,IAAI;IAEb,4BAAE;MACA,aAAa,EAAE,iBAAiB;MAChC,OAAO,EAAE,IAAI;IAEf,kCAAQ;MACN,gBAAgB,EAAE,OAAO;EAG7B,0BAAW;IACT,OAAO,EAAE,IAAI;IACb,iCAAM;MACJ,KAAK,EAAE,OAAO;IAGd,iDAAY;MACV,KAAK,EAAE,OAAO;IAIlB,gGAA0C;MACxC,KAAK,EAAE,IAAI;MP7Cf,qBAAqB,EO8CM,GAAG;MP7C9B,aAAa,EO6Cc,GAAG;MP5C9B,eAAe,EAAE,WAAW;MAAG,qDAAqD;IO+ChF,kDAAO;MACL,KAAK,EAAE,GAAG;MACV,OAAO,EAAE,YAAY;IAGzB,kCAAO;MACL,UAAU,EAAE,IAAI;EAGpB,0BAAY;IACV,OAAO,EAAE,IAAI;IACb,gCAAK;MACH,UAAU,EAAE,IAAI;MAChB,OAAO,EAAE,KAAK;IAEhB,6CAAkB;MAChB,KAAK,EAAE,IAAI;EAIf,0BAAW;IACT,aAAa,EAAE,IAAI;;AAKvB,oCAAoC;EAClC,cAAc;IACZ,KAAK,EAAE,GAAG;AC9Gd;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,QAAS;EACP,WAAW,EAAE,eAAe;EAC5B,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAIb,gBAAgB;EACd,KAAK,EAAE,IAAI;;AAIb,0BAA0B;EACxB,OAAO,EAAE,IAAI;;AAGf,KAAK;EACH,KAAK,EAAC,oBAAoB;EAC1B,MAAM,EAAE,OAAO;EACf,UAAK;IACH,MAAM,EAAE,OAAO;;AAMnB,YAAY;EACV,MAAM,EAAE,IAAI;EACZ,qBAAQ;IACN,OAAO,EAAE,YAAY;IACrB,mCAAc;MACZ,YAAY,EAAE,IAAI;MAClB,oDAAgB;QACd,KAAK,EAAE,IAAI;MAEb,qCAAE;QACA,KAAK,EAAE,IAAI;IAGf,oCAAc;MACZ,KAAK,EAAC,KAAK;MACX,WAAW,EAAE,IAAI;;AAKvB,yBAAyB;EACvB,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;;AAE7B,YAAa;EAEX,WAAW,EAAE,KAAK;EASlB,UAAU,EAAE,MAAM;EAPlB,yCAA0C;IAJ5C,YAAa;MAKT,KAAK,EAAE,KAAK;EAEd,yCAA0C;IAP5C,YAAa;MAQT,KAAK,EAAE,mBAAmB;EAM5B,iCAAqB;IACnB,UAAU,EAAE,GAAG;IACf,OAAO,EAAC,IAAI;IAEZ,MAAM,EAAE,kBAAkB;IAE1B,mDAAkB;MAChB,UAAU,EAAE,MAAM;MAYlB,aAAa,EAAE,iBAAiB;MAR5B,oCAAqC;QADvC,wEAAO;UAEH,OAAO,EAAE,IAAI;MAEf,4DAA6D;QAJ/D,wEAAO;UAKH,OAAO,EAAE,IAAI;IAQrB,wCAAO;MACL,UAAU,EAAE,MAAM;MAClB,OAAO,EAAE,YAAY;MACrB,WAAW,EAAE,IAAI;MACjB,UAAU,EAAE,IAAI;MAChB,oCAAqC;QALvC,wCAAO;UAMH,OAAO,EAAE,IAAI;IAGjB,6CAAY;MACV,KAAK,EAAE,IAAI;IAEb,oDAAmB;MACjB,KAAK,EAAE,IAAI;MACX,QAAQ,EAAE,MAAM;MAChB,4DAAQ;QACN,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,KAAK;QR9FlB,qBAAqB,EQ+FQ,GAAG;QR9FhC,aAAa,EQ8FgB,GAAG;QR7FhC,eAAe,EAAE,WAAW;QAAG,qDAAqD;QQ8F9E,UAAU,EAAE,gCAA+B;QAEzC,kEAAG;UACD,YAAY,EAAE,IAAI;QAEpB,yEAAU;UACR,SAAS,EAAE,IAAI;UACf,OAAO,EAAE,MAAM;MAIrB,kEAAc;QACZ,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,KAAK;IAId,4CAAW;MACT,KAAK,EAAE,KAAK;MACZ,YAAY,EAAE,GAAG;MACjB,UAAU,EAAE,GAAG;MACf,mEAAuB;QRzF3B,iCAAiC,EQ0FC,GAAG;QRzFrC,yBAAyB,EQyFS,GAAG;QRxFrC,8BAA8B,EQwFI,GAAG;QRvFrC,sBAAsB,EQuFY,GAAG;QRtFrC,eAAe,EAAE,WAAW;QQuFtB,MAAM,EAAE,kCAAiC;MAE3C,kEAAsB;QR3G1B,kCAAkC,EQ4GC,GAAG;QR3GtC,0BAA0B,EQ2GS,GAAG;QR1GtC,+BAA+B,EQ0GI,GAAG;QRzGtC,uBAAuB,EQyGY,GAAG;QRxGtC,eAAe,EAAE,WAAW;QQyGtB,MAAM,EAAE,kCAAiC;MAE3C,uDAAW;QACT,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,GAAG;QACZ,gBAAgB,EAAE,wBAAuB;MAE3C,8DAAkB;QAChB,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,GAAG;QACZ,gBAAgB,EAAE,wBAAwB;MAE5C,uDAAW;QACT,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,GAAG;IAIhB,qDAAoB;MAClB,OAAO,EAAE,YAAY;MACrB,UAAU,EAAE,OAAO;MACnB,KAAK,EAAE,KAAK;MACZ,gEAAW;QACT,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,gBAAgB;MAEzB,kEAAa;QACX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,OAAO;QACf,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,IAAI;QACT,OAAO,EAAE,QAAQ;MAEnB,oEAAe;QACb,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,GAAG;QACZ,4BAA4B;QAC5B,UAAU,EAAE,mBAAmB;QRnJrC,kCAAkC,EQoJE,GAAG;QRnJvC,0BAA0B,EQmJU,GAAG;QRlJvC,iCAAiC,EQkJG,GAAG;QRjJvC,yBAAyB,EQiJW,GAAG;QRhJvC,eAAe,EAAE,WAAW;QQiJtB,0EAAM;UACJ,MAAM,EAAE,OAAO;IAKrB,mDAAkB;MAChB,KAAK,EAAE,IAAI;MACX,4DAAS;QACP,gBAAgB,EAAE,UAAgB;MAGlC,+DAAW;QACT,gBAAgB,EAAE,OAAO;MAG3B,mEAAa;QACX,gBAAgB,EAAE,OAAO;MAE3B,yEAAmB;QACjB,gBAAgB,EAAE,OAAoB;MAExC,wEAAiB;QACf,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,IAAI;QACjB,8EAAK;UACH,MAAM,EAAE,IAAI;QAEd,8EAAK;UACH,UAAU,EAAE,MAAM;UAClB,WAAW,EAAE,IAAI;MAIrB,yDAAG;QACD,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,GAAG;QACZ,aAAa,EAAE,iBAAiB;QAChC,+DAAM;UACJ,SAAS,EAAE,IAAI;UACf,KAAK,EAAE,IAAI;UACX,YAAY,EAAE,GAAG;UACjB,WAAW,EAAE,GAAG;QAGlB,oEAAW;UACT,OAAO,EAAE,YAAY;UACrB,KAAK,EAAE,KAAK;UACZ,WAAW,EAAE,GAAG;UAChB,UAAU,EAAE,GAAG;UACf,OAAO,EAAE,GAAG;UACZ,MAAM,EAAE,IAAI;UACZ,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,OAAO;QAEjB,0EAAiB;UACf,OAAO,EAAE,CAAC;QAEZ,sEAAa;UACX,UAAU,EAAE,IAAI;UAChB,MAAM,EAAE,KAAK;UACb,KAAK,EAAE,KAAK;UACZ,KAAK,EAAE,eAAe;UACtB,UAAU,EAAE,gCAA+B;UAC3C,yEAAG;YACD,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;YACZ,4EAAG;cACD,OAAO,EAAE,GAAG;YAEd,mFAAU;cACR,SAAS,EAAE,IAAI;cACf,OAAO,EAAE,MAAM;UAGnB,8EAAQ;YACN,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,KAAK;IAOvB,uCAAM;MACJ,KAAK,EAAE,KAAK;MACZ,4CAAK;QACH,gBAAgB,EAAE,wBAAuB;QACzC,OAAO,EAAE,GAAG;QACZ,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,GAAG;QRtQvB,qBAAqB,EQuQQ,GAAG;QRtQhC,aAAa,EQsQgB,GAAG;QRrQhC,eAAe,EAAE,WAAW;QAAG,qDAAqD;MQuQhF,uDAAgB;QACd,YAAY,EAAE,GAAG;IAIrB,4CAAW;MACT,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MAEZ,OAAO,EAAE,IAAI;MACb,SAAS,EAAE,IAAI;MACf,wDAAY;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,kCAAiC;QACzC,MAAM,EAAE,IAAI;QRxRlB,qBAAqB,EQyRQ,IAAI;QRxRjC,aAAa,EQwRgB,IAAI;QRvRjC,eAAe,EAAE,WAAW;QAAG,qDAAqD;QQwR9E,4EAAoB;UAClB,OAAO,EAAE,IAAI;UACb,OAAO,EAAE,GAAG;UACZ,cAAc,EAAE,MAAM;UACtB,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,OAAO;UACf,SAAS,EAAE,MAAM;UAEjB,mFAAO;YACL,WAAW,EAAE,KAAK;YAElB,aAAa,EAAE,GAAG;YAClB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,KAAK;UAId,kFAAM;YACJ,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,KAAK;YAEjB,uFAAK;cACH,KAAK,EAAE,eAAe;cACtB,UAAU,EAAE,GAAG;cACf,OAAO,EAAE,YAAY;cACrB,IAAI,EAAC,CAAC;MAKd,gCAAiC;QAC/B,wDAAY;UACV,KAAK,EAAE,GAAG;MAGd,gCAAiC;QAC/B,wDAAY;UACV,KAAK,EAAE,GAAG;MAGd,gCAAiC;QAC/B,wDAAY;UACV,KAAK,EAAE,GAAG;IAMhB,kDAAiB;MACf,WAAW,EAAE,IAAI;MACjB,wDAAM;QACJ,OAAO,EAAE,KAAK;MAEhB,gJAA2C;QACzC,KAAK,EAAE,IAAI;MAEb,sEAAmB;QACjB,UAAU,EAAE,IAAI;QAChB,gBAAgB,EAAE,OAAO;QACzB,KAAK,EAAE,KAAK;MAGd,uEAAoB;QAClB,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,IAAI;QACb,6EAAK;UACH,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,IAAI;QAEd,6EAAK;UACH,YAAY,EAAE,GAAG;UACjB,aAAa,EAAE,IAAI;UACnB,KAAK,EAAE,OAAO;MAIlB,wDAAM;QACJ,KAAK,EAAE,IAAI;QACX,6DAAK;UACH,gBAAgB,EAAE,wBAAuB;UACzC,OAAO,EAAE,GAAG;UACZ,SAAS,EAAE,IAAI;MAIjB,mEAAM;QACJ,KAAK,EAAE,IAAI;MAKf,uEAAqB;QACnB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;MAGb,2EAAM;QACJ,QAAQ,EAAE,MAAM;QAChB,kGAAuB;UACrB,KAAK,EAAE,eAAe;UACtB,KAAK,EAAE,IAAI;QAEb,kFAAO;UAIL,KAAK,EAAE,IAAI;UAHX,qFAAK;YACH,SAAS,EAAE,IAAI;MAKrB,yGAAmC;QACjC,YAAY,EAAE,YAAY;MAI5B,2EAAY;QACV,aAAa,EAAE,CAAC;QAChB,iFAAM;URhYd,kCAAkC,EQiYK,CAAC;URhYxC,0BAA0B,EQgYa,CAAC;UR/XxC,+BAA+B,EQ+XQ,CAAC;UR9XxC,uBAAuB,EQ8XgB,CAAC;UR7XxC,eAAe,EAAE,WAAW;QQ+XpB,iHAAsC;URnY9C,kCAAkC,EQoYK,CAAC;URnYxC,0BAA0B,EQmYa,CAAC;URlYxC,+BAA+B,EQkYQ,CAAC;URjYxC,uBAAuB,EQiYgB,CAAC;URhYxC,eAAe,EAAE,WAAW;MQmYtB,2EAAY;QACV,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,GAAG;QAChB,kFAAO;UR5Xf,iCAAiC,EQ6XK,CAAC;UR5XvC,yBAAyB,EQ4Xa,CAAC;UR3XvC,8BAA8B,EQ2XQ,CAAC;UR1XvC,sBAAsB,EQ0XgB,CAAC;URzXvC,eAAe,EAAE,WAAW;MQ6XxB,4HAAuB;QACrB,UAAU,EAAE,IAAI;QAChB,wIAAM;UACJ,KAAK,EAAE,IAAI;UAET,0KAAW;YACT,KAAK,EAAE,EAAE;UAEX,0JAAG;YACD,KAAK,EAAE,IAAI;UAEb,sLAAiB;YACf,KAAK,EAAE,GAAG;UAGd,0JAAS;YACP,gBAAgB,EAAE,WAAW;UAG7B,oKAAW;YACT,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,MAAM;YAClB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,IAAI;UAEd,gLAAiB;YACf,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,GAAG;YACV,oLAAE;cACA,MAAM,EAAE,OAAO;UAGnB,0SAAO;YACL,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,GAAG;YACZ,8bAAqC;cACnC,KAAK,EAAE,GAAG;UAGd,oJAAG;YACD,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,MAAM;MAQ9B,2DAAS;QACP,aAAa,EAAE,IAAI;MAInB,2EAAM;QACJ,WAAW,EAAE,IAAI;IAMvB,4CAAU;MACR,IAAI,EAAC,CAAC;MACN,KAAK,EAAC,IAAI;MACV,MAAM,EAAC,IAAI;MACX,QAAQ,EAAC,IAAI;MACb,KAAK,EAAC,IAAI;MACV,mDAAM;QACJ,QAAQ,EAAC,MAAM;MAEjB,yDAAY;QACV,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,MAAM;MAEpB,uDAAU;QACR,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,MAAM;IAItB,8CAAa;MACX,KAAK,EAAC,KAAK;MAeX,OAAO,EAAE,IAAI;MAKb,UAAU,EAAE,IAAI;MAnBhB,iDAAG;QACD,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,MAAM;QAChB,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,GAAG;MAEhB,gEAAkB;QAChB,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,OAAO;MAGjB,4DAAgB;QACd,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,YAAY;MAKrB,oFAAoB;QAClB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,IAAI;QACb,0FAAK;UACH,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,IAAI;QAEd,0FAAK;UACH,YAAY,EAAE,GAAG;UACjB,aAAa,EAAE,IAAI;UACnB,KAAK,EAAE,OAAO;MAGlB,oEAAK;QACH,aAAa,EAAE,IAAI;MAErB,qEAAM;QACJ,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,IAAI;QACX,0EAAK;UACH,gBAAgB,EAAE,wBAAuB;UACzC,OAAO,EAAE,GAAG;UACZ,YAAY,EAAE,GAAG;;AAQ7B,iBAAkB;EAChB,QAAQ,EAAE,MAAM;EAChB,iDAAc;IACZ,KAAK,EAAE,IAAI;EAEb,wBAAO;IAIL,WAAW,EAAE,MAAM;IACnB,aAAa,EAAE,QAAQ;IACvB,SAAS,EAAE,IAAI;EAEjB,wBAAO;IACL,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,GAAG;IACf,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,IAAI;IACX,8BAAM;MACJ,MAAM,EAAE,OAAO;MACf,YAAY,EAAE,GAAG;;AAKvB,SAAU;EACR,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,IAAI;EACZ,uBAAc;IACZ,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,IAAI;IACZ,gBAAgB,EAAE,IAAI;IACtB,gBAAgB,EAAE,OAAO;IACzB,uCAAgB;MACd,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,CAAC;MACN,OAAO,EAAE,CAAC;MACV,UAAU,EAAE,MAAM;MAClB,KAAK,EAAE,IAAI;;AAKjB,gBAAiB;EACf,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,KAAK;EAClB,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EACT,QAAQ,EAAE,QAAQ;;AAGpB,sBAAuB;EACrB,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,MAAM;;AAGpB,OAAQ;EACN,aAAa,EAAE,kBAAkB;EACjC,WAAW,EAAE,kBAAkB;EAC/B,YAAY,EAAE,kBAAkB;EAChC,UAAU,EAAE,kBAAkB;EAC9B,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,KAAK;EACZ,aAAa,EAAE,KAAK;EACpB,SAAS,EAAE,iDAAiD;;AAG9D,gBAOC;EANC,EAAG;IACD,SAAS,EAAE,YAAY;EAEzB,IAAK;IACH,SAAS,EAAE,cAAc;AAI7B,UAAW;EACT,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,CAAC;EACV,QAAQ,EAAE,MAAM;EAChB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,EAAE;;AAGb,kBAAmB;EACjB,SAAS,EAAE,MAAM;EACjB,gBAAgB,EAAE,wBAAuB;EACzC,UAAU,EAAE,GAAG;EACf,OAAO,EAAE,GAAG;EACZ,YAAY,EAAE,GAAG;EACjB,YAAY,EAAE,iBAAiB;;AAGjC;wBACyB;EACvB,gBAAgB,EAAE,OAAO;;AAG3B,kBAAmB;EACjB,MAAM,EAAE,OAAO;EAAE,mBAAmB;;AAGtC,WAAY;EACV,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,OAAO;;AAG3B,WAAY;EACV,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,IAAI;EACb,iBAAM;IAIJ,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,OAAO;IACpB,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,WAAW;IACpB,SAAS,EAAE,IAAI;IR9oBjB,iCAAiC,EQ+oBH,CAAC;IR9oB/B,yBAAyB,EQ8oBK,CAAC;IR7oB/B,8BAA8B,EQ6oBA,CAAC;IR5oB/B,sBAAsB,EQ4oBQ,CAAC;IR3oB/B,eAAe,EAAE,WAAW;EQ6oB5B,wBAAa;IACX,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,GAAG;IACf,8BAAM;MACJ,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,iBAAiB;MAC1B,SAAS,EAAE,IAAI;MACf,MAAM,EAAE,cAAc;MACtB,gBAAgB,EAAE,OAAiB;MACnC,MAAM,EAAE,OAAO;MR1pBnB,iCAAiC,EQ2pBD,GAAG;MR1pBnC,yBAAyB,EQ0pBO,GAAG;MRzpBnC,8BAA8B,EQypBE,GAAG;MRxpBnC,sBAAsB,EQwpBU,GAAG;MRvpBnC,eAAe,EAAE,WAAW;IQypB1B,oCAAY;MACV,KAAK,EAAE,OAAgB;;AC5tB7B;;;;;;;;;;;;;;;;;;;;GAoBG;AAGD,uBAAI;EACF,YAAY,EAAE,IAAI;AAEpB,0BAAO;EACL,KAAK,EAAE,GAAG;EACV,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,IAAI;;AAItB,yBAA0B;EACxB,YAAY,EAAE,IAAI;;AAIlB,6BAAQ;EACN,OAAO,EAAE,IAAI;AAEf,yBAAK;EACH,OAAO,EAAE,KAAK;;AAIlB,aAAc;EAGZ,KAAK,EAAE,kBAAkB;EAEzB,YAAY,EAAE,cAAc;EAC5B,eAAE;IAMA,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,GAAG;IANZ,sBAAQ;MAEN,gBAAgB,EAAE,yBAAyB;IAM7C,mBAAI;MACF,YAAY,EAAE,IAAI;;AAMxB,eAAe;EAIb,wBAAwB;EAHxB,+DAA+C;IAC7C,UAAU,EAAE,+BAA+B;EAG7C,uDAAwC;IACtC,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,GAAG;IAClB,MAAM,EAAE,OAAO;IACf,UAAU,EAAE,4BAA4B;IACxC,OAAO,EAAE,GAAG;;AAQZ,2BAAS;EACP,OAAO,EAAE,YAAW;EACpB,UAAU,EAAE,2CAA0C;AAKxD,qDAAmC;EACjC,gBAAgB,EAAE,oBAAoB;AAGxC,oCAAkB;EAChB,gBAAgB,EAAE,OAAO;AAG3B,uCAAqB;EACnB,gBAAgB,EAAE,OAAO;AAG3B,sCAAoB;EAClB,gBAAgB,EAAE,OAAO;AAG3B,sCAAoB;EAClB,gBAAgB,EAAE,oBAAoB;AAGxC,gCAAc;EACZ,QAAQ,EAAE,QAAQ;AAGpB,6BAAW;EACT,OAAO,EAAE,CAAC;AAEZ,oBAAE;EACA,QAAQ,EAAE,OAAO;EACjB,YAAY,EAAE,eAAc;EAC5B,+BAAW;IACT,OAAO,EAAE,GAAG;IACZ,kCAAG;MACD,KAAK,EAAE,eAAe;;AAOhC,YAAY;EACV,OAAO,EAAE,eAAe;;AAI1B,aAAa;EACX,gBAAgB,EAAE,yYAAyY;;AChJ7Z;;;;;;;;;;;;;;;;;;;;GAoBG;AAID,sBAAO;EACL,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,SAAS;AAGnB,6BAAe;EACb,KAAK,EAAE,GAAG;EAER,8CAAM;IACJ,KAAK,EAAE,IAAI;EAMf,2CAAc;IACZ,UAAU,EAAE,IAAI;;AAKtB,MAAO;EACL,KAAK,EAAE,IAAI;;AAEb,iBAAiB;EACf,WAAW,EAAE,IAAI;EACjB,uBAAK;IACH,KAAK,EAAE,IAAI;EAEb,uBAAI;IACF,aAAa,EAAE,IAAI;;AAIrB,sBAAQ;EACN,YAAY,EAAE,IAAI;AAGpB,uBAAU;EACR,MAAM,EAAE,OAAO;AAEjB,6BAAgB;EACd,KAAK,EAAE,OAAO;;AClElB;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,cAAc;EACZ,UAAU,EAAE,IAAI;;AAGhB,qBAAG;EACD,cAAc,EAAE,cAAc;AAEhC,yBAAO;EACL,KAAK,EAAE,GAAG;EACV,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,IAAI;AAErB,+BAAY;EACV,KAAK,EAAE,GAAG;;AAGd,WAAW;EACT,MAAM,EAAE,kCAAkC;EAC1C,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,GAAG;;AAGd,MAAO;EACL,KAAK,EAAE,OAAO;;AAGhB,WAAY;EACV,UAAU,EAAE,KAAK;EACjB,UAAU,EAAE,IAAI;EAChB,oBAAS;IACP,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,KAAK;;AAIjB,uBAAwB;EAItB,aAAa,EAAE,IAAI;EAHnB,gCAAQ;IACN,MAAM,EAAE,KAAK;;AAKjB,aAAc;EACZ,YAAY,EAAE,IAAI;EAIlB,aAAa,EAAE,IAAI;EAHnB,gBAAG;IACD,eAAe,EAAE,IAAI;;AAIzB,oBAAqB;EACnB,UAAU,EAAE,MAAM;;AAEpB,aAAc;EACZ,aAAa,EAAE,IAAI;EACnB,sBAAQ;IACN,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,OAAO;EAEjB,kCAAO;IACL,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,OAAO;;AAGpB,EAAG;EACD,WAAW,EAAE,IAAI;;ACvFnB;;;;;;;;;;;;;;;;;;;GAmBG;AAGD,iBAAM;EACJ,QAAQ,EAAE,mBAAmB;;AAKjC,mBAAmB;EACjB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,OAAO,EAAE,GAAG;;AAGd,yBAAyB;EACvB,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,OAAO;;AAGjB,qBAAqB;EACnB,aAAa,EAAE,qCAAqC;EACpD,UAAU,EAAE,gCAAgC;EAU5C,OAAO,EAAE,eAAe;EATxB,gCAAW;IACT,aAAa,EAAE,0BAA0B;IACzC,UAAU,EAAE,gCAAgC;EAE9C,uCAAkB;IAChB,UAAU,EAAE,IAAI;EAQlB,yCAAoB;IAClB,mBAAmB,EAAE,OAAO;EAG9B,qCAAgB;IACd,MAAM,EAAE,eAAe;EAEzB,8BAAS;IACP,MAAM,EAAE,eAAe;EAGzB,yCAAoB;IAClB,gBAAgB,EAAE,qBAAqB;EAGzC,yCAAoB;IAClB,MAAM,EAAE,eAAe;EAMzB,8DAAwC;IACtC,OAAO,EAAE,IAAI;;AC9EjB;;GAEG;AAEH,iBAAkB;EAChB,SAAS,EAAE,KAAK;EAChB,UAAU,EAAE,IAAI;EAChB,gBAAgB,EAAE,4BAA4B;EAC9C,KAAK,EAAE,sBAAsB;EAC7B,UAAU,EAAE,iCAAiC;EAC7C,OAAO,EAAE,IAAI;EACb,aAAa,EAAE,IAAI;EACnB,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE,KAAK;EACf,OAAO,EAAE,KAAK;EACd,aAAa,EAAE,oBACjB;;AAEA;8BAC+B;EAC7B,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,CAAC;EACR,QAAQ,EAAE,MAAM;EAChB,UAAU,EAAE,UAAU;EACtB,SAAS,EAAE,IAAI;EACf,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM;EACnB,iBAAiB,EAAE,SAAS;EAC5B,mBAAmB,EAAE,MAAM;EAC3B,gBAAgB,EAAE,WAAW;EAC7B,UAAU,EAAE,CAAC;;AAGf;0CAC2C;EACzC,gBAAgB,EAAE,+PAA+P;EACjR,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,GAAE;;AAGb;gDACiD;EAC/C,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,oBAAoB;;AAG9B;;;;;qCAKsC;EACpC,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,CAAC;;AAGZ,8BAA+B;EAC7B,KAAK,EAAE,IAAI;;AAGb,kCAAmC;EACjC,MAAM,EAAE,OAAO;;AAGjB,6BAA8B;EAC5B,WAAW,EAAE,4BACf;;AAEA,4BAA6B;EAC3B,WAAW,EAAE,8BACf;;AAEA,+BAAgC;EAC9B,WAAW,EAAE,8BACf;;AAEA,+BAAgC;EAC9B,WAAW,EAAE,8BACf;;AAEA,4BAA6B;EAC3B,WAAW,EAAE,8BACf;;AAEA,uDAAwD;EACtD,gBAAgB,EAAE,+SAA+S;;AfjDnU,YAAY;EACV,UAAU,EAAE,MAAM;;AAGpB,gBAAgB;EACd,OAAO,EAAE,eAAe;;AAG1B,eAAgB;EACd,OAAO,EAAE,kBAAkB;EAC3B,UAAU,EAAE,gBAAgB;;AAE9B,uBAAwB;EACtB,OAAO,EAAE,CAAC;;AAIZ,UAAU;EACR,OAAO,EAAE,IAAI;;AAGb,kBAAI;EACF,WAAW,EAAE,YAAY;EACzB,YAAY,EAAE,YAAY;;AAI9B,mDAAoD;EAClD,aAAa,EAAE,iBAAiB;;AAGlC,iBAAkB;EAChB,UAAU,EAAE,UAAU;EACtB,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,SAAS;EACjB,KAAK,EAAE,CAAC;EACR,IAAI,EAAE,CAAC;EACP,aAAa,EAAE,iBAAiB;EAChC,OAAO,EAAE,YAAY;EACrB,gBAAgB,EAAE,yBAAwB;EAC1C,OAAO,EAAE,EAAE;EACX,mBAAmB,EAAE,IAAI;EACzB,gBAAgB,EAAE,IAAI;EACtB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,IAAI;EAEjB,MAAM,EAAE,eAAe;EAGrB,yCAA0C;IAF5C,6BAAW;MAGP,YAAY,EAAE,IAAI;EAEpB,4CAAc;IACZ,WAAW,EAAE,GAAG;;AAItB,yCAAyC;EACvC,iBAAiB;IACf,KAAK,EAAE,IAAI;AAGf,0CAA0C;EACxC,gDAA+C;IAC7C,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,+BAA+B;AAG1C,8LAAmM;EACjM,UAAU,EAAE,UAAU;EACtB,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,QAAQ;;AAEnB,UAAU;EACR,aAAa,EAAE,CAAC;EAChB,YAAY,EAAE,CAAC;;AAEjB,SAAS;EACP,KAAK,EAAE,IAAI;;AAGb,sBAAsB;EACpB,UAAU,EAAE,OAAO;EACnB,MAAM,EAAE,OAAO;;AAEjB,MAAO;EACL,OAAO,EAAE,IAAI;EACb,aAAa,EAAE,IAAI;EACnB,MAAM,EAAE,qBAAqB;EAC7B,aAAa,EAAE,GAAG;;AAEpB,aAAc;EACZ,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,OAAO;EACzB,YAAY,EAAE,OAAO;;AAGvB,oBAAoB;EAClB,UAAU,EAAE,gBAAgB",
+"mappings": "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",
"sources": ["../sass/app.scss","../sass/variables.scss","../sass/mixins.scss","../sass/partials/button.scss","../sass/partials/popovermenu.scss","../sass/partials/tabs.scss","../sass/partials/pwgen.scss","../sass/partials/icon-picker.scss","../sass/partials/share-incoming.scss","../sass/vaults.scss","../sass/credentials.scss","../sass/menu.scss","../sass/share_credential.scss","../sass/settings.scss","../sass/searchboxexpander.scss","../sass/toastify.scss"],
"names": [],
"file": "app.css"
diff --git a/css/bookmarklet.css b/css/bookmarklet.css
index 7d436955..5c7ddfde 100644
--- a/css/bookmarklet.css
+++ b/css/bookmarklet.css
@@ -42,7 +42,8 @@ header {
.tab_container {
padding-top: 10px;
- margin-bottom: 20px; }
+ margin-bottom: 60px;
+ overflow: scroll; }
.tab_container div {
margin-bottom: 5px;
overflow: hidden; }
diff --git a/css/bookmarklet.css.map b/css/bookmarklet.css.map
index c37211e7..a6f2af4b 100644
--- a/css/bookmarklet.css.map
+++ b/css/bookmarklet.css.map
@@ -1,6 +1,6 @@
{
"version": 3,
-"mappings": "AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAO;EACL,OAAO,EAAE,IAAI;;AAOf,gBAAiB;EACf,WAAW,EAAE,CAAC;;AAIhB,YAAa;EACX,WAAW,EAAE,CAAC;EACd,UAAU,EAAE,IAAI;;AAGlB,oBAAqB;EACnB,UAAU,EAAE,kBAAkB;;AAGhC,sBAAuB;EACrB,YAAY,EAAE,IAAI;;AAGpB,6BAA8B;EAC5B,YAAY,EAAE,CAAC;EACf,kEAAO;IACL,MAAM,EAAE,OAAO;;AAInB,cAAe;EACb,WAAW,EAAE,IAAI;EAOjB,aAAa,EAAE,IAAI;EALnB,kBAAI;IACF,aAAa,EAAE,GAAG;IAClB,QAAQ,EAAE,MAAM;;AAMpB,cAAe;EACb,UAAU,EAAE,IAAI;;AAGlB,aAAc;EACZ,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,KAAK;EACjB,aAAa,EAAE,GAAG;EAClB,SAAS,EAAE,IAAI;;AAGjB,0BAA2B;EACzB,OAAO,EAAE,IAAI;;AAGf,YAAa;EACX,OAAO,EAAE,IAAI",
+"mappings": "AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAO;EACL,OAAO,EAAE,IAAI;;AAOf,gBAAiB;EACf,WAAW,EAAE,CAAC;;AAIhB,YAAa;EACX,WAAW,EAAE,CAAC;EACd,UAAU,EAAE,IAAI;;AAGlB,oBAAqB;EACnB,UAAU,EAAE,kBAAkB;;AAGhC,sBAAuB;EACrB,YAAY,EAAE,IAAI;;AAGpB,6BAA8B;EAC5B,YAAY,EAAE,CAAC;EACf,kEAAO;IACL,MAAM,EAAE,OAAO;;AAInB,cAAe;EACb,WAAW,EAAE,IAAI;EACjB,aAAa,EAAE,IAAI;EACnB,QAAQ,EAAE,MAAM;EAEhB,kBAAI;IACF,aAAa,EAAE,GAAG;IAClB,QAAQ,EAAE,MAAM;;AAIpB,cAAe;EACb,UAAU,EAAE,IAAI;;AAGlB,aAAc;EACZ,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,KAAK;EACjB,aAAa,EAAE,GAAG;EAClB,SAAS,EAAE,IAAI;;AAGjB,0BAA2B;EACzB,OAAO,EAAE,IAAI;;AAGf,YAAa;EACX,OAAO,EAAE,IAAI",
"sources": ["../sass/bookmarklet.scss"],
"names": [],
"file": "bookmarklet.css"
diff --git a/js/settings-admin.js b/js/settings-admin.js
index c9d4f32b..a4f4410e 100644
--- a/js/settings-admin.js
+++ b/js/settings-admin.js
@@ -241,13 +241,13 @@ $(document).ready(function () {
$.get(OC.generateUrl('apps/passman/admin/delete-requests'), function (requests) {
var table = $('#requests-table tbody');
$.each(requests, function (k, request) {
- var accept = $('<span class="link">[Accept]&nbsp;</span>');
+ var accept = $('<span class="link accept">[Accept]&nbsp;</span>');
accept.click(function () {
var _self = this;
acceptDeleteRequest(_self, request);
});
- var ignore = $('<span class="link">[Ignore]</span>');
+ var ignore = $('<span class="link ignore">[Ignore]</span>');
ignore.click(function () {
var _self = this;
ignoreDeleteRequest(_self, request);
diff --git a/js/templates.js b/js/templates.js
index 3f72a9e8..92d25a4e 100644
--- a/js/templates.js
+++ b/js/templates.js
@@ -3,13 +3,13 @@ angular.module('templates-main', ['views/credential_revisions.html', 'views/edit
angular.module('views/credential_revisions.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/credential_revisions.html',
- '<div class="main_list" off-click-filter="\'.download-js-link, .sidebar-shown, #app-sidebar\'"><div id="passman-controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancelRevision()">{{active_vault.name}}</a></div><div class="crumb svg last"><a ng-if="storedCredential.credential_id">{{ \'showing.revisions\' | translate}} "{{revision.credential_data.label}}"</a></div></div></div></div><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="revision in revisions | orderBy:\'-created\'" ng-click="selectRevision(revision)" ng-class="{\'selected\': selectedRevision.revision_id == revision.revision_id}"><td><span class="icon"><i class="fa fa-lock"></i> </span><span class="label">{{ \'revision.of\' | translate}} {{revision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} ({{revision.credential_data.label}}) <span ng-if="revision.edited_by">{{ \'revision.edited.by\' | translate}} {{revision.edited_by}}</span></span></td></tr><tr ng-show="revisions.length == 0"><td>{{ \'no.revisions\' | translate}}</td></tr></table></div><div id="app-sidebar" class="detailsView scroll-container app_sidebar" off-click="closeSelected()" ng-show="selectedRevision"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span> <b ng-show="selectedRevision">{{ \'revision.of\' | translate}} {{selectedRevision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</b><div class="credential-data"><div class="row" ng-show="selectedRevision.credential_data.label"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.label"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.username"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.password" secret="\'true\'"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="selectedRevision.credential_data.otp.secret"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.email"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.url"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.description_html"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedRevision.credential_data.files" class="link" ng-click="downloadFile(selectedRevision.credential_data, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in selectedRevision.credential_data.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="selectedRevision.credential_data.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in selectedRevision.credential_data.tags">{{tag.text}}</span></div></div></div></div><div ng-show="selectedRevision"><button class="button" ng-click="restoreRevision(selectedRevision)"><span class="fa fa-edit"></span> {{ \'restore.revision\' | translate}}</button> <button class="button" ng-click="deleteRevision(selectedRevision)"><span class="fa fa-trash"></span> {{ \'delete.revision\' | translate}}</button></div></div>');
+ '<div class="main_list credential-revisions" off-click-filter="\'.download-js-link, .sidebar-shown, #app-sidebar\'"><div id="passman-controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg crumbhome"><a ng-click="logout()" class="icon-home">Home</a> <span style="display: none;"></span></div><div class="crumb svg"><a ng-click="cancelRevision()">{{active_vault.name}}</a></div><div class="crumb svg last"><a ng-if="storedCredential.credential_id">{{ \'showing.revisions\' | translate}} "{{storedCredential.label}}"</a></div></div></div></div><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="revision in revisions | orderBy:\'-created\'" ng-click="selectRevision(revision)" ng-class="{\'selected\': selectedRevision.revision_id == revision.revision_id}"><td><span class="icon"><i class="fa fa-lock"></i> </span><span class="label">{{ \'revision.of\' | translate}} {{revision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} ({{revision.credential_data.label}}) <span ng-if="revision.edited_by">{{ \'revision.edited.by\' | translate}} {{revision.edited_by}}</span></span></td></tr><tr ng-show="revisions.length == 0"><td>{{ \'no.revisions\' | translate}}</td></tr></table></div><div id="app-sidebar" class="detailsView scroll-container app_sidebar" off-click="closeSelected()" ng-show="selectedRevision"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span> <b ng-show="selectedRevision">{{ \'revision.of\' | translate}} {{selectedRevision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</b><div class="credential-data"><div class="row" ng-show="selectedRevision.credential_data.label"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.label"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.username"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.password" secret="\'true\'"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="selectedRevision.credential_data.otp.secret"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.email"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.url"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.description_html"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedRevision.credential_data.files" class="link" ng-click="downloadFile(selectedRevision.credential_data, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in selectedRevision.credential_data.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="selectedRevision.credential_data.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in selectedRevision.credential_data.tags">{{tag.text}}</span></div></div></div></div><div ng-show="selectedRevision"><button class="button" ng-click="restoreRevision(selectedRevision)"><span class="fa fa-edit"></span> {{ \'restore.revision\' | translate}}</button> <button class="button" ng-click="deleteRevision(selectedRevision)"><span class="fa fa-trash"></span> {{ \'delete.revision\' | translate}}</button></div></div>');
}]);
angular.module('views/edit_credential.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/edit_credential.html',
- '<div id="passman-controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{ active_vault.name }}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'edit.credential\' | translate }} "{{ storedCredential.label }}"</a> <a ng-if="!storedCredential.credential_id">{{ \'create.credential\' | translate }}</a></div></div></div></div><div class="app-sidebar-tabs"><nav class="app-sidebar-tabs__nav"><ul><li ng-repeat="tab in tabs track by $index" class="app-sidebar-tabs__tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)">{{ tab.title }}</li></ul></nav><div class="tab_container edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div><button ng-click="saveCredential()" ng-disabled="saving"><i class="fa fa-spinner fa-spin" ng-show="saving"></i> {{ \'save\' | translate }}</button> <button ng-click="cancel()">{{ \'cancel\' | translate }}</button></div></div>');
+ '<div id="passman-controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg crumbhome"><a ng-click="logout()" class="icon-home">Home</a> <span style="display: none;"></span></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{ active_vault.name }}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'edit.credential\' | translate }} "{{ storedCredential.label }}"</a> <a ng-if="!storedCredential.credential_id">{{ \'create.credential\' | translate }}</a></div></div></div></div><div class="app-sidebar-tabs"><nav class="app-sidebar-tabs__nav"><ul><li ng-repeat="tab in tabs track by $index" class="app-sidebar-tabs__tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)">{{ tab.title }}</li></ul></nav><div class="tab_container edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div><button ng-click="saveCredential()" ng-disabled="saving"><i class="fa fa-spinner fa-spin" ng-show="saving"></i> {{ \'save\' | translate }}</button> <button ng-click="cancel()">{{ \'cancel\' | translate }}</button></div></div>');
}]);
angular.module('views/partials/credential_template.html', []).run(['$templateCache', function($templateCache) {
@@ -21,7 +21,7 @@ angular.module('views/partials/credential_template.html', []).run(['$templateCac
angular.module('views/partials/forms/edit_credential/basics.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/edit_credential/basics.html',
- '<div class="row"><div class="col-xs-12 col-md-6"><label>{{ \'label\' | translate}}</label><div class="icon-label"><div class="icon-picker" icon-picker="storedCredential"></div><input type="text" class="form-control" ng-model="storedCredential.label"></div><label>{{ \'username\' | translate}}</label><div><input type="text" ng-model="storedCredential.username"></div><label>{{ \'email\' | translate}}</label><div><input type="text" ng-model="storedCredential.email"></div><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><div><label>{{ \'password.r\' | translate}}</label> <input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'url\' | translate}}</label><div><input type="text" ng-model="storedCredential.url"></div></div><div class="col-xs-12 col-md-6"><label>{{ \'notes\' | translate}}</label><div><textarea class="credential_textarea" ng-model="storedCredential.description"></textarea></div><label>{{ \'add.tag\' | translate}}</label><div class="tags_input"><tags-input ng-model="storedCredential.tags" replace-spaces-with-dashes="false"><auto-complete source="getTags($query)" min-length="0"></auto-complete></tags-input></div></div><div class="col-xs-12 col-md-6"><button class="compromised-button" ng-click="compromise()">{{ \'compromised.label\' | translate}}</button><div class="compromised-details" ng-show="storedCredential.compromised"><div class="icon-error-color icon"></div><div class="text">{{ \'compromised.warning\' | translate }}</div></div></div></div>');
+ '<div class="row"><div class="col-xs-12 col-md-6"><div class="setting-group"><label>{{ \'label\' | translate}}</label><div class="icon-label"><div class="icon-picker" icon-picker="storedCredential"></div><input type="text" class="form-control" ng-model="storedCredential.label"></div></div><div class="setting-group"><label>{{ \'username\' | translate}}</label> <input type="text" ng-model="storedCredential.username"></div><div class="setting-group"><label>{{ \'email\' | translate}}</label> <input type="text" ng-model="storedCredential.email"></div><div class="setting-group"><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div></div><div class="setting-group"><label>{{ \'password.r\' | translate}}</label> <input type="password" ng-model="storedCredential.password_repeat"></div><div class="setting-group"><label>{{ \'url\' | translate}}</label> <input type="text" ng-model="storedCredential.url"></div></div><div class="col-xs-12 col-md-6"><div class="setting-group"><label>{{ \'notes\' | translate}}</label> <textarea class="credential_textarea" ng-model="storedCredential.description"></textarea></div><label>{{ \'add.tag\' | translate}}</label><div class="tags_input"><tags-input ng-model="storedCredential.tags" replace-spaces-with-dashes="false"><auto-complete source="getTags($query)" min-length="0"></auto-complete></tags-input></div></div><div class="col-xs-12 col-md-6"><button class="btn-danger compromised-button" ng-click="compromise()">{{ \'compromised.label\' | translate}}</button><div class="compromised-details" ng-show="storedCredential.compromised"><div class="icon-error-color icon"></div><div class="text">{{ \'compromised.warning\' | translate }}</div></div></div></div>');
}]);
angular.module('views/partials/forms/edit_credential/custom_fields.html', []).run(['$templateCache', function($templateCache) {
@@ -33,7 +33,7 @@ angular.module('views/partials/forms/edit_credential/custom_fields.html', []).ru
angular.module('views/partials/forms/edit_credential/files.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/edit_credential/files.html',
- '<div class="row file_tab"><div class="col-xs-12 col-md-6"><input class="inputfile" id="file" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"> <label for="file"><i class="fa fa-upload" aria-hidden="true"></i> {{\'select.file\' | translate}}</label> <span ng-if="fileprogress.file_percent > 0"><div progress-bar="fileprogress.file_percent"></div></span></div></div><div class="row files" ng-if="storedCredential.files.length > 0"><div class="col-xs-12 table"><table><thead use-theme><tr><th class="field_label">{{ \'file.name\' | translate }}</th><th class="field_value">{{ \'upload.date\' | translate}}</th><th class="field_secret">{{ \'size\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tr ng-repeat="file in storedCredential.files"><td><a href="#" editable-text="file.filename">{{ file.filename || "empty" }}</a></td><td>{{file.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td>{{file.size | bytes}}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteFile(file)"></i></td></tr></table></div></div>');
+ '<div class="row file_tab"><div class="col-xs-12 col-md-6"><input class="inputfile" id="file" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"> <label for="file"><i class="fa fa-upload" aria-hidden="true"></i> {{\'select.file\' | translate}}</label> <span ng-if="fileprogress.file_percent > 0"><div progress-bar="fileprogress.file_percent"></div></span></div></div><div class="row files" ng-if="storedCredential.files.length > 0"><div class="col-xs-12 table"><table><thead><tr><th class="field_label">{{ \'file.name\' | translate }}</th><th class="field_value">{{ \'upload.date\' | translate}}</th><th class="field_secret">{{ \'size\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tr ng-repeat="file in storedCredential.files"><td><a href="#" editable-text="file.filename">{{ file.filename || "empty" }}</a></td><td>{{file.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td>{{file.size | bytes}}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteFile(file)"></i></td></tr></table></div></div>');
}]);
angular.module('views/partials/forms/edit_credential/otp.html', []).run(['$templateCache', function($templateCache) {
@@ -45,19 +45,19 @@ angular.module('views/partials/forms/edit_credential/otp.html', []).run(['$templ
angular.module('views/partials/forms/edit_credential/password.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/edit_credential/password.html',
- '<div class="row"><div class="col-xs-12 col-md-5 col-lg-5"><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><label>{{ \'password.r\' | translate}}</label><div><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'expire.date\' | translate}}</label><div><span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time == 0" close-on-select="false">{{\'no.expire.date\' | translate}}</span> <span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time != 0" close-on-select="false">{{ storedCredential.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></div><label>{{ \'renew.interval\' | translate}}</label><div><input type="number" ng-model="renewIntervalValue" min="0" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"> <select ng-model="renewIntervalModifier" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><option value="0">{{ \'disabled\' | translate}}</option><option value="86400">{{ \'days\' | translate }}</option><option value="604800">{{ \'weeks\' | translate}}</option><option value="2592000">{{ \'months\' | translate}}</option><option value="31622400">{{ \'years\' | translate}}</option></select></div></div><div class="col-xs-12 col-md-7 col-lg-7"><b>{{ \'generation.settings\' | translate}}</b><div class="row"><div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="pwSettings.length" min="1"></label> <label><span class="label">{{\'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="pwSettings.minimumDigitCount" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label> <label><input ng-model="pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label> <label><input ng-model="pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label> <label><input type="checkbox" id="special" ng-model="pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label> <label><input type="checkbox" id="ambig" ng-model="pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label> <label><input type="checkbox" ng-model="pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div></div></div></div>');
+ '<div class="row"><div class="col-xs-12 col-md-5 col-lg-5"><div class="setting-group"><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div></div><div class="setting-group"><label>{{ \'password.r\' | translate}}</label> <input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'expire.date\' | translate}}</label><div><span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time == 0" close-on-select="false">{{\'no.expire.date\' | translate}}</span> <span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time != 0" close-on-select="false">{{ storedCredential.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></div><label>{{ \'renew.interval\' | translate}}</label><div><input type="number" ng-model="renewIntervalValue" min="0" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"> <select ng-model="renewIntervalModifier" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><option value="0">{{ \'disabled\' | translate}}</option><option value="86400">{{ \'days\' | translate }}</option><option value="604800">{{ \'weeks\' | translate}}</option><option value="2592000">{{ \'months\' | translate}}</option><option value="31622400">{{ \'years\' | translate}}</option></select></div></div><div class="col-xs-12 col-md-7 col-lg-7"><b>{{ \'generation.settings\' | translate}}</b><div class="row"><div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="pwSettings.length" min="1"></label><br><label><span class="label">{{\'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="pwSettings.minimumDigitCount" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6 display-grid"><input id="pwSettings.useUppercase" class="checkbox" type="checkbox" ng-model="pwSettings.useUppercase"> <label for="pwSettings.useUppercase">{{\'password.generation.uppercase\' | translate}}</label> <input id="pwSettings.useLowercase" class="checkbox" type="checkbox" ng-model="pwSettings.useLowercase"> <label for="pwSettings.useLowercase">{{\'password.generation.lowercase\' | translate}}</label> <input id="pwSettings.useDigits" class="checkbox" type="checkbox" ng-model="pwSettings.useDigits"> <label for="pwSettings.useDigits">{{\'password.generation.digits\' | translate}}</label> <input id="pwSettings.useSpecialChars" class="checkbox" type="checkbox" ng-model="pwSettings.useSpecialChars"> <label for="pwSettings.useSpecialChars">{{\'password.generation.special\' | translate}}</label> <input id="pwSettings.avoidAmbiguousCharacters" class="checkbox" type="checkbox" ng-model="pwSettings.avoidAmbiguousCharacters"> <label for="pwSettings.avoidAmbiguousCharacters">{{\'password.generation.ambiguous\' | translate}}</label> <input id="pwSettings.requireEveryCharType" class="checkbox" type="checkbox" ng-model="pwSettings.requireEveryCharType"> <label for="pwSettings.requireEveryCharType">{{\'password.generation.require_same\' | translate}}</label></div></div></div></div></div>');
}]);
angular.module('views/partials/forms/settings/export.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/settings/export.html',
- '<div ng-controller="ExportCtrl"><div class="row"><div class="col-xs-6"><label>{{ \'export.type\' | translate}} <select ng-init="raw" ng-model="raw" ng-change="setExporter(raw)"><option ng-repeat="exporter in available_exporters" value="{{exporter}}">{{exporter.name}}</option></select></label><div><b>{{selectedExporter.description}}</b></div><div ng-show="selectedExporter" class="nopadding"><label>{{ \'export.confirm.text\' | translate }}</label> <input type="password" ng-model="confirm_key"><br><div class="alert alert-warning" ng-show="error">{{error}}</div></div><div class="clearfix"><button class="button" ng-click="startExport()" ng-if="selectedExporter">{{ \'export\' | translate}}</button></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div>');
+ '<div ng-controller="ExportCtrl"><div class="row"><div class="col-xs-6"><label>{{ \'export.type\' | translate}} <select ng-init="raw" ng-model="raw" ng-change="setExporter(raw)"><option ng-repeat="exporter in available_exporters" value="{{exporter}}">{{exporter.name}}</option></select></label><div><b>{{selectedExporter.description}}</b></div><div ng-show="selectedExporter" class="nopadding setting-group"><label>{{ \'export.confirm.text\' | translate }}</label> <input type="password" ng-model="confirm_key"><br><div class="alert alert-warning" ng-show="error">{{error}}</div></div><div class="clearfix"><button class="button" ng-click="startExport()" ng-if="selectedExporter">{{ \'export\' | translate}}</button></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div>');
}]);
angular.module('views/partials/forms/settings/general_settings.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/settings/general_settings.html',
- '<div class="row"><div class="col-xs-12 col-md-6"><h3>{{ \'rename.vault\' | translate}}</h3><label>{{ \'rename.vault.name\' | translate}}</label> <input type="text" ng-model="$parent.new_vault_name"> <button ng-click="saveVaultSettings()">{{ \'change\' | translate}}</button><h3>{{ \'change.vault.key\' | translate}}</h3><label>{{ \'old.vault.password\' | translate}}</label> <input type="password" ng-model="oldVaultPass"> <label>{{ \'new.vault.password\' | translate}}</label> <input type="password" ng-model="newVaultPass"><ng-password-meter password="newVaultPass" score="vault_key_score"></ng-password-meter><label>{{ \'new.vault.pw.r\' | translate}}</label> <input type="password" ng-model="newVaultPass2"><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li>{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><button ng-click="changeVaultPassword(oldVaultPass,newVaultPass,newVaultPass2)" ng-disabled="vault_key_score.score < minimal_value_key_strength">{{ \'change\' | translate}}</button><div ng-show="change_pw.total > 0">{{\'warning.leave\' | translate}}<br>{{ \'processing\' | translate}} {{cur_state.process}}<div progress-bar="cur_state.calculated" index="cur_state.current" total="cur_state.total"></div>{{ \'total.progress\' | translate}}<div progress-bar="change_pw.percent" index="change_pw.done" total="change_pw.total"></div></div><h3>{{\'delete.vault\' | translate}}</h3><b>{{ \'vault.remove.notice\' | translate }}</b> <label>{{\'vault.password\' | translate}}</label> <input type="password" ng-model="$parent.delete_vault_password"> <input type="checkbox" ng-model="$parent.confirm_vault_delete"> {{\'delete.vault.checkbox\' | translate}}<br><button class="btn btn-danger" ng-click="delete_vault()">{{\'delete.vault.confirm\' | translate}}</button><div ng-show="remove_pw">{{\'deleting.pw\' | translate:translationData}}<div progress-bar="remove_pw.percent" index="remove_pw.done" total="remove_pw.total"></div></div></div><div class="col-xs-12 col-md-6"><h3>{{ \'about.passman\' | translate}}</h3><p>{{ \'version\' | translate}}: <b>{{passman_version}}</b><br><br><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6YS8F97PETVU2" target="_blank" class="link">{{ \'donate.support\' | translate}}</a><br></p><h3>{{ \'bookmarklet\' | translate}}</h3><div><p>{{ \'bookmarklet.info1\' | translate}}<br>{{ \'bookmarklet.info2\' | translate}}<br></p></div><div><p ng-bind-html="bookmarklet" style="margin-top: 5px"></p></div></div></div>');
+ '<div class="row"><div class="col-xs-12 col-md-6"><div class="setting-group margin-bottom-25"><h3>{{ \'rename.vault\' | translate}}</h3><label>{{ \'rename.vault.name\' | translate}}</label> <input type="text" ng-model="$parent.new_vault_name"> <button ng-click="saveVaultSettings()">{{ \'change\' | translate}}</button></div><div class="setting-group margin-bottom-25"><h3>{{ \'change.vault.key\' | translate}}</h3><label>{{ \'old.vault.password\' | translate}}</label> <input type="password" ng-model="oldVaultPass"> <label>{{ \'new.vault.password\' | translate}}</label> <input type="password" ng-model="newVaultPass"><ng-password-meter password="newVaultPass" score="vault_key_score"></ng-password-meter><label>{{ \'new.vault.pw.r\' | translate}}</label> <input type="password" ng-model="newVaultPass2"><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li>{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><button ng-click="changeVaultPassword(oldVaultPass,newVaultPass,newVaultPass2)" ng-disabled="vault_key_score.score < minimal_value_key_strength">{{ \'change\' | translate}}</button><div ng-show="change_pw.total > 0">{{\'warning.leave\' | translate}}<br>{{ \'processing\' | translate}} {{cur_state.process}}<div progress-bar="cur_state.calculated" index="cur_state.current" total="cur_state.total"></div>{{ \'total.progress\' | translate}}<div progress-bar="change_pw.percent" index="change_pw.done" total="change_pw.total"></div></div></div><div class="setting-group"><h3>{{\'delete.vault\' | translate}}</h3><b>{{ \'vault.remove.notice\' | translate }}</b> <label>{{\'vault.password\' | translate}}</label> <input type="password" ng-model="$parent.delete_vault_password"> <input id="confirmVaultDelete" class="checkbox" type="checkbox" ng-model="$parent.confirm_vault_delete"> <label for="confirmVaultDelete">{{\'delete.vault.checkbox\' | translate}}</label> <button class="btn btn-danger" ng-click="delete_vault()">{{\'delete.vault.confirm\' | translate}}</button><div ng-show="remove_pw">{{\'deleting.pw\' | translate:translationData}}<div progress-bar="remove_pw.percent" index="remove_pw.done" total="remove_pw.total"></div></div></div></div><div class="col-xs-12 col-md-6"><h3>{{ \'about.passman\' | translate}}</h3><p>{{ \'version\' | translate}}: <b>{{passman_version}}</b><br><br><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6YS8F97PETVU2" target="_blank" class="link">{{ \'donate.support\' | translate}}</a><br></p><h3>{{ \'bookmarklet\' | translate}}</h3><div><p>{{ \'bookmarklet.info1\' | translate}}<br>{{ \'bookmarklet.info2\' | translate}}<br></p></div><div><p ng-bind-html="bookmarklet" style="margin-top: 5px"></p></div></div></div>');
}]);
angular.module('views/partials/forms/settings/generic_csv_import.html', []).run(['$templateCache', function($templateCache) {
@@ -75,7 +75,7 @@ angular.module('views/partials/forms/settings/import.html', []).run(['$templateC
angular.module('views/partials/forms/settings/password_settings.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/settings/password_settings.html',
- '<div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4 password-settings-padding-left-fix"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.length" min="1"></label> <label><span class="label">{{ \'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.minimumDigitCount" min="0"></label> <label><span class="label">Generate password on creation</span><br><input type="checkbox" ng-model="vault_settings.pwSettings.generateOnCreate" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="vault_settings.pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label> <label><input ng-model="vault_settings.pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label> <label><input ng-model="vault_settings.pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label> <label><input type="checkbox" id="special" ng-model="vault_settings.pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label> <label><input type="checkbox" id="ambig" ng-model="vault_settings.pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label> <label><input type="checkbox" ng-model="vault_settings.pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div><div class="row"><div class="col-xs-12"><button class="button" ng-click="saveVaultSettings()">{{ \'save\' | translate}}</button></div></div>');
+ '<div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4 password-settings-padding-left-fix"><div class="setting-group margin-bottom-10"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.length" min="1"></label></div><div class="setting-group margin-bottom-10"><label><span class="label">{{ \'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.minimumDigitCount" min="0"></label></div><input id="pwSettings.generateOnCreate" class="checkbox" type="checkbox" ng-model="vault_settings.pwSettings.generateOnCreate"> <label for="pwSettings.generateOnCreate">{{\'password.generation.on_create\' | translate}}</label><br></div><div class="col-xs-12 col-sm-6 col-lg-6 display-grid"><input id="pwSettings.useUppercase" class="checkbox" type="checkbox" ng-model="vault_settings.pwSettings.useUppercase"> <label for="pwSettings.useUppercase">{{\'password.generation.uppercase\' | translate}}</label> <input id="pwSettings.useLowercase" class="checkbox" type="checkbox" ng-model="vault_settings.pwSettings.useLowercase"> <label for="pwSettings.useLowercase">{{\'password.generation.lowercase\' | translate}}</label> <input id="pwSettings.useDigits" class="checkbox" type="checkbox" ng-model="vault_settings.pwSettings.useDigits"> <label for="pwSettings.useDigits">{{\'password.generation.digits\' | translate}}</label> <input id="pwSettings.useSpecialChars" class="checkbox" type="checkbox" ng-model="vault_settings.pwSettings.useSpecialChars"> <label for="pwSettings.useSpecialChars">{{\'password.generation.special\' | translate}}</label> <input id="pwSettings.avoidAmbiguousCharacters" class="checkbox" type="checkbox" ng-model="vault_settings.pwSettings.avoidAmbiguousCharacters"> <label for="pwSettings.avoidAmbiguousCharacters">{{\'password.generation.ambiguous\' | translate}}</label> <input id="pwSettings.requireEveryCharType" class="checkbox" type="checkbox" ng-model="vault_settings.pwSettings.requireEveryCharType"> <label for="pwSettings.requireEveryCharType">{{\'password.generation.require_same\' | translate}}</label></div></div><div class="row"><div class="col-xs-12"><button class="button" ng-click="saveVaultSettings()">{{ \'save\' | translate}}</button></div></div>');
}]);
angular.module('views/partials/forms/settings/sharing.html', []).run(['$templateCache', function($templateCache) {
@@ -101,7 +101,7 @@ angular.module('views/partials/forms/share_credential/basics.html', []).run(['$t
angular.module('views/partials/forms/share_credential/link_sharing.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/partials/forms/share_credential/link_sharing.html',
- '<div class="row"><div class="col-xs-12 col-md-6"><label><input type="checkbox" ng-model="share_settings.linkSharing.enabled"> {{ \'enable.link.sharing\' | translate}}.</label><br><div class="pull-left col-xs-6 nopadding"><span credential-field value="share_link" secret="false" use-input="true" input-placeholder="\'click.share\' | translate"></span></div><div ng-show="share_settings.linkSharing.enabled" class="clearfix">{{ \'share.until.date\' | translate}} <span datetime-picker ng-model="share_settings.linkSharing.settings.expire_time" class="link" future-only close-on-select="false" timestamp="true">{{ share_settings.linkSharing.settings.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\' }}</span></div><div ng-show="share_settings.linkSharing.enabled">{{ \'expire.views\' | translate}}<br><input type="number" ng-model="share_settings.linkSharing.settings.expire_views"></div><div ng-if="share_settings.linkSharing.enabled"><table><tr><td><input type="checkbox" ng-click="setPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)"></td><td>{{ \'show.files\' | translate}}</td></tr></table></div></div></div>');
+ '<div class="row"><div class="col-xs-12 col-md-6"><input id="linkSharing.enabled" class="checkbox" type="checkbox" ng-model="share_settings.linkSharing.enabled"> <label for="linkSharing.enabled">{{\'enable.link.sharing\' | translate}}</label><br><div class="pull-left col-xs-6 nopadding"><span credential-field value="share_link" secret="false" use-input="true" input-placeholder="\'click.share\' | translate"></span></div><div ng-show="share_settings.linkSharing.enabled" class="clearfix">{{ \'share.until.date\' | translate}} <span datetime-picker ng-model="share_settings.linkSharing.settings.expire_time" class="link" future-only close-on-select="false" timestamp="true">{{ share_settings.linkSharing.settings.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\' }}</span></div><div ng-show="share_settings.linkSharing.enabled">{{ \'expire.views\' | translate}}<br><input type="number" ng-model="share_settings.linkSharing.settings.expire_views"></div><div ng-if="share_settings.linkSharing.enabled"><table><tr><td><input type="checkbox" ng-click="setPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)"></td><td>{{ \'show.files\' | translate}}</td></tr></table></div></div></div>');
}]);
angular.module('views/partials/icon-picker.html', []).run(['$templateCache', function($templateCache) {
@@ -119,19 +119,19 @@ angular.module('views/partials/password-meter.html', []).run(['$templateCache',
angular.module('views/settings.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/settings.html',
- '<div id="passman-controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancel()">{{ active_vault.name }}</a></div><div class="crumb svg last"><a>{{ \'settings\' | translate }}</a></div></div></div></div><div class="app-sidebar-tabs"><nav class="app-sidebar-tabs__nav"><ul><li ng-repeat="tab in tabs track by $index" class="app-sidebar-tabs__tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)">{{ tab.title | translate }}</li></ul></nav><div class="tab_container settings edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div></div></div>');
+ '<div id="passman-controls"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg crumbhome"><a ng-click="logout()" class="icon-home">Home</a> <span style="display: none;"></span></div><div class="crumb svg"><a ng-click="cancel()">{{ active_vault.name }}</a></div><div class="crumb svg last"><a>{{ \'settings\' | translate }}</a></div></div></div></div><div class="app-sidebar-tabs"><nav class="app-sidebar-tabs__nav"><ul><li ng-repeat="tab in tabs track by $index" class="app-sidebar-tabs__tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)">{{ tab.title | translate }}</li></ul></nav><div class="tab_container settings edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div></div></div>');
}]);
angular.module('views/share_credential.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/share_credential.html',
- '<div id="passman-controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{ active_vault.name }}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'share.credential\' | translate }} {{ storedCredential.label }}</a></div></div></div></div><div class="app-sidebar-tabs"><nav class="app-sidebar-tabs__nav"><ul><li ng-repeat="tab in tabs track by $index" class="app-sidebar-tabs__tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)">{{ tab.title | translate }}</li></ul></nav><div class="tab_container share_credential" ng-show="currentTab"><div ng-include="currentTab.url"></div><button ng-click="applyShare()" ng-disabled="share_settings.linkSharing.enabled === false && share_settings.credentialSharedWithUserAndGroup.length === 0">{{ \'share\' | translate }}</button> <button ng-click="cancel()">{{ \'cancel\' | translate }}</button> <button class="btn btn-danger" ng-disabled="!storedCredential.shared_key" ng-click="unshareCredential(storedCredential)">{{ \'unshare\' | translate }}</button></div></div>');
+ '<div id="passman-controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg crumbhome"><a ng-click="logout()" class="icon-home">Home</a> <span style="display: none;"></span></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{ active_vault.name }}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'share.credential\' | translate }} {{ storedCredential.label }}</a></div></div></div></div><div class="app-sidebar-tabs"><nav class="app-sidebar-tabs__nav"><ul><li ng-repeat="tab in tabs track by $index" class="app-sidebar-tabs__tab" ng-class="isActiveTab(tab)? \'active\' : \'inactive\'" ng-click="onClickTab(tab)">{{ tab.title | translate }}</li></ul></nav><div class="tab_container share_credential" ng-show="currentTab"><div ng-include="currentTab.url"></div><button ng-click="applyShare()" ng-disabled="share_settings.linkSharing.enabled === false && share_settings.credentialSharedWithUserAndGroup.length === 0">{{ \'share\' | translate }}</button> <button ng-click="cancel()">{{ \'cancel\' | translate }}</button> <button class="btn btn-danger" ng-disabled="!storedCredential.shared_key" ng-click="unshareCredential(storedCredential)">{{ \'unshare\' | translate }}</button></div></div>');
}]);
angular.module('views/show_vault.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/show_vault.html',
- '<div class="main_list" off-click-filter="\'.download-js-link, .sidebar-shown, #app-sidebar\'"><div id="passman-controls" ng-class="{ \'sidebar-shown\': selectedCredential }"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" ng-click="clearState()"><a>{{active_vault.name}}</a></div></div><div class="addCredential" ng-hide="delete_time>0"><button ng-click="addCredential()"><i class="fa fa-plus"></i></button></div><div class="addCredential" ng-hide="delete_time>0"><button ng-click="refresh()"><i class="fa fa-refresh"></i></button></div></div><div class="title" credential-counter="filtered_credentials" vault="active_vault" delete-time="delete_time" filters="filterOptions"></div><div class="searchboxContainer" ng-init="filterOptionShown = false;" off-click="filterOptionShown = false;"><input type="text" ng-model="filterOptions.filterText" class="searchbox" id="searchBox" placeholder="{{\'search.credential\' | translate}}" select-on-click clear-btn ng-click="filterOptionShown = true;"><div class="searchOptions" ng-show="filterOptionShown"><input type="checkbox" ng-model="filterOptions.useRegex"> {{ \'use.regex\' | translate }}</div></div><div class="viewModes"><div class="view-mode" ng-class="{\'active\': view_mode === \'list\' }" ng-click="switchViewMode(\'list\')"><i class="fa fa-list"></i></div><div class="view-mode" ng-class="{\'active\': view_mode === \'grid\' }" ng-click="switchViewMode(\'grid\')"><i class="fa fa-th-large"></i></div></div></div><div class="loaderContainer" ng-if="show_spinner"><div class="loader" use-theme type="\'border-bottom-color\'"></div></div><div ng-init="menuOpen = false;"><table class="credential-table" ng-if="view_mode === \'list\'"><tr ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td ng-class="{\'compromised\': credential.compromised }"><span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span> </span><span class="icon" ng-if="credential.url || (credential.icon && credential.icon.type !== false)"><credential-icon credential="credential"></credential-icon></span><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-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i> </span><a class="label">{{ ::credential.label}}</a> <span ng-if="credential.compromised" class="compromised-list"><i class="icon-error icon"></i> <span class="text">{{ \'compromised.warning.list\' | translate}}</span></span></td></tr></table><ul class="grid-view" ng-if="view_mode === \'grid\'"><li class="credential" ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" use-theme type="\'border-color\'"><div class="credential_content"><div><span class="icon" ng-if="credential.url"><credential-icon credential="credential"></credential-icon></span><span class="icon" ng-if="!credential.url"><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-square" ng-if="credential.shared_key"></i></span><div class="label">{{ ::credential.label}}</div></div><div class="tags"><div class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</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><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><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><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><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><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><div class="nopasswords" ng-if="no_credentials_label.expired" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.noexpired\' | translate}}</div></div><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)"><credential-icon credential="selectedCredential"></credential-icon></span><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></span><h2 class="sidebar-label">{{selectedCredential.label}}</h2></div><div credential-template="selectedCredential"></div><div ng-show="selectedCredential"><div><button class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-edit"></span> {{ \'edit\' | translate}}</button> <button class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-trash"></span> {{ \'delete\' | translate}}</button> <button class="button" ng-click="shareCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&\n' +
+ '<div class="main_list" off-click-filter="\'.download-js-link, .sidebar-shown, #app-sidebar\'"><div id="passman-controls" ng-class="{ \'sidebar-shown\': selectedCredential }"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg crumbhome"><a ng-click="logout()" class="icon-home">Home</a> <span style="display: none;"></span></div><div class="crumb svg" ng-click="clearState()"><a>{{active_vault.name}}</a></div></div><div class="addCredential" ng-hide="delete_time>0"><button ng-click="addCredential()"><i class="fa fa-plus"></i></button></div><div class="addCredential" ng-hide="delete_time>0"><button ng-click="refresh()"><i class="fa fa-refresh"></i></button></div></div><div class="title" credential-counter="filtered_credentials" vault="active_vault" delete-time="delete_time" filters="filterOptions"></div><div class="searchboxContainer" ng-init="filterOptionShown = false;" off-click="filterOptionShown = false;"><input type="text" ng-model="filterOptions.filterText" class="searchbox" id="searchBox" placeholder="{{\'search.credential\' | translate}}" select-on-click clear-btn ng-click="filterOptionShown = true;"><div class="searchOptions" ng-show="filterOptionShown"><input id="filterOptions.useRegex" class="checkbox" type="checkbox" ng-model="filterOptions.useRegex"> <label for="filterOptions.useRegex">{{\'use.regex\' | translate}}</label></div></div><div class="viewModes"><div class="view-mode" ng-class="{\'active\': view_mode === \'list\' }" ng-click="switchViewMode(\'list\')"><i class="fa fa-list"></i></div><div class="view-mode" ng-class="{\'active\': view_mode === \'grid\' }" ng-click="switchViewMode(\'grid\')"><i class="fa fa-th-large"></i></div></div></div><div class="loaderContainer" ng-if="show_spinner"><div class="loader" use-theme type="\'border-bottom-color\'"></div></div><div class="credential-table-wrapper" ng-init="menuOpen = false;"><table class="credential-table" ng-if="view_mode === \'list\'"><tr ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td ng-class="{\'compromised\': credential.compromised }"><span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span> </span><span class="icon" ng-if="credential.url || (credential.icon && credential.icon.type !== false)"><credential-icon credential="credential"></credential-icon></span><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-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i> </span><a class="label">{{ ::credential.label}}</a> <span ng-if="credential.compromised" class="compromised-list"><i class="icon-error icon"></i> <span class="text">{{ \'compromised.warning.list\' | translate}}</span></span></td></tr></table><ul class="grid-view" ng-if="view_mode === \'grid\'"><li class="credential" ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)"><div class="credential_content"><div><span class="icon" ng-if="credential.url"><credential-icon credential="credential"></credential-icon></span><span class="icon" ng-if="!credential.url"><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-square" ng-if="credential.shared_key"></i></span><div class="label">{{ ::credential.label}}</div></div><div class="tags"><div class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</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><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><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><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><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><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><div class="nopasswords" ng-if="no_credentials_label.expired" ng-hide="getListSizes().listsize_wout_deleted>0"><div>{{ \'vault.hint.list.noexpired\' | translate}}</div></div><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)"><credential-icon credential="selectedCredential"></credential-icon></span><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></span><h2 class="sidebar-label">{{selectedCredential.label}}</h2></div><div credential-template="selectedCredential"></div><div ng-show="selectedCredential"><div><button class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-edit"></span> {{ \'edit\' | translate}}</button> <button class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-trash"></span> {{ \'delete\' | translate}}</button> <button class="button" ng-click="shareCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&\n' +
' (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}}</button> <button class="button" ng-click="getRevisions(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"><span class="fa fa-undo"></span> {{ \'revisions\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-recycle"></span> {{\'recover\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="destroyCredential(selectedCredential)"><span class="fa fa-bomb"></span> {{\'destroy\' | translate}}</button></div></div></div><div class="share_popup" style="display: none" title="{{ \'sharereq.title\' | translate }}"><p>{{ \'sharereq.line1\' | translate}} {{ \'sharereq.line2\' | translate}}</p><br><table class="table"><thead><tr><td><b>{{ \'label\' | translate}}</b></td><td><b>{{ \'permissions\' | translate}}</b></td><td><b>{{ \'received.from\' | translate}}</b></td><td><b>{{ \'date\' | translate}}</b></td></tr></thead><tr ng-repeat="share_request in incoming_share_requests" ng-if="share_request.target_vault_id == active_vault.vault_id"><td>{{share_request.credential_label}}</td><td>{{share_request.permissions}}</td><td>{{share_request.from_user_id}}</td><td>{{share_request.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td><span class="link" ng-click="acceptShareRequest(share_request)"><b>{{ \'accept\' | translate}}</b></span> | <span class="link" ng-click="declineShareRequest(share_request)">{{ \'decline\' | translate}}</span></td></tr></table></div>');
}]);
@@ -144,5 +144,5 @@ angular.module('views/vault_req_deletion.html', []).run(['$templateCache', funct
angular.module('views/vaults.html', []).run(['$templateCache', function($templateCache) {
'use strict';
$templateCache.put('views/vaults.html',
- '<div class="vault_wrapper"><div class="vaults" ng-if="!list_selected_vault && !creating_vault"><div class="ui-select-container ui-select-bootstrap vaultlist"><ul><li ng-click="newVault()">+ Create a new vault</li><li ng-repeat="vault in vaults" ng-class="{\'selected\': vault == list_selected_vault }" ng-click="selectVault(vault)"><div><span class="ui-select-choices-row-inner"><div class="ng-binding ng-scope">{{vault.name}} <span class="pull-right" style="color: #ce3702;" ng-show="vault.delete_request_pending">{{ \'delete.request.pending\' | translate}}</span></div><small class="ng-binding ng-scope">{{ \'created\' | translate}}: {{vault.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} | {{ \'last.access\' | translate}}: <span ng-if="vault.last_access > 0">{{vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="vault.last_access === 0">{{\'never\' | translate}}</span></small></span></div></li><li ng-if="vaults.length === 0">{{ \'no.vaults\' | translate}}</li></ul></div></div><div ng-if="creating_vault"><div class="login_form" ng-init="vault_name = \'\'; vault_key=\'\'; ">{{\'new.vault.name\' | translate}}<div><input type="text" ng-model="vault_name" required></div><div>{{ \'new.vault.pass\' | translate}} <input type="password" ng-model="vault_key" required><ng-password-meter password="vault_key" score="vault_key_score"></ng-password-meter></div><div>{{ \'new.vault.passr\' | translate}} <input type="password" ng-model="vault_key2" required></div><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li ng-show="error">{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><div><small>{{\'new.vault.sharing_key_notice\' | translate}}</small></div><div class="button_wrapper"><button class="button button-geen" ng-if="!creating_keys" click-disable ng-click="createVault(vault_name, vault_key, vault_key2)" ng-disabled="vault_key_score.score < minimal_value_key_strength || vault_key !== vault_key2 || vault_key === \'\'">{{ \'new.vault.create\' | translate }}</button><div class="button" ng-if="creating_keys"><span><i class="fa fa-spinner fa-spin"></i> {{creating_keys}}</span></div><div class="button button-red" ng-click="clearState()">{{ \'cancel\' | translate}}</div><div class="template-hidden">{{sharing_keys}}</div></div></div></div><div ng-if="list_selected_vault != false"><div class="vaultlist"><ul><li ng-click="clearState()">{{ \'go.back.vaults\' | translate }}</li></ul></div><div class="login_form"><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div>{{ \'input.vault.password\' | translate}} {{list_selected_vault.name}}<div class="pw-input"><input type="password" ng-model="vault_key" ng-enter="loginToVault(list_selected_vault, vault_key)"> <small class="last_access">{{\'last.access\' | translate}}: <span ng-if="list_selected_vault.last_access > 0">{{list_selected_vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="list_selected_vault.last_access === 0">Never</span></small></div><div class="login_opts"><div><label><input type="checkbox" ng-checked="default_vault" ng-click="toggleDefaultVault()"> {{ \'vault.default\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="remember_vault_password" ng-click="toggleRememberPassword()"> {{ \'vault.auto.login\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="auto_logout_timer" ng-click="toggleAutoLogout()"> {{ \'auto.logout\' | translate}}</label> <select ng-model="logout_timer" ng-change="selectLogoutTimer(logout_timer)"><option value="0">Never</option><option value="30">30 minutes</option><option value="60">60 minutes</option><option value="90">90 minutes</option><option value="180">3 hour</option><option value="480">8 hour</option></select></div></div><div class="alert alert-danger" ng-show="vault_tries[list_selected_vault.guid].timeout !== 0" translate="vault.locked" translate-value-tries="{{ vault_tries[list_selected_vault.guid].tries }}" translate-value-time="{{ vault_tries[list_selected_vault.guid].timeout | toHHMMSS }}"></div><button class="button button-geen" ng-click="loginToVault(list_selected_vault, vault_key)" ng-disabled="vault_tries[list_selected_vault.guid].timeout !== 0">{{ \'vault.decrypt\' | translate}}</button> <span ng-click="forgottenPassword = true;" style="margin-top: 10px; padding: 6px 12px;" class="link pull-right" ng-show="!forgottenPassword">Forgot password?</span> <button ng-show="forgottenPassword" class="pull-right button button-red" ng-click="requestDeletion(list_selected_vault)"><span ng-show="list_selected_vault.delete_request_pending">{{ \'cancel.request.deletion\' | translate }}</span> <span ng-show="!list_selected_vault.delete_request_pending">{{ \'request.deletion\' | translate }}</span></button></div></div></div>');
+ '<div class="vault_wrapper"><div class="vaults" ng-if="!list_selected_vault && !creating_vault"><div class="ui-select-container ui-select-bootstrap vaultlist"><ul><li ng-click="newVault()">+ Create a new vault</li><li ng-repeat="vault in vaults" ng-class="{\'selected\': vault == list_selected_vault }" ng-click="selectVault(vault)"><div><span class="ui-select-choices-row-inner"><div class="ng-binding ng-scope">{{vault.name}} <span class="pull-right" style="color: #ce3702;" ng-show="vault.delete_request_pending">{{ \'delete.request.pending\' | translate}}</span></div><small class="ng-binding ng-scope">{{ \'created\' | translate}}: {{vault.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} | {{ \'last.access\' | translate}}: <span ng-if="vault.last_access > 0">{{vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="vault.last_access === 0">{{\'never\' | translate}}</span></small></span></div></li><li ng-if="vaults.length === 0">{{ \'no.vaults\' | translate}}</li></ul></div></div><div ng-if="creating_vault"><div class="login_form" ng-init="vault_name = \'\'; vault_key=\'\'; ">{{\'new.vault.name\' | translate}}<div><input type="text" ng-model="vault_name" required></div><div>{{ \'new.vault.pass\' | translate}} <input type="password" ng-model="vault_key" required><ng-password-meter password="vault_key" score="vault_key_score"></ng-password-meter></div><div>{{ \'new.vault.passr\' | translate}} <input type="password" ng-model="vault_key2" required></div><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li ng-show="error">{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><div><small>{{\'new.vault.sharing_key_notice\' | translate}}</small></div><div class="button_wrapper"><button class="button button-geen" ng-if="!creating_keys" click-disable ng-click="createVault(vault_name, vault_key, vault_key2)" ng-disabled="vault_key_score.score < minimal_value_key_strength || vault_key !== vault_key2 || vault_key === \'\'">{{ \'new.vault.create\' | translate }}</button><div class="button" ng-if="creating_keys"><span><i class="fa fa-spinner fa-spin"></i> {{creating_keys}}</span></div><div class="button button-red" ng-click="clearState()">{{ \'cancel\' | translate}}</div><div class="template-hidden">{{sharing_keys}}</div></div></div></div><div ng-if="list_selected_vault != false"><div class="vaultlist"><ul><li ng-click="clearState()">{{ \'go.back.vaults\' | translate }}</li></ul></div><div class="login_form"><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div>{{ \'input.vault.password\' | translate}} {{list_selected_vault.name}}<div class="pw-input"><input type="password" ng-model="vault_key" ng-enter="loginToVault(list_selected_vault, vault_key)"> <small class="last_access">{{\'last.access\' | translate}}: <span ng-if="list_selected_vault.last_access > 0">{{list_selected_vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="list_selected_vault.last_access === 0">Never</span></small></div><div class="login_opts"><div><input id="selectVaultAsDefault" class="checkbox" type="checkbox" ng-checked="default_vault" ng-click="toggleDefaultVault()"> <label for="selectVaultAsDefault">{{ \'vault.default\' | translate}}</label></div><div><input id="rememberVaultPassword" class="checkbox" type="checkbox" ng-checked="remember_vault_password" ng-click="toggleRememberPassword()"> <label for="rememberVaultPassword">{{ \'vault.auto.login\' | translate}}</label></div><div><input id="enableAutoLogoutTimer" class="checkbox" type="checkbox" ng-checked="auto_logout_timer" ng-click="toggleAutoLogout()"> <label for="enableAutoLogoutTimer">{{ \'auto.logout\' | translate}}</label> <select ng-model="logout_timer" ng-change="selectLogoutTimer(logout_timer)"><option value="0">Never</option><option value="30">30 minutes</option><option value="60">60 minutes</option><option value="90">90 minutes</option><option value="180">3 hour</option><option value="480">8 hour</option></select></div></div><div class="alert alert-danger" ng-show="vault_tries[list_selected_vault.guid].timeout !== 0" translate="vault.locked" translate-value-tries="{{ vault_tries[list_selected_vault.guid].tries }}" translate-value-time="{{ vault_tries[list_selected_vault.guid].timeout | toHHMMSS }}"></div><button class="button button-geen" ng-click="loginToVault(list_selected_vault, vault_key)" ng-disabled="vault_tries[list_selected_vault.guid].timeout !== 0">{{ \'vault.decrypt\' | translate}}</button> <span ng-click="forgottenPassword = true;" style="margin-top: 10px; padding: 6px 12px;" class="link pull-right" ng-show="!forgottenPassword">Forgot password?</span> <button ng-show="forgottenPassword" class="pull-right button button-red" ng-click="requestDeletion(list_selected_vault)"><span ng-show="list_selected_vault.delete_request_pending">{{ \'cancel.request.deletion\' | translate }}</span> <span ng-show="!list_selected_vault.delete_request_pending">{{ \'request.deletion\' | translate }}</span></button></div></div></div>');
}]);
diff --git a/sass/admin.scss b/sass/admin.scss
index b15ba68a..68007059 100644
--- a/sass/admin.scss
+++ b/sass/admin.scss
@@ -18,4 +18,13 @@
#requests-table{
width: 100%;
}
+ .link {
+ cursor: pointer;
+ }
+ .link.accept:hover {
+ color: var(--color-error);
+ }
+ .link.ignore:hover {
+ color: var(--color-primary);
+ }
}
diff --git a/sass/app.scss b/sass/app.scss
index 5e543704..813767de 100644
--- a/sass/app.scss
+++ b/sass/app.scss
@@ -70,19 +70,20 @@
#passman-controls {
box-sizing: border-box;
position: fixed;
- margin: -45px 0 0;
+ margin: -58px 8px 0 0;
right: 0;
left: 0;
border-bottom: 1px solid #c9c9c9;
- padding: 0 !important;
- background-color: rgba(255, 255, 255, .95);
+ //background-color: rgba(255, 255, 255, .95);
z-index: 50;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
+ min-height: 58px !important;
+ //height: auto!important;
+ padding-right: 20px !important;
- height: 44px !important;
.breadcrumb{
//Move Homeicon to the right to prevent overlap with burgermenu
@media only screen and (max-width: 769px) {
@@ -100,8 +101,8 @@
}
@media only screen and (min-width: 1024px){
#app-navigation+#app-content #passman-controls {
- left: 300px;
- width: calc( 100% - 300px ) !important;
+ left: 308px;
+ //width: calc( 100% - 300px ) !important;
}
}
#passman-controls .button, #passman-controls, #passman-controls input[type='submit'], #passman-controls input[type='text'], #passman-controls input[type='password'], #passman-controls select {
diff --git a/sass/bookmarklet.scss b/sass/bookmarklet.scss
index 50e63061..c63ae5d4 100644
--- a/sass/bookmarklet.scss
+++ b/sass/bookmarklet.scss
@@ -24,7 +24,7 @@ header {
display: none;
}
-#content {
+#inner-app-content {
}
@@ -55,13 +55,13 @@ header {
.tab_container {
padding-top: 10px;
+ margin-bottom: 60px;
+ overflow: scroll;
div {
margin-bottom: 5px;
overflow: hidden;
}
-
- margin-bottom: 20px;
}
.vault_wrapper {
diff --git a/sass/credentials.scss b/sass/credentials.scss
index b1ea62a4..7c0fbc22 100644
--- a/sass/credentials.scss
+++ b/sass/credentials.scss
@@ -21,10 +21,11 @@
*/
//override nc style to fix wrong offset
-#content {
- padding-top: 47px !important; // 45px but +2 because of borders
+#inner-app-content {
+ padding-top: 58px !important; // 45px but +2 because of borders
height: 100%;
width: 100%;
+ display: flex;
}
//fix for different heights of passwordicon
@@ -50,7 +51,7 @@
#app-sidebar{
height: auto;
.sidebar{
- display: inline-block;
+ display: flex;
.sidebar-icon {
margin-right: 15px;
.icon-image-size{
@@ -62,7 +63,6 @@
}
.sidebar-label{
float:right;
- line-height: 44px;
}
}
}
@@ -72,13 +72,12 @@
margin-left: 0px !important;
}
#app-content {
+ position: sticky;
- margin-left: 300px;
-
- @media only screen and (max-width: 769px) {
+ @media only screen and (max-width: 1024px) {
width: 100vw;
}
- @media only screen and (min-width: 770px) {
+ @media only screen and (min-width: 1025px) {
width: calc(100vw - 300px);
}
@@ -86,10 +85,11 @@
//width: 100%;
#app-content-wrapper {
- min-height: 95%;
+ height: 100%;
display:flex;
//hack for missing separatorbar when app-sidebar is opened
- height: calc(100vh - 49px);
+ width: 100%;
+ padding-right: 15px;
#passman-controls {
text-align: center;
@@ -508,6 +508,12 @@
}
+ .credential-revisions {
+ div.crumb > a {
+ max-width: initial!important;
+ }
+ }
+
.main_list{
flex:1;
float:left;
@@ -536,7 +542,6 @@
h2 {
margin-bottom: 10px;
font-weight: 400;
- white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 90%;
diff --git a/sass/menu.scss b/sass/menu.scss
index 77e8e997..b657340a 100644
--- a/sass/menu.scss
+++ b/sass/menu.scss
@@ -53,7 +53,7 @@
a {
&.active{
//border-left: 3px solid #0082c9;
- background-image: var(--icon-delete-e9322d);
+ background-image: var(--icon-delete-color-red);
}
//background-color: #fff !important;
opacity: 1 !important;
diff --git a/sass/settings.scss b/sass/settings.scss
index 50c5ac64..ce92d072 100644
--- a/sass/settings.scss
+++ b/sass/settings.scss
@@ -20,6 +20,9 @@
*
*/
+.ng-app-frame {
+ display: block!important;
+}
.spacer-top-30{
margin-top: 30px;
}
@@ -87,3 +90,23 @@
h3 {
font-weight: bold;
}
+.setting-group {
+ label, input {
+ display: block;
+ }
+ input[type="text"], input[type="password"], textarea {
+ width: 100%;
+ }
+}
+.setting-group.margin-bottom-25 {
+ margin-bottom: 25px;
+}
+.setting-group.margin-bottom-10 {
+ margin-bottom: 10px;
+}
+.display-grid {
+ display: grid;
+}
+.password-settings-padding-left-fix{
+ padding-left: 0 !important;
+}
diff --git a/sass/share_credential.scss b/sass/share_credential.scss
index 0a2c96c3..a43b61d6 100644
--- a/sass/share_credential.scss
+++ b/sass/share_credential.scss
@@ -66,4 +66,24 @@
.fa-trash:hover {
color: #ce3702;
}
-} \ No newline at end of file
+}
+
+.tags {
+ float: left;
+ .tag {
+ background-color: rgba(240, 240, 240, .9);
+ padding: 4px;
+ font-size: 11px;
+ }
+}
+tags-input {
+ .tags {
+ width: 100%;
+ .input {
+ width: auto!important;
+ }
+ .tag-item {
+ color: var(--color-text-lighter);
+ }
+ }
+}
diff --git a/sass/vaults.scss b/sass/vaults.scss
index 25242c8a..1944f107 100644
--- a/sass/vaults.scss
+++ b/sass/vaults.scss
@@ -38,7 +38,7 @@
.vault_wrapper{
margin:0 auto auto auto;
- max-width: 420px;
+ max-width: 450px;
@include border-radius(5px);
box-shadow: 0 1px 1px #777;
background: #eee;
@@ -110,4 +110,4 @@
.vault_wrapper{
width: 90%;
}
-} \ No newline at end of file
+}
diff --git a/templates/main.php b/templates/main.php
index b81d0a71..8ca18a89 100644
--- a/templates/main.php
+++ b/templates/main.php
@@ -119,7 +119,7 @@ style('passman', 'app');
/*build-css-end*/
?>
-<div id="app" ng-app="passmanApp" ng-controller="MainCtrl">
+<div id="app" ng-app="passmanApp" ng-controller="MainCtrl" style="display: flex;">
<div id="logoutTimer"></div>
<div id="warning_bar" class="warning_bar template-hidden" ng-if="using_http && http_warning_hidden == false" ng-init="removeHiddenStyles()">
{{ 'http.warning' | translate }}
@@ -232,7 +232,7 @@ style('passman', 'app');
<div id="app-content" ng-class="{'vaultlist_sidebar_hidden': !selectedVault}">
<div id="app-content-wrapper">
- <div id="content" ng-view="">
+ <div id="inner-app-content" ng-view="">
</div>
</div>
diff --git a/templates/views/credential_revisions.html b/templates/views/credential_revisions.html
index 49fc33d6..5edd4fa1 100644
--- a/templates/views/credential_revisions.html
+++ b/templates/views/credential_revisions.html
@@ -1,15 +1,16 @@
-<div class="main_list" off-click-filter="'.download-js-link, .sidebar-shown, #app-sidebar'">
+<div class="main_list credential-revisions" off-click-filter="'.download-js-link, .sidebar-shown, #app-sidebar'">
<div id="passman-controls">
<div class="actions creatable">
<div class="breadcrumb">
- <div class="crumb svg ui-droppable">
- <a ng-click="logout()"><i class="fa fa-home"></i></a>
+ <div class="crumb svg crumbhome">
+ <a ng-click="logout()" class="icon-home">Home</a>
+ <span style="display: none;"></span>
</div>
<div class="crumb svg">
<a ng-click="cancelRevision()">{{active_vault.name}}</a>
</div>
<div class="crumb svg last">
- <a ng-if="storedCredential.credential_id">{{ 'showing.revisions' | translate}} "{{revision.credential_data.label}}"</a>
+ <a ng-if="storedCredential.credential_id">{{ 'showing.revisions' | translate}} "{{storedCredential.label}}"</a>
</div>
</div>
</div>
@@ -35,205 +36,205 @@
ng-show="selectedRevision">
<span class="close icon-close" ng-click="closeSelected()"
alt="Close"></span>
- <b ng-show="selectedRevision">{{ 'revision.of' | translate}} {{selectedRevision.created * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}</b>
- <div class="credential-data">
- <div class="row" ng-show="selectedRevision.credential_data.label">
- <div class="col-xs-4 col-md-3 col-lg-3">{{ 'label' | translate }}</div>
- <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field
- value="selectedRevision.credential_data.label"></span></div>
- </div>
+ <b ng-show="selectedRevision">{{ 'revision.of' | translate}} {{selectedRevision.created * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}</b>
+ <div class="credential-data">
+ <div class="row" ng-show="selectedRevision.credential_data.label">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{ 'label' | translate }}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field
+ value="selectedRevision.credential_data.label"></span></div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.username">
- <div class="col-xs-4 col-md-3 col-lg-3">{{ 'account' | translate }}</div>
- <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field
- value="selectedRevision.credential_data.username"></span></div>
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.username">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{ 'account' | translate }}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field
+ value="selectedRevision.credential_data.username"></span></div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.password">
- <div class="col-xs-4 col-md-3 col-lg-3">{{ 'password' | translate }}</div>
- <div class="col-xs-8 col-md-9 col-lg-9">
+ <div class="row" ng-show="selectedRevision.credential_data.password">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{ 'password' | translate }}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9">
<span credential-field value="selectedRevision.credential_data.password" secret="'true'">
</span>
- </div>
</div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.otp.secret">
- <div class="col-xs-4 col-md-3 col-lg-3">{{'otp' | translate}}</div>
- <div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator
- secret="selectedRevision.credential_data.otp.secret"></span></div>
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.otp.secret">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{'otp' | translate}}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator
+ secret="selectedRevision.credential_data.otp.secret"></span></div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.email">
- <div class="col-xs-4 col-md-3 col-lg-3">{{'email' | translate}}</div>
- <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field
- value="selectedRevision.credential_data.email"></span></div>
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.email">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{'email' | translate}}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field
+ value="selectedRevision.credential_data.email"></span></div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.url">
- <div class="col-xs-4 col-md-3 col-lg-3">{{ 'url' | translate}}</div>
- <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field
- value="selectedRevision.credential_data.url"></span></div>
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.url">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{ 'url' | translate}}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field
+ value="selectedRevision.credential_data.url"></span></div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.description">
- <div class="col-xs-4 col-md-3 col-lg-3">{{'notes' | translate}}</div>
- <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.description_html"></span></div>
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.description">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{'notes' | translate}}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.description_html"></span></div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.files.length > 0">
- <div class="col-xs-4 col-md-3 col-lg-3">{{ 'files' | translate}}</div>
- <div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedRevision.credential_data.files"
- class="link" ng-click="downloadFile(selectedRevision.credential_data, file)">
- {{file.filename}} ({{file.size | bytes}})
- </div></div>
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.files.length > 0">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{ 'files' | translate}}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedRevision.credential_data.files"
+ class="link" ng-click="downloadFile(selectedRevision.credential_data, file)">
+ {{file.filename}} ({{file.size | bytes}})
+ </div></div>
+ </div>
- <div class="row" ng-repeat="field in selectedRevision.credential_data.custom_fields">
- <div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div>
- <div class="col-xs-8 col-md-9 col-lg-9">
- <span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== 'file' || !field.field_type"></span>
- <span ng-if="field.field_type === 'file'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span>
- </div>
+ <div class="row" ng-repeat="field in selectedRevision.credential_data.custom_fields">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9">
+ <span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== 'file' || !field.field_type"></span>
+ <span ng-if="field.field_type === 'file'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span>
</div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.expire_time > 0">
- <div class="col-xs-4 col-md-3 col-lg-3">{{ 'expire.time' | translate }}</div>
- <div class="col-xs-8 col-md-9 col-lg-9">
- {{selectedRevision.credential_data.expire_time * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.expire_time > 0">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{ 'expire.time' | translate }}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9">
+ {{selectedRevision.credential_data.expire_time * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
</div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.changed">
- <div class="col-xs-4 col-md-3 col-lg-3">{{ 'changed' | translate}}</div>
- <div class="col-xs-8 col-md-9 col-lg-9">
- {{selectedRevision.credential_data.changed * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.changed">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{ 'changed' | translate}}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9">
+ {{selectedRevision.credential_data.changed * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
</div>
+ </div>
- <div class="row" ng-show="selectedRevision.credential_data.created">
- <div class="col-xs-4 col-md-3 col-lg-3">{{ 'created' | translate}}</div>
- <div class="col-xs-8 col-md-9 col-lg-9">
- {{selectedRevision.credential_data.created * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
- </div>
+ <div class="row" ng-show="selectedRevision.credential_data.created">
+ <div class="col-xs-4 col-md-3 col-lg-3">{{ 'created' | translate}}</div>
+ <div class="col-xs-8 col-md-9 col-lg-9">
+ {{selectedRevision.credential_data.created * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
</div>
+ </div>
- <div class="row">
- <div class="col-xs-12">
- <div class="tags">
- <span class="tag" ng-repeat="tag in selectedRevision.credential_data.tags">{{tag.text}}</span>
- </div>
+ <div class="row">
+ <div class="col-xs-12">
+ <div class="tags">
+ <span class="tag" ng-repeat="tag in selectedRevision.credential_data.tags">{{tag.text}}</span>
</div>
</div>
</div>
-<!--
- <table class="revision-details">
- <tr ng-show="selectedRevision.credential_data.label">
- <td>
- {{ 'label' | translate}}
- </td>
- <td>
- {{selectedRevision.credential_data.label}}
- </td>
- </tr>
- <tr ng-show="selectedRevision.credential_data.username">
- <td>
- {{ 'account' | translate}}
- </td>
- <td>
- <span credential-field
- value="selectedRevision.credential_data.username"></span>
- </td>
- </tr>
- <tr ng-show="selectedRevision.credential_data.password">
- <td>
- {{ 'password' | translate}}
- </td>
- <td>
- <span credential-field value="selectedRevision.credential_data.password"
- secret="'true'"></span>
- </td>
- </tr>
- <tr ng-show="selectedRevision.credential_data.otp.secret">
- <td>
- {{ 'otp' | translate}}
- </td>
- <td>
- <span otp-generator
- secret="selectedRevision.credential_data.otp.secret"></span>
- </td>
- </tr>
- <tr ng-show="selectedRevision.credential_data.email">
- <td>
- {{ 'email' | translate}}
- </td>
- <td>
- <span credential-field
- value="selectedRevision.credential_data.email"></span>
- </td>
- </tr>
- <tr ng-show="selectedRevision.credential_data.url">
- <td>
- {{ 'url' | translate}}
- </td>
- <td>
- <span credential-field
- value="selectedRevision.url"></span>
- </td>
- </tr>
- <tr ng-show="selectedRevision.credential_data.files.length > 0">
- <td>
- {{ 'files' | translate}}
- </td>
- <td>
- <div ng-repeat="file in selectedRevision.credential_data.files"
- class="link" ng-click="downloadFile(file)">
- {{file.filename}} ({{file.size | bytes}})
- </div>
- </td>
- </tr>
- <tr ng-repeat="field in selectedRevision.credential_data.custom_fields">
- <td>
- {{field.label}}
- </td>
- <td>
- <span credential-field value="field.value"
- secret="field.secret"></span>
- </td>
- </tr>
- <tr ng-show="selectedRevision.credential_data.changed">
- <td>
- {{ 'changed' | translate}}
- </td>
- <td>
- {{selectedRevision.credential_data.changed * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
- </td>
- </tr>
- <tr ng-show="selectedRevision.credential_data.created">
- <td>
- {{ 'created' | translate}}
- </td>
- <td>
- {{selectedRevision.credential_data.created * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
- </td>
- </tr>
-
- </table>
--->
- <div ng-show="selectedRevision">
- <button class="button" ng-click="restoreRevision(selectedRevision)" >
- <span class="fa fa-edit"></span> {{ 'restore.revision' | translate}}
- </button>
- <button class="button" ng-click="deleteRevision(selectedRevision)" >
- <span class="fa fa-trash"></span> {{ 'delete.revision' | translate}}
- </button>
- </div>
-
</div>
+ <!--
+ <table class="revision-details">
+ <tr ng-show="selectedRevision.credential_data.label">
+ <td>
+ {{ 'label' | translate}}
+ </td>
+ <td>
+ {{selectedRevision.credential_data.label}}
+ </td>
+ </tr>
+ <tr ng-show="selectedRevision.credential_data.username">
+ <td>
+ {{ 'account' | translate}}
+ </td>
+ <td>
+ <span credential-field
+ value="selectedRevision.credential_data.username"></span>
+ </td>
+ </tr>
+ <tr ng-show="selectedRevision.credential_data.password">
+ <td>
+ {{ 'password' | translate}}
+ </td>
+ <td>
+ <span credential-field value="selectedRevision.credential_data.password"
+ secret="'true'"></span>
+ </td>
+ </tr>
+ <tr ng-show="selectedRevision.credential_data.otp.secret">
+ <td>
+ {{ 'otp' | translate}}
+ </td>
+ <td>
+ <span otp-generator
+ secret="selectedRevision.credential_data.otp.secret"></span>
+ </td>
+ </tr>
+ <tr ng-show="selectedRevision.credential_data.email">
+ <td>
+ {{ 'email' | translate}}
+ </td>
+ <td>
+ <span credential-field
+ value="selectedRevision.credential_data.email"></span>
+ </td>
+ </tr>
+ <tr ng-show="selectedRevision.credential_data.url">
+ <td>
+ {{ 'url' | translate}}
+ </td>
+ <td>
+ <span credential-field
+ value="selectedRevision.url"></span>
+ </td>
+ </tr>
+ <tr ng-show="selectedRevision.credential_data.files.length > 0">
+ <td>
+ {{ 'files' | translate}}
+ </td>
+ <td>
+ <div ng-repeat="file in selectedRevision.credential_data.files"
+ class="link" ng-click="downloadFile(file)">
+ {{file.filename}} ({{file.size | bytes}})
+ </div>
+ </td>
+ </tr>
+ <tr ng-repeat="field in selectedRevision.credential_data.custom_fields">
+ <td>
+ {{field.label}}
+ </td>
+ <td>
+ <span credential-field value="field.value"
+ secret="field.secret"></span>
+ </td>
+ </tr>
+ <tr ng-show="selectedRevision.credential_data.changed">
+ <td>
+ {{ 'changed' | translate}}
+ </td>
+ <td>
+ {{selectedRevision.credential_data.changed * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
+ </td>
+ </tr>
+ <tr ng-show="selectedRevision.credential_data.created">
+ <td>
+ {{ 'created' | translate}}
+ </td>
+ <td>
+ {{selectedRevision.credential_data.created * 1000 | date:'dd-MM-yyyy @ HH:mm:ss'}}
+ </td>
+ </tr>
+
+ </table>
+ -->
+ <div ng-show="selectedRevision">
+ <button class="button" ng-click="restoreRevision(selectedRevision)" >
+ <span class="fa fa-edit"></span> {{ 'restore.revision' | translate}}
+ </button>
+ <button class="button" ng-click="deleteRevision(selectedRevision)" >
+ <span class="fa fa-trash"></span> {{ 'delete.revision' | translate}}
+ </button>
+ </div>
+
+</div>
diff --git a/templates/views/edit_credential.html b/templates/views/edit_credential.html
index 7dbc3606..ad508df9 100644
--- a/templates/views/edit_credential.html
+++ b/templates/views/edit_credential.html
@@ -1,8 +1,9 @@
<div id="passman-controls">
<div class="breadcrumb">
<div class="breadcrumb">
- <div class="crumb svg ui-droppable" data-dir="/">
- <a ng-click="logout()"><i class="fa fa-home"></i></a>
+ <div class="crumb svg crumbhome">
+ <a ng-click="logout()" class="icon-home">Home</a>
+ <span style="display: none;"></span>
</div>
<div class="crumb svg" data-dir="/Test">
<a ng-click="cancel()">{{ active_vault.name }}</a>
diff --git a/templates/views/partials/forms/edit_credential/basics.html b/templates/views/partials/forms/edit_credential/basics.html
index 61314dcb..4a89e6a7 100644
--- a/templates/views/partials/forms/edit_credential/basics.html
+++ b/templates/views/partials/forms/edit_credential/basics.html
@@ -1,36 +1,46 @@
<div class="row">
<div class="col-xs-12 col-md-6">
- <label >{{ 'label' | translate}}</label>
- <div class="icon-label">
- <div class="icon-picker" icon-picker="storedCredential"></div>
- <input type="text" class="form-control" ng-model="storedCredential.label">
+ <div class="setting-group">
+ <label >{{ 'label' | translate}}</label>
+ <div class="icon-label">
+ <div class="icon-picker" icon-picker="storedCredential"></div>
+ <input type="text" class="form-control" ng-model="storedCredential.label">
+ </div>
</div>
- <label>{{ 'username' | translate}}</label>
- <div>
+
+ <div class="setting-group">
+ <label>{{ 'username' | translate}}</label>
<input type="text" ng-model="storedCredential.username">
</div>
- <label>{{ 'email' | translate}}</label>
- <div>
+
+ <div class="setting-group">
+ <label>{{ 'email' | translate}}</label>
<input type="text" ng-model="storedCredential.email">
</div>
- <label>{{ 'password' | translate}}</label>
- <div>
- <password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen>
- <ng-password-meter password="storedCredential.password"></ng-password-meter>
+
+ <div class="setting-group">
+ <label>{{ 'password' | translate}}</label>
+ <div>
+ <password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen>
+ <ng-password-meter password="storedCredential.password"></ng-password-meter>
+ </div>
</div>
- <div>
+
+ <div class="setting-group">
<label>{{ 'password.r' | translate}}</label>
<input type="password" ng-model="storedCredential.password_repeat">
</div>
- <label>{{ 'url' | translate}}</label>
- <div>
+
+ <div class="setting-group">
+ <label>{{ 'url' | translate}}</label>
<input type="text" ng-model="storedCredential.url">
</div>
</div>
+
<div class="col-xs-12 col-md-6">
- <label>{{ 'notes' | translate}}</label>
- <div>
+ <div class="setting-group">
+ <label>{{ 'notes' | translate}}</label>
<textarea class="credential_textarea" ng-model="storedCredential.description"></textarea>
</div>
<label>{{ 'add.tag' | translate}}</label>
@@ -40,8 +50,9 @@
</tags-input>
</div>
</div>
+
<div class="col-xs-12 col-md-6">
- <button class="compromised-button" ng-click="compromise()">{{ 'compromised.label' | translate}}</button>
+ <button class="btn-danger compromised-button" ng-click="compromise()">{{ 'compromised.label' | translate}}</button>
<div class="compromised-details" ng-show="storedCredential.compromised">
<div class="icon-error-color icon"></div>
<div class="text">{{ 'compromised.warning' | translate }}</div>
diff --git a/templates/views/partials/forms/edit_credential/files.html b/templates/views/partials/forms/edit_credential/files.html
index b50c34d9..7f9281e8 100644
--- a/templates/views/partials/forms/edit_credential/files.html
+++ b/templates/views/partials/forms/edit_credential/files.html
@@ -10,7 +10,7 @@
<div class="row files" ng-if="storedCredential.files.length > 0">
<div class="col-xs-12 table">
<table>
- <thead use-theme>
+ <thead>
<tr>
<th class="field_label">{{ 'file.name' | translate }}</th>
<th class="field_value">{{ 'upload.date' | translate}}</th>
@@ -32,4 +32,4 @@
</tr>
</table>
</div>
-</div> \ No newline at end of file
+</div>
diff --git a/templates/views/partials/forms/edit_credential/password.html b/templates/views/partials/forms/edit_credential/password.html
index 3e6868de..a4a9b0f4 100644
--- a/templates/views/partials/forms/edit_credential/password.html
+++ b/templates/views/partials/forms/edit_credential/password.html
@@ -1,17 +1,21 @@
<div class="row">
<div class="col-xs-12 col-md-5 col-lg-5">
- <label>{{ 'password' | translate}}</label>
- <div>
- <password-gen ng-model="storedCredential.password"
- settings="pwSettings" callback="pwGenerated"></password-gen>
- <ng-password-meter
- password="storedCredential.password"></ng-password-meter>
+ <div class="setting-group">
+ <label>{{ 'password' | translate}}</label>
+ <div>
+ <password-gen ng-model="storedCredential.password"
+ settings="pwSettings" callback="pwGenerated"></password-gen>
+ <ng-password-meter
+ password="storedCredential.password"></ng-password-meter>
+ </div>
</div>
- <label>{{ 'password.r' | translate}}</label>
- <div>
+
+ <div class="setting-group">
+ <label>{{ 'password.r' | translate}}</label>
<input type="password" ng-model="storedCredential.password_repeat">
</div>
+
<label>{{ 'expire.date' | translate}}</label>
<div>
<span datetime-picker ng-model="storedCredential.expire_time" class="link"
@@ -48,44 +52,37 @@
<input type="number" ng-model="pwSettings.length" min="1">
</label>
+ <br>
<label>
<span class="label">{{'password.generation.min_digits' | translate}}</span><br />
<input type="number" ng-model="pwSettings.minimumDigitCount" min="0">
</label>
</div>
- <div class="col-xs-12 col-sm-6 col-lg-6">
- <label>
- <input type="checkbox"
- ng-model="pwSettings.useUppercase">
- <span class="label sm">{{ 'password.generation.uppercase' | translate}}</span>
- </label>
- <label>
- <input
- ng-model="pwSettings.useLowercase" type="checkbox"
- id="lower">
- <span class="label sm">{{ 'password.generation.lowercase' | translate}}</span>
- </label>
- <label>
- <input ng-model="pwSettings.useDigits" type="checkbox"
- id="digits">
- <span class="label sm">{{ 'password.generation.digits' | translate}}</span>
- </label>
- <label>
- <input type="checkbox" id="special"
+ <div class="col-xs-12 col-sm-6 col-lg-6 display-grid">
+ <input id="pwSettings.useUppercase" class="checkbox" type="checkbox"
+ ng-model="pwSettings.useUppercase">
+ <label for="pwSettings.useUppercase">{{'password.generation.uppercase' | translate}}</label>
+
+ <input id="pwSettings.useLowercase" class="checkbox" type="checkbox"
+ ng-model="pwSettings.useLowercase">
+ <label for="pwSettings.useLowercase">{{'password.generation.lowercase' | translate}}</label>
+
+ <input id="pwSettings.useDigits" class="checkbox" type="checkbox"
+ ng-model="pwSettings.useDigits">
+ <label for="pwSettings.useDigits">{{'password.generation.digits' | translate}}</label>
+
+ <input id="pwSettings.useSpecialChars" class="checkbox" type="checkbox"
ng-model="pwSettings.useSpecialChars">
- <span class="label sm">{{ 'password.generation.special' | translate}}</span>
- </label>
- <label>
- <input type="checkbox" id="ambig"
+ <label for="pwSettings.useSpecialChars">{{'password.generation.special' | translate}}</label>
+
+ <input id="pwSettings.avoidAmbiguousCharacters" class="checkbox" type="checkbox"
ng-model="pwSettings.avoidAmbiguousCharacters">
- <span class="label sm">{{ 'password.generation.ambiguous' | translate}}</span>
- </label>
- <label>
- <input type="checkbox" ng-model="pwSettings.requireEveryCharType"
- id="reqevery">
- <span class="label sm">{{ 'password.generation.require_same' | translate}}</span>
- </label>
+ <label for="pwSettings.avoidAmbiguousCharacters">{{'password.generation.ambiguous' | translate}}</label>
+
+ <input id="pwSettings.requireEveryCharType" class="checkbox" type="checkbox"
+ ng-model="pwSettings.requireEveryCharType">
+ <label for="pwSettings.requireEveryCharType">{{'password.generation.require_same' | translate}}</label>
</div>
</div>
</div>
diff --git a/templates/views/partials/forms/settings/export.html b/templates/views/partials/forms/settings/export.html
index 6930ed34..853893f1 100644
--- a/templates/views/partials/forms/settings/export.html
+++ b/templates/views/partials/forms/settings/export.html
@@ -11,7 +11,7 @@
</select></label>
<div><b>{{selectedExporter.description}}</b></div>
- <div ng-show="selectedExporter" class="nopadding">
+ <div ng-show="selectedExporter" class="nopadding setting-group">
<label>{{ 'export.confirm.text' | translate }}</label>
<input type="password" ng-model="confirm_key">
<br />
diff --git a/templates/views/partials/forms/settings/general_settings.html b/templates/views/partials/forms/settings/general_settings.html
index 9792e5ec..7172f53c 100644
--- a/templates/views/partials/forms/settings/general_settings.html
+++ b/templates/views/partials/forms/settings/general_settings.html
@@ -1,48 +1,59 @@
<div class="row">
<div class="col-xs-12 col-md-6">
- <h3>{{ 'rename.vault' | translate}}</h3>
- <label>{{ 'rename.vault.name' | translate}}</label>
- <input type="text" ng-model="$parent.new_vault_name">
- <button ng-click="saveVaultSettings()">
- {{ 'change' | translate}}
- </button>
-
- <h3>{{ 'change.vault.key' | translate}}</h3>
- <label>{{ 'old.vault.password' | translate}}</label>
- <input type="password" ng-model="oldVaultPass">
- <label>{{ 'new.vault.password' | translate}}</label>
- <input type="password" ng-model="newVaultPass" />
- <ng-password-meter password="newVaultPass" score="vault_key_score"></ng-password-meter>
- <label>{{ 'new.vault.pw.r' | translate}}</label>
- <input type="password" ng-model="newVaultPass2">
- <div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error">
- <ul>
- <li>{{error}}</li>
- <li ng-show="vault_key_score.score < minimal_value_key_strength">{{'min.vault.key.strength' | translate:required_score}}</li>
- </ul>
+ <div class="setting-group margin-bottom-25">
+ <h3>{{ 'rename.vault' | translate}}</h3>
+ <label>{{ 'rename.vault.name' | translate}}</label>
+ <input type="text" ng-model="$parent.new_vault_name">
+ <button ng-click="saveVaultSettings()">
+ {{ 'change' | translate}}
+ </button>
</div>
- <button ng-click="changeVaultPassword(oldVaultPass,newVaultPass,newVaultPass2)" ng-disabled="vault_key_score.score < minimal_value_key_strength"
- >{{ 'change' | translate}}
- </button>
- <div ng-show="change_pw.total > 0">
- {{'warning.leave' | translate}}<br />
- {{ 'processing' | translate}} {{cur_state.process}}
- <div progress-bar="cur_state.calculated" index="cur_state.current" total="cur_state.total"></div>
- {{ 'total.progress' | translate}}
- <div progress-bar="change_pw.percent" index="change_pw.done" total="change_pw.total"></div>
+
+ <div class="setting-group margin-bottom-25">
+ <h3>{{ 'change.vault.key' | translate}}</h3>
+ <label>{{ 'old.vault.password' | translate}}</label>
+ <input type="password" ng-model="oldVaultPass">
+ <label>{{ 'new.vault.password' | translate}}</label>
+ <input type="password" ng-model="newVaultPass" />
+ <ng-password-meter password="newVaultPass" score="vault_key_score"></ng-password-meter>
+ <label>{{ 'new.vault.pw.r' | translate}}</label>
+ <input type="password" ng-model="newVaultPass2">
+ <div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error">
+ <ul>
+ <li>{{error}}</li>
+ <li ng-show="vault_key_score.score < minimal_value_key_strength">{{'min.vault.key.strength' | translate:required_score}}</li>
+ </ul>
+ </div>
+ <button ng-click="changeVaultPassword(oldVaultPass,newVaultPass,newVaultPass2)" ng-disabled="vault_key_score.score < minimal_value_key_strength"
+ >{{ 'change' | translate}}
+ </button>
+ <div ng-show="change_pw.total > 0">
+ {{'warning.leave' | translate}}<br />
+ {{ 'processing' | translate}} {{cur_state.process}}
+ <div progress-bar="cur_state.calculated" index="cur_state.current" total="cur_state.total"></div>
+ {{ 'total.progress' | translate}}
+ <div progress-bar="change_pw.percent" index="change_pw.done" total="change_pw.total"></div>
+ </div>
</div>
- <h3>{{'delete.vault' | translate}}</h3>
- <b>{{ 'vault.remove.notice' | translate }}</b>
- <label>{{'vault.password' | translate}}</label>
- <input type="password" ng-model="$parent.delete_vault_password">
- <input type="checkbox" ng-model="$parent.confirm_vault_delete"> {{'delete.vault.checkbox' | translate}}<br />
- <button class="btn btn-danger" ng-click="delete_vault()">{{'delete.vault.confirm' | translate}}</button>
- <div ng-show="remove_pw">
- {{'deleting.pw' | translate:translationData}}
- <div progress-bar="remove_pw.percent" index="remove_pw.done" total="remove_pw.total"></div>
+ <div class="setting-group">
+ <h3>{{'delete.vault' | translate}}</h3>
+ <b>{{ 'vault.remove.notice' | translate }}</b>
+ <label>{{'vault.password' | translate}}</label>
+ <input type="password" ng-model="$parent.delete_vault_password">
+
+ <input id="confirmVaultDelete" class="checkbox" type="checkbox"
+ ng-model="$parent.confirm_vault_delete">
+ <label for="confirmVaultDelete">{{'delete.vault.checkbox' | translate}}</label>
+
+ <button class="btn btn-danger" ng-click="delete_vault()">{{'delete.vault.confirm' | translate}}</button>
+ <div ng-show="remove_pw">
+ {{'deleting.pw' | translate:translationData}}
+ <div progress-bar="remove_pw.percent" index="remove_pw.done" total="remove_pw.total"></div>
+ </div>
</div>
+
</div>
<div class="col-xs-12 col-md-6">
<h3>{{ 'about.passman' | translate}}</h3>
@@ -59,4 +70,4 @@
</div>
<div><p ng-bind-html="bookmarklet" style="margin-top: 5px"></p></div>
</div>
-</div> \ No newline at end of file
+</div>
diff --git a/templates/views/partials/forms/settings/import.html b/templates/views/partials/forms/settings/import.html
index 74007afa..4b3d8ea3 100644
--- a/templates/views/partials/forms/settings/import.html
+++ b/templates/views/partials/forms/settings/import.html
@@ -47,4 +47,4 @@
</div>
</div>
</div>
-<div ng-include="'views/partials/forms/settings/generic_csv_import.html'" ng-show="showGenericImport"></div> \ No newline at end of file
+<div ng-include="'views/partials/forms/settings/generic_csv_import.html'" ng-show="showGenericImport"></div>
diff --git a/templates/views/partials/forms/settings/password_settings.html b/templates/views/partials/forms/settings/password_settings.html
index 75406495..26698957 100644
--- a/templates/views/partials/forms/settings/password_settings.html
+++ b/templates/views/partials/forms/settings/password_settings.html
@@ -1,57 +1,52 @@
<div class="password_settings">
<div class="col-xs-12 col-sm-5 col-lg-4 password-settings-padding-left-fix">
- <label>
- <span class="label">{{ 'password.generation.length' | translate}}</span><br />
- <input type="number" ng-model="vault_settings.pwSettings.length" min="1">
+ <div class="setting-group margin-bottom-10">
+ <label>
+ <span class="label">{{ 'password.generation.length' | translate}}</span><br />
+ <input type="number" ng-model="vault_settings.pwSettings.length" min="1">
+ </label>
+ </div>
- </label>
- <label>
- <span class="label">{{ 'password.generation.min_digits' | translate}}</span><br />
- <input type="number" ng-model="vault_settings.pwSettings.minimumDigitCount" min="0">
+ <div class="setting-group margin-bottom-10">
+ <label>
+ <span class="label">{{ 'password.generation.min_digits' | translate}}</span><br />
+ <input type="number" ng-model="vault_settings.pwSettings.minimumDigitCount" min="0">
+ </label>
+ </div>
- </label>
- <label>
- <span class="label">Generate password on creation</span><br />
- <input type="checkbox" ng-model="vault_settings.pwSettings.generateOnCreate" min="0">
-
- </label>
+ <input id="pwSettings.generateOnCreate" class="checkbox" type="checkbox"
+ ng-model="vault_settings.pwSettings.generateOnCreate">
+ <label for="pwSettings.generateOnCreate">{{'password.generation.on_create' | translate}}</label>
+ <br>
</div>
- <div class="col-xs-12 col-sm-6 col-lg-6">
- <label>
- <input type="checkbox"
- ng-model="vault_settings.pwSettings.useUppercase">
- <span class="label sm">{{ 'password.generation.uppercase' | translate}}</span>
- </label>
- <label>
- <input
- ng-model="vault_settings.pwSettings.useLowercase" type="checkbox"
- id="lower">
- <span class="label sm">{{ 'password.generation.lowercase' | translate}}</span>
- </label>
- <label>
- <input ng-model="vault_settings.pwSettings.useDigits" type="checkbox"
- id="digits">
- <span class="label sm">{{ 'password.generation.digits' | translate}}</span>
- </label>
- <label>
- <input type="checkbox" id="special"
- ng-model="vault_settings.pwSettings.useSpecialChars">
- <span class="label sm">{{ 'password.generation.special' | translate}}</span>
- </label>
- <label>
- <input type="checkbox" id="ambig"
- ng-model="vault_settings.pwSettings.avoidAmbiguousCharacters">
- <span class="label sm">{{ 'password.generation.ambiguous' | translate}}</span>
- </label>
- <label>
- <input type="checkbox" ng-model="vault_settings.pwSettings.requireEveryCharType"
- id="reqevery">
- <span class="label sm">{{ 'password.generation.require_same' | translate}}</span>
- </label>
+ <div class="col-xs-12 col-sm-6 col-lg-6 display-grid">
+ <input id="pwSettings.useUppercase" class="checkbox" type="checkbox"
+ ng-model="vault_settings.pwSettings.useUppercase">
+ <label for="pwSettings.useUppercase">{{'password.generation.uppercase' | translate}}</label>
+
+ <input id="pwSettings.useLowercase" class="checkbox" type="checkbox"
+ ng-model="vault_settings.pwSettings.useLowercase">
+ <label for="pwSettings.useLowercase">{{'password.generation.lowercase' | translate}}</label>
+
+ <input id="pwSettings.useDigits" class="checkbox" type="checkbox"
+ ng-model="vault_settings.pwSettings.useDigits">
+ <label for="pwSettings.useDigits">{{'password.generation.digits' | translate}}</label>
+
+ <input id="pwSettings.useSpecialChars" class="checkbox" type="checkbox"
+ ng-model="vault_settings.pwSettings.useSpecialChars">
+ <label for="pwSettings.useSpecialChars">{{'password.generation.special' | translate}}</label>
+
+ <input id="pwSettings.avoidAmbiguousCharacters" class="checkbox" type="checkbox"
+ ng-model="vault_settings.pwSettings.avoidAmbiguousCharacters">
+ <label for="pwSettings.avoidAmbiguousCharacters">{{'password.generation.ambiguous' | translate}}</label>
+
+ <input id="pwSettings.requireEveryCharType" class="checkbox" type="checkbox"
+ ng-model="vault_settings.pwSettings.requireEveryCharType">
+ <label for="pwSettings.requireEveryCharType">{{'password.generation.require_same' | translate}}</label>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<button class="button" ng-click="saveVaultSettings()">{{ 'save' | translate}}</button>
</div>
-</div> \ No newline at end of file
+</div>
diff --git a/templates/views/partials/forms/settings/sharing.html b/templates/views/partials/forms/settings/sharing.html
index 0dee58d6..a046f68a 100644
--- a/templates/views/partials/forms/settings/sharing.html
+++ b/templates/views/partials/forms/settings/sharing.html
@@ -25,4 +25,4 @@
</label>
</div>
</div>
-</div> \ No newline at end of file
+</div>
diff --git a/templates/views/partials/forms/share_credential/link_sharing.html b/templates/views/partials/forms/share_credential/link_sharing.html
index 3e39fd0c..049b9592 100644
--- a/templates/views/partials/forms/share_credential/link_sharing.html
+++ b/templates/views/partials/forms/share_credential/link_sharing.html
@@ -1,7 +1,9 @@
<div class="row">
<div class="col-xs-12 col-md-6">
- <label><input type="checkbox" ng-model="share_settings.linkSharing.enabled">
- {{ 'enable.link.sharing' | translate}}.</label><br/>
+ <input id="linkSharing.enabled" class="checkbox" type="checkbox"
+ ng-model="share_settings.linkSharing.enabled">
+ <label for="linkSharing.enabled">{{'enable.link.sharing' | translate}}</label><br>
+
<div class="pull-left col-xs-6 nopadding">
<span credential-field value="share_link" secret="false" use-input="true" input-placeholder="'click.share' | translate" ></span>
</div>
@@ -36,4 +38,4 @@
</table>
</div>
</div>
-</div> \ No newline at end of file
+</div>
diff --git a/templates/views/settings.html b/templates/views/settings.html
index f54353f7..ea0dae1a 100644
--- a/templates/views/settings.html
+++ b/templates/views/settings.html
@@ -1,8 +1,9 @@
<div id="passman-controls">
<div class="breadcrumb">
<div class="breadcrumb">
- <div class="crumb svg ui-droppable" data-dir="/">
- <a ng-click="logout()"><i class="fa fa-home"></i></a>
+ <div class="crumb svg crumbhome">
+ <a ng-click="logout()" class="icon-home">Home</a>
+ <span style="display: none;"></span>
</div>
<div class="crumb svg">
<a ng-click="cancel()">{{ active_vault.name }}</a>
diff --git a/templates/views/share_credential.html b/templates/views/share_credential.html
index 65443c1e..f9c2345c 100644
--- a/templates/views/share_credential.html
+++ b/templates/views/share_credential.html
@@ -1,8 +1,9 @@
<div id="passman-controls">
<div class="actions creatable">
<div class="breadcrumb">
- <div class="crumb svg ui-droppable" data-dir="/">
- <a ng-click="logout()"><i class="fa fa-home"></i></a>
+ <div class="crumb svg crumbhome">
+ <a ng-click="logout()" class="icon-home">Home</a>
+ <span style="display: none;"></span>
</div>
<div class="crumb svg" data-dir="/Test">
<a ng-click="cancel()">{{ active_vault.name }}</a>
diff --git a/templates/views/show_vault.html b/templates/views/show_vault.html
index 183f73af..29fda64f 100644
--- a/templates/views/show_vault.html
+++ b/templates/views/show_vault.html
@@ -2,20 +2,20 @@
<div id="passman-controls" ng-class="{ 'sidebar-shown': selectedCredential }">
<div class="breadcrumb">
<div class="breadcrumb">
- <div class="crumb svg ui-droppable" data-dir="/">
- <a ng-click="logout()"><i class="fa fa-home"></i></a>
+ <div class="crumb svg crumbhome">
+ <a ng-click="logout()" class="icon-home">Home</a>
+ <span style="display: none;"></span>
</div>
<div class="crumb svg" ng-click="clearState()">
<a>{{active_vault.name}}</a>
</div>
-
</div>
<div class="addCredential" ng-hide="delete_time>0">
<button ng-click="addCredential()"><i class="fa fa-plus"></i></button>
</div>
- <div class="addCredential" ng-hide="delete_time>0">
- <button ng-click="refresh()"><i class="fa fa-refresh"></i></button>
- </div>
+ <div class="addCredential" ng-hide="delete_time>0">
+ <button ng-click="refresh()"><i class="fa fa-refresh"></i></button>
+ </div>
</div>
<div class="title" credential-counter="filtered_credentials" vault="active_vault" delete-time="delete_time" filters="filterOptions"></div>
@@ -23,8 +23,10 @@
<div class="searchboxContainer" ng-init="filterOptionShown = false;" off-click="filterOptionShown = false;">
<input type="text" ng-model="filterOptions.filterText" class="searchbox" id="searchBox"
placeholder="{{'search.credential' | translate}}" select-on-click clear-btn ng-click="filterOptionShown = true;">
+
<div class="searchOptions" ng-show="filterOptionShown">
- <input type="checkbox" ng-model="filterOptions.useRegex"> {{ 'use.regex' | translate }}
+ <input id="filterOptions.useRegex" class="checkbox" type="checkbox" ng-model="filterOptions.useRegex">
+ <label for="filterOptions.useRegex">{{'use.regex' | translate}}</label>
</div>
</div>
@@ -39,7 +41,7 @@
<div class="loaderContainer" ng-if="show_spinner">
<div class="loader" use-theme type="'border-bottom-color'"></div>
</div>
- <div ng-init="menuOpen = false;">
+ <div class="credential-table-wrapper" ng-init="menuOpen = false;">
<table class="credential-table"
ng-if="view_mode === 'list'">
<tr ng-repeat="credential in filtered_credentials | orderBy:'label'"
@@ -72,8 +74,7 @@
<li class="credential"
ng-repeat="credential in filtered_credentials | orderBy:'label'"
ng-if="credential.hidden == 0 && showCredentialRow(credential)"
- ng-click="selectCredential(credential)"
- use-theme type="'border-color'">
+ ng-click="selectCredential(credential)">
<div class="credential_content">
<div>
<span class="icon" ng-if="credential.url">
@@ -102,15 +103,15 @@
</div>
</div>
- <!--nopassword-hint for missing tagresults -->
+ <!--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 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>
@@ -157,45 +158,45 @@
<h2 class="sidebar-label">{{selectedCredential.label}}</h2>
</div>
- <div credential-template="selectedCredential"></div>
-
- <div ng-show="selectedCredential">
- <div>
- <button class="button"
- ng-click="editCredential(selectedCredential)"
- ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
- <span class="fa fa-edit"></span> {{ 'edit' | translate}}
- </button>
- <button class="button"
- ng-click="deleteCredential(selectedCredential)"
- ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
- <span class="fa fa-trash"></span> {{ 'delete' | translate}}
- </button>
- <button class="button"
- ng-click="shareCredential(selectedCredential)"
- ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&
+ <div credential-template="selectedCredential"></div>
+
+ <div ng-show="selectedCredential">
+ <div>
+ <button class="button"
+ ng-click="editCredential(selectedCredential)"
+ ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
+ <span class="fa fa-edit"></span> {{ 'edit' | translate}}
+ </button>
+ <button class="button"
+ ng-click="deleteCredential(selectedCredential)"
+ ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
+ <span class="fa fa-trash"></span> {{ 'delete' | translate}}
+ </button>
+ <button class="button"
+ ng-click="shareCredential(selectedCredential)"
+ 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')">
- <span class="fa fa-share"></span> {{ 'share' | translate}}
- </button>
-
- <button class="button"
- ng-click="getRevisions(selectedCredential)"
- ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)">
- <span class="fa fa-undo"></span> {{ 'revisions' | translate}}
- </button>
-
- <button class="button"
- ng-if="selectedCredential.delete_time > 0"
- ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
- <span class="fa fa-recycle"></span> {{'recover' | translate}}
- </button>
- <button class="button"
- ng-if="selectedCredential.delete_time > 0"
- ng-click="destroyCredential(selectedCredential)">
- <span class="fa fa-bomb"></span> {{'destroy' | translate}}
- </button>
- </div>
- </div>
+ <span class="fa fa-share"></span> {{ 'share' | translate}}
+ </button>
+
+ <button class="button"
+ ng-click="getRevisions(selectedCredential)"
+ ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)">
+ <span class="fa fa-undo"></span> {{ 'revisions' | translate}}
+ </button>
+
+ <button class="button"
+ ng-if="selectedCredential.delete_time > 0"
+ ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)">
+ <span class="fa fa-recycle"></span> {{'recover' | translate}}
+ </button>
+ <button class="button"
+ ng-if="selectedCredential.delete_time > 0"
+ ng-click="destroyCredential(selectedCredential)">
+ <span class="fa fa-bomb"></span> {{'destroy' | translate}}
+ </button>
+ </div>
+ </div>
</div>
<div class="share_popup" style="display: none" title="{{ 'sharereq.title' | translate }}">
diff --git a/templates/views/vaults.html b/templates/views/vaults.html
index d1b0e5fb..a7c2221b 100644
--- a/templates/views/vaults.html
+++ b/templates/views/vaults.html
@@ -96,27 +96,20 @@
</div>
<div class="login_opts">
<div>
- <label>
- <input type="checkbox" ng-checked="default_vault"
- ng-click="toggleDefaultVault()">
- {{ 'vault.default' | translate}}
- </label>
+ <input id="selectVaultAsDefault" class="checkbox" type="checkbox"
+ ng-checked="default_vault" ng-click="toggleDefaultVault()">
+ <label for="selectVaultAsDefault">{{ 'vault.default' | translate}}</label>
</div>
<div>
- <label>
- <input type="checkbox"
- ng-checked="remember_vault_password"
- ng-click="toggleRememberPassword()">
- {{ 'vault.auto.login' | translate}}
- </label>
+ <input id="rememberVaultPassword" class="checkbox" type="checkbox"
+ ng-checked="remember_vault_password" ng-click="toggleRememberPassword()">
+ <label for="rememberVaultPassword">{{ 'vault.auto.login' | translate}}</label>
</div>
<div>
- <label>
- <input type="checkbox"
- ng-checked="auto_logout_timer"
- ng-click="toggleAutoLogout()">
- {{ 'auto.logout' | translate}}
- </label>
+ <input id="enableAutoLogoutTimer" class="checkbox" type="checkbox"
+ ng-checked="auto_logout_timer" ng-click="toggleAutoLogout()">
+ <label for="enableAutoLogoutTimer">{{ 'auto.logout' | translate}}</label>
+
<select ng-model="logout_timer" ng-change="selectLogoutTimer(logout_timer)">
<option value="0">Never</option>
<option value="30">30 minutes</option>
@@ -141,4 +134,4 @@
</div>
</div>
-</div> \ No newline at end of file
+</div>