diff options
author | Marcos Zuriaga <wolfi@wolfi.es> | 2022-10-25 21:52:36 +0300 |
---|---|---|
committer | Marcos Zuriaga <wolfi@wolfi.es> | 2022-10-25 21:52:36 +0300 |
commit | 531c4b00779d9f1c08934bff361645e69749e506 (patch) | |
tree | fad607e876f0934522cecb108c071de059ec8b8a | |
parent | cb467c9fa3e1c604f0c0bbe439f5eecef02b0109 (diff) | |
parent | 4175c836feae1b91beff242dfb9307093fada8ee (diff) |
Merge branch 'nc_25_support'
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": "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", +"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,kBAAmB;EACjB,WAAW,EAAE,eAAe;EAC5B,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;;AAIf,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,IAAI;IACb,mCAAc;MACZ,YAAY,EAAE,IAAI;MAClB,oDAAgB;QACd,KAAK,EAAE,IAAI;MAEb,qCAAE;QACA,KAAK,EAAE,IAAI;IAGf,oCAAc;MACZ,KAAK,EAAC,KAAK;;AAKjB,yBAAyB;EACvB,KAAK,EAAE,gBAAgB;EACvB,WAAW,EAAE,cAAc;;AAE7B,YAAa;EACX,QAAQ,EAAE,MAAM;EAShB,UAAU,EAAE,MAAM;EAPlB,0CAA2C;IAH7C,YAAa;MAIT,KAAK,EAAE,KAAK;EAEd,0CAA2C;IAN7C,YAAa;MAOT,KAAK,EAAE,mBAAmB;EAM5B,iCAAqB;IACnB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAC,IAAI;IAEZ,KAAK,EAAE,IAAI;IACX,aAAa,EAAE,IAAI;IAEnB,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;IAOrB,qEAAc;MACZ,SAAS,EAAE,kBAAiB;IAIhC,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;MAcX,OAAO,EAAE,IAAI;MAKb,UAAU,EAAE,IAAI;MAlBhB,iDAAG;QACD,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,GAAG;QAChB,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;IRnpBjB,iCAAiC,EQopBH,CAAC;IRnpB/B,yBAAyB,EQmpBK,CAAC;IRlpB/B,8BAA8B,EQkpBA,CAAC;IRjpB/B,sBAAsB,EQipBQ,CAAC;IRhpB/B,eAAe,EAAE,WAAW;EQkpB5B,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;MR/pBnB,iCAAiC,EQgqBD,GAAG;MR/pBnC,yBAAyB,EQ+pBO,GAAG;MR9pBnC,8BAA8B,EQ8pBE,GAAG;MR7pBnC,sBAAsB,EQ6pBU,GAAG;MR5pBnC,eAAe,EAAE,WAAW;IQ8pB1B,oCAAY;MACV,KAAK,EAAE,OAAgB;;ACjuB7B;;;;;;;;;;;;;;;;;;;;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,4BAA4B;IAMhD,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;;AAIlB,KAAM;EACJ,KAAK,EAAE,IAAI;EACX,UAAK;IACH,gBAAgB,EAAE,wBAAuB;IACzC,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,IAAI;;AAIjB,gBAAM;EACJ,KAAK,EAAE,IAAI;EACX,uBAAO;IACL,KAAK,EAAE,eAAc;EAEvB,0BAAU;IACR,KAAK,EAAE,yBAAyB;;ACrFtC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,aAAc;EACZ,OAAO,EAAE,gBAAe;;AAE1B,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;;AAGjB,0CAAa;EACX,OAAO,EAAE,KAAK;AAEhB,iGAAqD;EACnD,KAAK,EAAE,IAAI;;AAGf,+BAAgC;EAC9B,aAAa,EAAE,IAAI;;AAErB,+BAAgC;EAC9B,aAAa,EAAE,IAAI;;AAErB,aAAc;EACZ,OAAO,EAAE,IAAI;;AAEf,mCAAmC;EACjC,YAAY,EAAE,YAAY;;AC9G5B;;;;;;;;;;;;;;;;;;;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,aAAa;EACrB,KAAK,EAAE,CAAC;EACR,IAAI,EAAE,CAAC;EACP,aAAa,EAAE,iBAAiB;EAEhC,OAAO,EAAE,EAAE;EACX,mBAAmB,EAAE,IAAI;EACzB,gBAAgB,EAAE,IAAI;EACtB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,eAAe;EAE3B,aAAa,EAAE,eAAe;EAI5B,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;AAIf,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", "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] </span>'); + var accept = $('<span class="link accept">[Accept] </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> |