1
0
mirror of https://github.com/bitwarden/web synced 2025-12-17 16:53:14 +00:00

Update 2017-05-20T13:06:17.455Z

This commit is contained in:
Kyle Spearrin
2017-05-20 09:06:23 -04:00
parent 4dbeff6644
commit ab6b70c63e
45 changed files with 602 additions and 106 deletions

View File

@@ -1,7 +1,7 @@
<p class="login-box-msg">Log in to access your vault.</p> <p class="login-box-msg">Log in to access your vault.</p>
<form name="loginForm" ng-submit="loginForm.$valid && login(model)" api-form="loginPromise"> <form name="loginForm" ng-submit="loginForm.$valid && login(model)" api-form="loginPromise">
<div class="callout callout-danger validation-errors" ng-show="loginForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="loginForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in loginForm.$errors">{{e}}</li> <li ng-repeat="e in loginForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -1,7 +1,7 @@
<p class="login-box-msg">Enter your two-step verification code.</p> <p class="login-box-msg">Enter your two-step verification code.</p>
<form name="twoFactorForm" ng-submit="twoFactorForm.$valid && twoFactor(model)" api-form="twoFactorPromise"> <form name="twoFactorForm" ng-submit="twoFactorForm.$valid && twoFactor(model)" api-form="twoFactorPromise">
<div class="callout callout-danger validation-errors" ng-show="twoFactorForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="twoFactorForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in twoFactorForm.$errors">{{e}}</li> <li ng-repeat="e in twoFactorForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -13,7 +13,7 @@
<form name="passwordHintForm" ng-submit="passwordHintForm.$valid && submit(model)" ng-show="!success" <form name="passwordHintForm" ng-submit="passwordHintForm.$valid && submit(model)" ng-show="!success"
api-form="submitPromise"> api-form="submitPromise">
<div class="callout callout-danger validation-errors" ng-show="passwordHintForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="passwordHintForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in passwordHintForm.$errors">{{e}}</li> <li ng-repeat="e in passwordHintForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -13,7 +13,7 @@
<form name="recoverForm" ng-submit="recoverForm.$valid && submit(model)" ng-show="!success" <form name="recoverForm" ng-submit="recoverForm.$valid && submit(model)" ng-show="!success"
api-form="submitPromise"> api-form="submitPromise">
<div class="callout callout-danger validation-errors" ng-show="recoverForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="recoverForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in recoverForm.$errors">{{e}}</li> <li ng-repeat="e in recoverForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -18,7 +18,7 @@
<p>Before creating your organization, you first need to create a free personal account.</p> <p>Before creating your organization, you first need to create a free personal account.</p>
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="registerForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="registerForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in registerForm.$errors">{{e}}</li> <li ng-repeat="e in registerForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -22,7 +22,7 @@
</p> </p>
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="form.$errors"> <div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in form.$errors">{{e}}</li> <li ng-repeat="e in form.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -8,7 +8,7 @@
<form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise"> <form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="form.$errors"> <div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in form.$errors">{{e}}</li> <li ng-repeat="e in form.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -4,8 +4,9 @@
</div> </div>
<form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise"> <form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise">
<div class="modal-body"> <div class="modal-body">
Coming soon. In the meantime, please <a href="https://bitwarden.com/contact/" target="_blank">contact us</a> You can <a href="https://bitwarden.com/contact/" target="_blank">contact us</a>
if you would like to change your plan. if you would like to change your plan. Please ensure that you have an active payment
method on file.
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button> <button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button>

View File

@@ -48,11 +48,6 @@
<i class="fa fa-fw fa-users"></i> Users <i class="fa fa-fw fa-users"></i> Users
</a> </a>
</li> </li>
<li>
<a href="javascript:void(0)" ng-click="groups(collection)">
<i class="fa fa-fw fa-sitemap"></i> Groups
</a>
</li>
<li> <li>
<a href="javascript:void(0)" ng-click="delete(collection)" class="text-red"> <a href="javascript:void(0)" ng-click="delete(collection)" class="text-red">
<i class="fa fa-fw fa-trash"></i> Delete <i class="fa fa-fw fa-trash"></i> Delete

View File

@@ -4,16 +4,6 @@
</div> </div>
<form name="form" ng-submit="form.$valid && submit(model)" api-form="submitPromise"> <form name="form" ng-submit="form.$valid && submit(model)" api-form="submitPromise">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div class="form-group" show-errors>
<label for="email">Name</label>
<input type="text" id="name" name="Name" ng-model="model.name" class="form-control" required api-field />
</div>
<div class="callout callout-default"> <div class="callout callout-default">
<h4><i class="fa fa-info-circle"></i> Note</h4> <h4><i class="fa fa-info-circle"></i> Note</h4>
<p> <p>
@@ -24,6 +14,65 @@
login from "My vault". login from "My vault".
</p> </p>
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occurred</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div class="form-group" show-errors>
<label for="email">Name</label>
<input type="text" id="name" name="Name" ng-model="model.name" class="form-control" required api-field />
</div>
<div ng-if="useGroups">
<h4>Group Access</h4>
<div ng-show="loading && !groups.length">
Loading groups...
</div>
<div ng-show="!loading && !groups.length">
<p>No groups for your organization.</p>
</div>
<div class="table-responsive" ng-show="groups.length" style="margin: 0;">
<table class="table table-striped table-hover" style="margin: 0;">
<thead>
<tr>
<th style="width: 40px;">
<input type="checkbox"
ng-checked="allSelected()"
ng-click="toggleGroupSelectionAll($event)">
</th>
<th>Name</th>
<th style="width: 100px; text-align: center;">Read Only</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="group in groups | orderBy: ['name']">
<td valign="middle">
<input type="checkbox"
name="selectedGroups[]"
value="{{group.id}}"
ng-checked="groupSelected(group)"
ng-click="toggleGroupSelection(group.id)"
ng-disabled="group.accessAll">
</td>
<td valign="middle">
{{group.name}}
<i class="fa fa-unlock text-muted fa-fw" ng-show="group.accessAll"
title="This group can access all items"></i>
</td>
<td style="width: 100px; text-align: center;" valign="middle">
<input type="checkbox"
name="selectedGroupsReadonly[]"
value="{{group.id}}"
ng-disabled="!groupSelected(group) || group.accessAll"
ng-checked="groupSelected(group) && selectedGroups[group.id].readOnly"
ng-click="toggleGroupReadOnlySelection(group)">
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="form.$loading"> <button type="submit" class="btn btn-primary btn-flat" ng-disabled="form.$loading">

View File

@@ -4,16 +4,6 @@
</div> </div>
<form name="form" ng-submit="form.$valid && submit(collection)" api-form="submitPromise"> <form name="form" ng-submit="form.$valid && submit(collection)" api-form="submitPromise">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div class="form-group" show-errors>
<label for="email">Name</label>
<input type="text" id="name" name="Name" ng-model="collection.name" class="form-control" required api-field />
</div>
<div class="callout callout-default"> <div class="callout callout-default">
<h4><i class="fa fa-info-circle"></i> Note</h4> <h4><i class="fa fa-info-circle"></i> Note</h4>
<p> <p>
@@ -25,6 +15,65 @@
login from "My vault". login from "My vault".
</p> </p>
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occurred</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div class="form-group" show-errors>
<label for="email">Name</label>
<input type="text" id="name" name="Name" ng-model="collection.name" class="form-control" required api-field />
</div>
<div ng-if="useGroups">
<h4>Group Access</h4>
<div ng-show="loading && !groups.length">
Loading groups...
</div>
<div ng-show="!loading && !groups.length">
<p>No groups for your organization.</p>
</div>
<div class="table-responsive" ng-show="groups.length" style="margin: 0;">
<table class="table table-striped table-hover" style="margin: 0;">
<thead>
<tr>
<th style="width: 40px;">
<input type="checkbox"
ng-checked="allSelected()"
ng-click="toggleGroupSelectionAll($event)">
</th>
<th>Name</th>
<th style="width: 100px; text-align: center;">Read Only</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="group in groups | orderBy: ['name']">
<td valign="middle">
<input type="checkbox"
name="selectedGroups[]"
value="{{group.id}}"
ng-checked="groupSelected(group)"
ng-click="toggleGroupSelection(group.id)"
ng-disabled="group.accessAll">
</td>
<td valign="middle">
{{group.name}}
<i class="fa fa-unlock text-muted fa-fw" ng-show="group.accessAll"
title="This group can access all items"></i>
</td>
<td style="width: 100px; text-align: center;" valign="middle">
<input type="checkbox"
name="selectedGroupsReadonly[]"
value="{{group.id}}"
ng-disabled="!groupSelected(group) || group.accessAll"
ng-checked="groupSelected(group) && selectedGroups[group.id].readOnly"
ng-click="toggleGroupReadOnlySelection(group)">
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="form.$loading"> <button type="submit" class="btn btn-primary btn-flat" ng-disabled="form.$loading">

View File

@@ -1,10 +0,0 @@
<div class="modal-header">
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title"><i class="fa fa-sitemap"></i> Groups <small>{{collection.name}}</small></h4>
</div>
<div class="modal-body">
Groups are coming soon to bitwarden Enterprise organizations.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button>
</div>

View File

@@ -22,12 +22,12 @@
<i class="fa fa-cog"></i> <span class="caret"></span> <i class="fa fa-cog"></i> <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li ng-show="user.id"> <li ng-show="!user.accessAll">
<a href="javascript:void(0)" ng-click="remove(user)" class="text-red"> <a href="javascript:void(0)" ng-click="remove(user)" class="text-red">
<i class="fa fa-fw fa-remove"></i> Remove <i class="fa fa-fw fa-remove"></i> Remove
</a> </a>
</li> </li>
<li ng-show="!user.id"> <li ng-show="user.accessAll">
<a href="javascript:void(0)"> <a href="javascript:void(0)">
No options... No options...
</a> </a>

View File

@@ -14,7 +14,7 @@
Deleting this organization is permanent. It cannot be undone. Deleting this organization is permanent. It cannot be undone.
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="form.$errors"> <div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in form.$errors">{{e}}</li> <li ng-repeat="e in form.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -7,10 +7,64 @@
<section class="content"> <section class="content">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">Coming soon...</h3> &nbsp;
<div class="box-filters hidden-xs">
<div class="form-group form-group-sm has-feedback has-feedback-left">
<input type="text" id="search" class="form-control" placeholder="Search groups..."
style="width: 200px;" ng-model="filterSearch">
<span class="fa fa-search form-control-feedback text-muted" aria-hidden="true"></span>
</div>
</div>
<div class="box-tools">
<button type="button" class="btn btn-primary btn-sm btn-flat" ng-click="add()">
<i class="fa fa-fw fa-plus-circle"></i> New Group
</button>
</div>
</div>
<div class="box-body" ng-class="{'no-padding': filteredGroups.length}">
<div ng-show="loading && !groups.length">
Loading...
</div>
<div ng-show="!filteredGroups.length && filterSearch">
No groups to list.
</div>
<div ng-show="!loading && !groups.length">
<p>There are no groups yet for your organization.</p>
<button type="button" ng-click="add()" class="btn btn-default btn-flat">Add a Group</button>
</div>
<div class="table-responsive" ng-show="groups.length">
<table class="table table-striped table-hover table-vmiddle">
<tbody>
<tr ng-repeat="group in filteredGroups = (groups | filter: (filterSearch || '') |
orderBy: ['name']) track by group.id">
<td style="width: 70px;">
<div class="btn-group" data-append-to="body">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-cog"></i> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li>
<a href="javascript:void(0)" ng-click="users(group)">
<i class="fa fa-fw fa-users"></i> Users
</a>
</li>
<li>
<a href="javascript:void(0)" ng-click="delete(group)" class="text-red">
<i class="fa fa-fw fa-trash"></i> Delete
</a>
</li>
</ul>
</div>
</td>
<td valign="middle">
<a href="javascript:void(0)" ng-click="edit(group)">
{{group.name}}
</a>
</td>
</tr>
</tbody>
</table>
</div> </div>
<div class="box-body">
<p>Groups are coming soon to bitwarden Enterprise organizations.</p>
</div> </div>
</div> </div>
</section> </section>

View File

@@ -0,0 +1,95 @@
<div class="modal-header">
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title"><i class="fa fa-sitemap"></i> Add New Group</h4>
</div>
<form name="form" ng-submit="form.$valid && submit(model)" api-form="submitPromise">
<div class="modal-body">
<div class="callout callout-default">
<h4><i class="fa fa-info-circle"></i> Note</h4>
<p>
After creating the group, you can associate a user to it by selecting the "Groups" option for a specific user
on the "People" page.
</p>
</div>
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occurred</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div class="form-group" show-errors>
<label for="name">Name</label>
<input type="text" id="name" name="Name" ng-model="model.name" class="form-control" required api-field />
</div>
<div class="form-group" show-errors>
<label for="externalId">External Id</label>
<input type="text" id="externalId" name="ExternalId" ng-model="model.externalId" class="form-control" api-field />
</div>
<h4>Access</h4>
<div class="radio">
<label>
<input type="radio" ng-model="model.accessAll" name="AccessAll"
ng-value="true" ng-checked="model.accessAll">
This group can access and modify <u>all items</u>.
</label>
</div>
<div class="radio">
<label>
<input type="radio" ng-model="model.accessAll" name="AccessAll"
ng-value="false" ng-checked="!model.accessAll">
This group can access only the selected collections.
</label>
</div>
<div ng-show="!model.accessAll">
<div ng-show="loading && !collections.length">
Loading collections...
</div>
<div ng-show="!loading && !collections.length">
<p>No collections for your organization.</p>
</div>
<div class="table-responsive" ng-show="collections.length" style="margin: 0;">
<table class="table table-striped table-hover" style="margin: 0;">
<thead>
<tr>
<th style="width: 40px;">
<input type="checkbox"
ng-checked="allSelected()"
ng-click="toggleCollectionSelectionAll($event)">
</th>
<th>Name</th>
<th style="width: 100px; text-align: center;">Read Only</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="collection in collections | orderBy: ['name']">
<td valign="middle">
<input type="checkbox"
name="selectedCollections[]"
value="{{collection.id}}"
ng-checked="collectionSelected(collection)"
ng-click="toggleCollectionSelection(collection.id)">
</td>
<td valign="middle">
{{collection.name}}
</td>
<td style="width: 100px; text-align: center;" valign="middle">
<input type="checkbox"
name="selectedCollectionsReadonly[]"
value="{{collection.id}}"
ng-disabled="!collectionSelected(collection)"
ng-checked="collectionSelected(collection) && selectedCollections[collection.id].readOnly"
ng-click="toggleCollectionReadOnlySelection(collection.id)">
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="form.$loading">
<i class="fa fa-refresh fa-spin loading-icon" ng-show="form.$loading"></i>Submit
</button>
<button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button>
</div>
</form>

View File

@@ -0,0 +1,95 @@
<div class="modal-header">
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title"><i class="fa fa-sitemap"></i> Edit Group</h4>
</div>
<form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise">
<div class="modal-body">
<div class="callout callout-default">
<h4><i class="fa fa-info-circle"></i> Note</h4>
<p>
Select "Users" from the listing options to manage existing users for this group. Associate new users by
selecting "Groups" the "People" page for a specific user.
</p>
</div>
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occurred</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div class="form-group" show-errors>
<label for="name">Name</label>
<input type="text" id="name" name="Name" ng-model="group.name" class="form-control" required api-field />
</div>
<div class="form-group" show-errors>
<label for="externalId">External Id</label>
<input type="text" id="externalId" name="ExternalId" ng-model="group.externalId" class="form-control" api-field />
</div>
<h4>Access</h4>
<div class="radio">
<label>
<input type="radio" ng-model="group.accessAll" name="AccessAll"
ng-value="true" ng-checked="group.accessAll">
This group can access and modify <u>all items</u>.
</label>
</div>
<div class="radio">
<label>
<input type="radio" ng-model="group.accessAll" name="AccessAll"
ng-value="false" ng-checked="!group.accessAll">
This group can access only the selected collections.
</label>
</div>
<div ng-show="!group.accessAll">
<div ng-show="loading && !collections.length">
Loading collections...
</div>
<div ng-show="!loading && !collections.length">
<p>No collections for your organization.</p>
</div>
<div class="table-responsive" ng-show="collections.length" style="margin: 0;">
<table class="table table-striped table-hover" style="margin: 0;">
<thead>
<tr>
<th style="width: 40px;">
<input type="checkbox"
ng-checked="allSelected()"
ng-click="toggleCollectionSelectionAll($event)">
</th>
<th>Name</th>
<th style="width: 100px; text-align: center;">Read Only</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="collection in collections | orderBy: ['name']">
<td valign="middle">
<input type="checkbox"
name="selectedCollections[]"
value="{{collection.id}}"
ng-checked="collectionSelected(collection)"
ng-click="toggleCollectionSelection(collection.id)">
</td>
<td valign="middle">
{{collection.name}}
</td>
<td style="width: 100px; text-align: center;" valign="middle">
<input type="checkbox"
name="selectedCollectionsReadonly[]"
value="{{collection.id}}"
ng-disabled="!collectionSelected(collection)"
ng-checked="collectionSelected(collection) && selectedCollections[collection.id].readOnly"
ng-click="toggleCollectionReadOnlySelection(collection.id)">
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="form.$loading">
<i class="fa fa-refresh fa-spin loading-icon" ng-show="form.$loading"></i>Submit
</button>
<button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button>
</div>
</form>

View File

@@ -0,0 +1,55 @@
<div class="modal-header">
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title"><i class="fa fa-users"></i> User Access <small>{{group.name}}</small></h4>
</div>
<div class="modal-body">
<div ng-show="loading && !users.length">
Loading...
</div>
<div ng-show="!loading && !users.length">
<p>
No users for this group. You can associate a new user to this group by
selecting a specific user's "Groups" on the "People" page.
</p>
</div>
<div class="table-responsive" ng-show="users.length" style="margin: 0;">
<table class="table table-striped table-hover table-vmiddle" style="margin: 0;">
<tbody>
<tr ng-repeat="user in users | orderBy: ['email']">
<td style="width: 70px;">
<div class="btn-group" data-append-to=".modal">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-cog"></i> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li ng-show="user.organizationUserId">
<a href="javascript:void(0)" ng-click="remove(user)" class="text-red">
<i class="fa fa-fw fa-remove"></i> Remove
</a>
</li>
</ul>
</div>
</td>
<td style="width: 45px;">
<letter-avatar data="{{user.name || user.email}}"></letter-avatar>
</td>
<td>
{{user.email}}
<div ng-if="user.name"><small class="text-muted">{{user.name}}</small></div>
</td>
<td style="width: 100px;">
{{user.type | enumName: 'OrgUserType'}}
</td>
<td style="width: 120px;">
<span class="label {{user.status | enumLabelClass: 'OrgUserStatus'}}">
{{user.status | enumName: 'OrgUserStatus'}}
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button>
</div>

View File

@@ -37,10 +37,15 @@
</button> </button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<a href="javascript:void(0)" ng-click="edit(user.id)"> <a href="javascript:void(0)" ng-click="edit(user)">
<i class="fa fa-fw fa-pencil"></i> Edit <i class="fa fa-fw fa-pencil"></i> Edit
</a> </a>
</li> </li>
<li>
<a href="javascript:void(0)" ng-click="groups(user)" ng-if="useGroups">
<i class="fa fa-fw fa-sitemap"></i> Groups
</a>
</li>
<li ng-show="user.status === 1"> <li ng-show="user.status === 1">
<a href="javascript:void(0)" ng-click="confirm(user)"> <a href="javascript:void(0)" ng-click="confirm(user)">
<i class="fa fa-fw fa-check"></i> Confirm <i class="fa fa-fw fa-check"></i> Confirm
@@ -63,7 +68,7 @@
<letter-avatar data="{{user.name || user.email}}"></letter-avatar> <letter-avatar data="{{user.name || user.email}}"></letter-avatar>
</td> </td>
<td> <td>
<a href="javascript:void(0)" ng-click="edit(user.id)">{{user.email}}</a> <a href="javascript:void(0)" ng-click="edit(user)">{{user.email}}</a>
<i class="fa fa-unlock text-muted" ng-show="user.accessAll" <i class="fa fa-unlock text-muted" ng-show="user.accessAll"
title="Can Access All Items"></i> title="Can Access All Items"></i>
<div ng-if="user.name"><small class="text-muted">{{user.name}}</small></div> <div ng-if="user.name"><small class="text-muted">{{user.name}}</small></div>

View File

@@ -5,7 +5,7 @@
<form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise"> <form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="form.$errors"> <div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in form.$errors">{{e}}</li> <li ng-repeat="e in form.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -0,0 +1,55 @@
<div class="modal-header">
<button type="button" class="close" ng-click="close()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title"><i class="fa fa-sitemap"></i> Edit User Groups <small>{{orgUser.email}}</small></h4>
</div>
<form name="form" ng-submit="form.$valid && submit()" api-form="submitPromise">
<div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occurred</h4>
<ul>
<li ng-repeat="e in form.$errors">{{e}}</li>
</ul>
</div>
<div ng-show="loading && !groups.length">
Loading...
</div>
<div ng-show="!loading && !groups.length">
<p>No groups for your organization.</p>
</div>
<p ng-show="groups.length">Edit the groups that this user belongs to.</p>
<div class="table-responsive" ng-show="groups.length" style="margin: 0;">
<table class="table table-striped table-hover" style="margin: 0;">
<thead>
<tr>
<th style="width: 40px;">
<input type="checkbox"
ng-checked="allSelected()"
ng-click="toggleGroupSelectionAll($event)">
</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="group in groups | orderBy: ['name']">
<td valign="middle">
<input type="checkbox"
name="selectedGroups[]"
value="{{group.id}}"
ng-checked="groupSelected(group)"
ng-click="toggleGroupSelection(group.id)">
</td>
<td valign="middle">
{{group.name}}
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="form.$loading">
<i class="fa fa-refresh fa-spin loading-icon" ng-show="form.$loading"></i>Submit
</button>
<button type="button" class="btn btn-default btn-flat" ng-click="close()">Close</button>
</div>
</form>

View File

@@ -9,14 +9,15 @@
a bitwarden account already, they will be prompted to create a new account. a bitwarden account already, they will be prompted to create a new account.
</p> </p>
<div class="callout callout-danger validation-errors" ng-show="inviteForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="inviteForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in inviteForm.$errors">{{e}}</li> <li ng-repeat="e in inviteForm.$errors">{{e}}</li>
</ul> </ul>
</div> </div>
<div class="form-group" show-errors> <div class="form-group" show-errors>
<label for="email">Email</label> <label for="emails">Email</label>
<input type="email" id="email" name="Email" ng-model="model.email" class="form-control" required api-field /> <input type="text" id="emails" name="Emails" ng-model="model.emails" class="form-control" required api-field />
<p class="help-block">You can invite up to 20 users at a time by comma separating a list of email addresses.</p>
</div> </div>
<h4>User Type</h4> <h4>User Type</h4>
<div class="form-group"> <div class="form-group">

View File

@@ -14,7 +14,7 @@
<div class="row"> <div class="row">
<div class="col-sm-9"> <div class="col-sm-9">
<div class="callout callout-danger validation-errors" ng-show="generalForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="generalForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in generalForm.$errors">{{e}}</li> <li ng-repeat="e in generalForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -6,7 +6,7 @@
<div class="modal-body"> <div class="modal-body">
<p>Edit the collections that this login is being shared with.</p> <p>Edit the collections that this login is being shared with.</p>
<div class="callout callout-danger validation-errors" ng-show="form.$errors"> <div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in form.$errors">{{e}}</li> <li ng-repeat="e in form.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -14,7 +14,7 @@
<div class="row"> <div class="row">
<div class="col-sm-9"> <div class="col-sm-9">
<div class="callout callout-danger validation-errors" ng-show="generalForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="generalForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in generalForm.$errors">{{e}}</li> <li ng-repeat="e in generalForm.$errors">{{e}}</li>
</ul> </ul>
@@ -62,7 +62,7 @@
<div class="row"> <div class="row">
<div class="col-sm-9"> <div class="col-sm-9">
<div class="callout callout-danger validation-errors" ng-show="masterPasswordForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="masterPasswordForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in masterPasswordForm.$errors">{{e}}</li> <li ng-repeat="e in masterPasswordForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -5,7 +5,7 @@
<form name="domainAddEditForm" ng-submit="domainAddEditForm.$valid && submit(domainAddEditForm)"> <form name="domainAddEditForm" ng-submit="domainAddEditForm.$valid && submit(domainAddEditForm)">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="domainAddEditForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="domainAddEditForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in domainAddEditForm.$errors">{{e}}</li> <li ng-repeat="e in domainAddEditForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -6,7 +6,7 @@
<div class="modal-body"> <div class="modal-body">
<p>Below you can change your account's email address.</p> <p>Below you can change your account's email address.</p>
<div class="callout callout-danger validation-errors" ng-show="changeEmailForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="changeEmailForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in changeEmailForm.$errors">{{e}}</li> <li ng-repeat="e in changeEmailForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -11,7 +11,7 @@
Proceeding will log you out of your current session, requiring you to log back in. Proceeding will log you out of your current session, requiring you to log back in.
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="changePasswordForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="changePasswordForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in changePasswordForm.$errors">{{e}}</li> <li ng-repeat="e in changePasswordForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -13,7 +13,7 @@
</div> </div>
<div class="box-body"> <div class="box-body">
<div class="callout callout-danger validation-errors" ng-show="createOrgForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="createOrgForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in createOrgForm.$errors">{{e}}</li> <li ng-repeat="e in createOrgForm.$errors">{{e}}</li>
</ul> </ul>
@@ -78,7 +78,7 @@
<span>- Priority customer support</span> <span>- Priority customer support</span>
<span>- 7 day free trial, cancel anytime</span> <span>- 7 day free trial, cancel anytime</span>
<span class="bottom-line"> <span class="bottom-line">
{{plans.personal.basePrice | currency:'$'}} /month for {{plans.personal.baseSeats}} users, {{plans.personal.basePrice | currency:'$'}} /month includes {{plans.personal.baseSeats}} users,
additional users {{plans.personal.seatPrice | currency:'$'}} /month additional users {{plans.personal.seatPrice | currency:'$'}} /month
</span> </span>
</label> </label>
@@ -93,11 +93,27 @@
<span>- Priority customer support</span> <span>- Priority customer support</span>
<span>- 7 day free trial, cancel anytime</span> <span>- 7 day free trial, cancel anytime</span>
<span class="bottom-line"> <span class="bottom-line">
{{plans.teams.basePrice | currency:'$'}} /month for {{plans.teams.baseSeats}} users, {{plans.teams.basePrice | currency:'$'}} /month includes {{plans.teams.baseSeats}} users,
additional users {{plans.teams.seatPrice | currency:'$'}} /month additional users {{plans.teams.seatPrice | currency:'$'}} /month
</span> </span>
</label> </label>
</div> </div>
<div class="radio radio-block" ng-click="changedPlan()">
<label>
<input type="radio" ng-model="model.plan" name="PlanType" value="enterprise">
Enterprise
<span>For businesses and other large organizations.</span>
<span>- Add and share with unlimited users</span>
<span>- Create unlimited collections</span>
<span>- Control user access with groups</span>
<span>- Sync your users and groups from a directory (AD, Azure AD, GSuite, LDAP)</span>
<span>- Priority customer support</span>
<span>- 7 day free trial, cancel anytime</span>
<span class="bottom-line">
{{plans.enterprise.seatPrice | currency:'$'}} per user /month
</span>
</label>
</div>
</div> </div>
<div class="box-footer" ng-show="plans[model.plan].noPayment"> <div class="box-footer" ng-show="plans[model.plan].noPayment">
<button type="submit" class="btn btn-primary btn-flat" ng-disabled="createOrgForm.$loading"> <button type="submit" class="btn btn-primary btn-flat" ng-disabled="createOrgForm.$loading">
@@ -105,7 +121,7 @@
</button> </button>
</div> </div>
</div> </div>
<div class="box box-default" ng-if="!plans[model.plan].noAdditionalSeats"> <div class="box box-default" ng-if="!plans[model.plan].noAdditionalSeats && plans[model.plan].baseSeats">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">Additional Users (Seats)</h3> <h3 class="box-title">Additional Users (Seats)</h3>
</div> </div>
@@ -129,6 +145,27 @@
</div> </div>
</div> </div>
</div> </div>
<div class="box box-default" ng-if="!plans[model.plan].noAdditionalSeats && !plans[model.plan].baseSeats">
<div class="box-header with-border">
<h3 class="box-title">Users (Seats)</h3>
</div>
<div class="box-body">
<p>
How many user seats do you need?
You can also add additional seats later if needed.
</p>
<div class="row">
<div class="col-md-4">
<div class="form-group" show-errors style="margin: 0;">
<label for="additionalSeats" class="sr-only">Users</label>
<input type="number" id="additionalSeats" name="AdditionalSeats" ng-model="model.additionalSeats"
min="1" class="form-control" placeholder="# of users" api-field
ng-attr-max="{{plans[model.plan].maxAdditionalSeats || 1000000}}" />
</div>
</div>
</div>
</div>
</div>
<div class="box box-default" ng-if="!plans[model.plan].noPayment"> <div class="box box-default" ng-if="!plans[model.plan].noPayment">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">Billing Summary</h3> <h3 class="box-title">Billing Summary</h3>
@@ -138,15 +175,17 @@
<label> <label>
<input type="radio" ng-model="model.interval" name="BillingInterval" value="year"> <input type="radio" ng-model="model.interval" name="BillingInterval" value="year">
Annually Annually
<span> <span ng-if="plans[model.plan].annualBasePrice">
Base price: Base price:
{{plans[model.plan].basePrice | currency:"$":2}} &times;12 mo. = {{plans[model.plan].basePrice | currency:"$":2}} &times;12 mo. =
{{plans[model.plan].annualBasePrice | currency:"$":2}} /year {{plans[model.plan].annualBasePrice | currency:"$":2}} /year
</span> </span>
<span> <span>
Additional users: <span ng-if="plans[model.plan].baseSeats">Additional users:</span>
<span ng-if="!plans[model.plan].baseSeats">Users:</span>
{{model.additionalSeats || 0}} &times;{{plans[model.plan].seatPrice | currency:"$":2}} {{model.additionalSeats || 0}} &times;{{plans[model.plan].seatPrice | currency:"$":2}}
&times;12 mo. = {{(model.additionalSeats * plans[model.plan].annualSeatPrice) | currency:"$":2}} /year &times;12 mo. =
{{((model.additionalSeats || 0) * plans[model.plan].annualSeatPrice) | currency:"$":2}} /year
</span> </span>
</label> </label>
</div> </div>
@@ -154,14 +193,16 @@
<label> <label>
<input type="radio" ng-model="model.interval" name="BillingInterval" value="month"> <input type="radio" ng-model="model.interval" name="BillingInterval" value="month">
Monthly Monthly
<span> <span ng-if="plans[model.plan].monthlyBasePrice">
Base price: Base price:
{{plans[model.plan].monthlyBasePrice | currency:"$":2}} /month {{plans[model.plan].monthlyBasePrice | currency:"$":2}} /month
</span> </span>
<span> <span>
Additional users: <span ng-if="plans[model.plan].baseSeats">Additional users:</span>
{{model.additionalSeats || 0}} &times;{{plans[model.plan].monthlySeatPrice | currency:"$":2}} = <span ng-if="!plans[model.plan].baseSeats">Users:</span>
{{(model.additionalSeats * plans[model.plan].monthlySeatPrice) | currency:"$":2}} /month {{model.additionalSeats || 0}}
&times;{{plans[model.plan].monthlySeatPrice | currency:"$":2}} =
{{((model.additionalSeats || 0) * plans[model.plan].monthlySeatPrice) | currency:"$":2}} /month
</span> </span>
</label> </label>
</div> </div>

View File

@@ -10,7 +10,7 @@
Deleting your account is permanent. It cannot be undone. Deleting your account is permanent. It cannot be undone.
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="deleteAccountForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="deleteAccountForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in deleteAccountForm.$errors">{{e}}</li> <li ng-repeat="e in deleteAccountForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -12,7 +12,7 @@
Proceeding will log you out of your current session as well, requiring you to log back in. Proceeding will log you out of your current session as well, requiring you to log back in.
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="logoutSessionsForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="logoutSessionsForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in logoutSessionsForm.$errors">{{e}}</li> <li ng-repeat="e in logoutSessionsForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -11,7 +11,7 @@
</p> </p>
<p ng-show="!enabled()">To get started with two-step log in enter your master password below.</p> <p ng-show="!enabled()">To get started with two-step log in enter your master password below.</p>
<div class="callout callout-danger validation-errors" ng-show="authTwoStepForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="authTwoStepForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in authTwoStepForm.$errors">{{e}}</li> <li ng-repeat="e in authTwoStepForm.$errors">{{e}}</li>
</ul> </ul>
@@ -105,7 +105,7 @@
</div> </div>
<hr ng-show="enabled()" /> <hr ng-show="enabled()" />
<div class="callout callout-danger validation-errors" ng-show="updateTwoStepForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="updateTwoStepForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in updateTwoStepForm.$errors">{{e}}</li> <li ng-repeat="e in updateTwoStepForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -11,7 +11,7 @@
over unsecure channels (such as email). Delete it immediately after you are done using it. over unsecure channels (such as email). Delete it immediately after you are done using it.
</div> </div>
<div class="callout callout-danger validation-errors" ng-show="exportForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="exportForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in exportForm.$errors">{{e}}</li> <li ng-repeat="e in exportForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -5,7 +5,7 @@
<form name="importForm" ng-submit="importForm.$valid && import(model, importForm)" ng-show="!processing"> <form name="importForm" ng-submit="importForm.$valid && import(model, importForm)" ng-show="!processing">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="importForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="importForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in importForm.$errors">{{e}}</li> <li ng-repeat="e in importForm.$errors">{{e}}</li>
</ul> </ul>
@@ -14,7 +14,11 @@
<label for="source">1. Select the format of the import file</label> <label for="source">1. Select the format of the import file</label>
<select id="source" name="source" class="form-control" ng-model="model.source" ng-change="setSource()" required> <select id="source" name="source" class="form-control" ng-model="model.source" ng-change="setSource()" required>
<option value="">-- Select --</option> <option value="">-- Select --</option>
<option ng-repeat="option in options" value="{{option.id}}">{{option.name}}</option> <option ng-repeat="option in options | filter: { featured: true } | orderBy: ['sort', 'name']"
value="{{option.id}}">{{option.name}}</option>
<option value="-" disabled></option>
<option ng-repeat="option in options | filter: { featured: '!true' } | orderBy: ['sort', 'name']"
value="{{option.id}}">{{option.name}}</option>
</select> </select>
</div> </div>
<div class="callout callout-default" ng-show="model.source"> <div class="callout callout-default" ng-show="model.source">

View File

@@ -28,7 +28,7 @@
</button> </button>
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li> <li>
<a href="#" ng-click="addLogin(null, true)"> <a href="javascript:void(0)" ng-click="addLogin(null, true)">
<i class="fa fa-fw fa-plus-circle"></i> Add Login <i class="fa fa-fw fa-plus-circle"></i> Add Login
</a> </a>
</li> </li>
@@ -105,17 +105,17 @@
</button> </button>
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li> <li>
<a href="#" ng-click="addLogin(folder)"> <a href="javascript:void(0)" ng-click="addLogin(folder)">
<i class="fa fa-fw fa-plus-circle"></i> Add Login <i class="fa fa-fw fa-plus-circle"></i> Add Login
</a> </a>
</li> </li>
<li ng-show="folder.id"> <li ng-show="folder.id">
<a href="#" ng-click="editFolder(folder)"> <a href="javascript:void(0)" ng-click="editFolder(folder)">
<i class="fa fa-fw fa-pencil"></i> Edit Folder <i class="fa fa-fw fa-pencil"></i> Edit Folder
</a> </a>
</li> </li>
<li ng-show="canDeleteFolder(folder)"> <li ng-show="canDeleteFolder(folder)">
<a href="#" ng-click="deleteFolder(folder)" class="text-red"> <a href="javascript:void(0)" ng-click="deleteFolder(folder)" class="text-red">
<i class="fa fa-fw fa-trash"></i> Delete Folder <i class="fa fa-fw fa-trash"></i> Delete Folder
</a> </a>
</li> </li>

View File

@@ -5,7 +5,7 @@
<form name="addFolderForm" ng-submit="addFolderForm.$valid && save(folder)" api-form="savePromise"> <form name="addFolderForm" ng-submit="addFolderForm.$valid && save(folder)" api-form="savePromise">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="addFolderForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="addFolderForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in addFolderForm.$errors">{{e}}</li> <li ng-repeat="e in addFolderForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -5,7 +5,7 @@
<form name="addLoginForm" ng-submit="addLoginForm.$valid && save(login)" api-form="savePromise"> <form name="addLoginForm" ng-submit="addLoginForm.$valid && save(login)" api-form="savePromise">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="addLoginForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="addLoginForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in addLoginForm.$errors">{{e}}</li> <li ng-repeat="e in addLoginForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -5,7 +5,7 @@
<form name="editFolderForm" ng-submit="editFolderForm.$valid && save(folder)" api-form="savePromise"> <form name="editFolderForm" ng-submit="editFolderForm.$valid && save(folder)" api-form="savePromise">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="editFolderForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="editFolderForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in editFolderForm.$errors">{{e}}</li> <li ng-repeat="e in editFolderForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -7,7 +7,7 @@
<form name="editLoginForm" ng-submit="editLoginForm.$valid && save(login)" api-form="savePromise"> <form name="editLoginForm" ng-submit="editLoginForm.$valid && save(login)" api-form="savePromise">
<div class="modal-body"> <div class="modal-body">
<div class="callout callout-danger validation-errors" ng-show="editLoginForm.$errors"> <div class="callout callout-danger validation-errors" ng-show="editLoginForm.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in editLoginForm.$errors">{{e}}</li> <li ng-repeat="e in editLoginForm.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -6,7 +6,7 @@
<div class="modal-body"> <div class="modal-body">
<p>Edit the collections that this login is being shared with.</p> <p>Edit the collections that this login is being shared with.</p>
<div class="callout callout-danger validation-errors" ng-show="form.$errors"> <div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in form.$errors">{{e}}</li> <li ng-repeat="e in form.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -6,7 +6,7 @@
<div class="modal-body"> <div class="modal-body">
<p>Choose an organization that you wish to share this login with.</p> <p>Choose an organization that you wish to share this login with.</p>
<div class="callout callout-danger validation-errors" ng-show="form.$errors"> <div class="callout callout-danger validation-errors" ng-show="form.$errors">
<h4>Errors have occured</h4> <h4>Errors have occurred</h4>
<ul> <ul>
<li ng-repeat="e in form.$errors">{{e}}</li> <li ng-repeat="e in form.$errors">{{e}}</li>
</ul> </ul>

View File

@@ -80,10 +80,17 @@
</li> </li>
</ul> </ul>
</li> </li>
<li ng-class="{active: $state.is('backend.org.groups')}"> <li ng-class="{active: $state.is('backend.org.groups')}" ng-if="orgProfile.useGroups">
<a ui-sref="backend.org.groups({orgId: params.orgId})"> <a ui-sref="backend.org.groups({orgId: params.orgId})">
<i class="fa fa-sitemap fa-fw"></i> <span>Groups</span> <i class="fa fa-sitemap fa-fw"></i> <span>Groups</span>
</a> </a>
<ul class="treeview-menu" ng-class="{'menu-open': $state.includes('backend.org.groups')}">
<li>
<a href="javascript:void(0)" ng-click="addOrganizationGroup()">
<i class="fa fa-plus-circle fa-fw"></i> New Group
</a>
</li>
</ul>
</li> </li>
<li ng-class="{active: $state.is('backend.org.billing')}" ng-if="isOrgOwner(orgProfile)"> <li ng-class="{active: $state.is('backend.org.billing')}" ng-if="isOrgOwner(orgProfile)">
<a ui-sref="backend.org.billing({orgId: params.orgId})"> <a ui-sref="backend.org.billing({orgId: params.orgId})">

2
css/vault.min.css vendored

File diff suppressed because one or more lines are too long

View File

@@ -10,28 +10,28 @@
<script src="https://js.stripe.com/v2/"></script> <script src="https://js.stripe.com/v2/"></script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<meta name="x-stylesheet-test-bs" content="" class="invisible" /> <meta name="x-stylesheet-test-bs" content="" class="invisible" />
<script>!function(a,b,c){var d,e=document,f=e.getElementsByTagName('SCRIPT'),g=f[f.length-1].previousElementSibling,h=e.defaultView&&e.defaultView.getComputedStyle?e.defaultView.getComputedStyle(g):g.currentStyle;if(h&&h[a]!==b)for(d=0;d<c.length;d++)e.write('<link rel="stylesheet" href="'+c[d]+'"/>')}('visibility','hidden',['lib\/bootstrap\/css\/bootstrap.min.css?v=20v6wsl9pb9']);</script> <script>!function(a,b,c){var d,e=document,f=e.getElementsByTagName('SCRIPT'),g=f[f.length-1].previousElementSibling,h=e.defaultView&&e.defaultView.getComputedStyle?e.defaultView.getComputedStyle(g):g.currentStyle;if(h&&h[a]!==b)for(d=0;d<c.length;d++)e.write('<link rel="stylesheet" href="'+c[d]+'"/>')}('visibility','hidden',['lib\/bootstrap\/css\/bootstrap.min.css?v=quehf1dcxr']);</script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" /> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
<meta name="x-stylesheet-test-fa" content="" class="fa" /> <meta name="x-stylesheet-test-fa" content="" class="fa" />
<script>!function(a,b,c){var d,e=document,f=e.getElementsByTagName('SCRIPT'),g=f[f.length-1].previousElementSibling,h=e.defaultView&&e.defaultView.getComputedStyle?e.defaultView.getComputedStyle(g):g.currentStyle;if(h&&h[a]!==b)for(d=0;d<c.length;d++)e.write('<link rel="stylesheet" href="'+c[d]+'"/>')}('font-family','FontAwesome',['lib\/font-awesome\/css\/font-awesome.min.css?v=20v6wsl9pb9']);</script> <script>!function(a,b,c){var d,e=document,f=e.getElementsByTagName('SCRIPT'),g=f[f.length-1].previousElementSibling,h=e.defaultView&&e.defaultView.getComputedStyle?e.defaultView.getComputedStyle(g):g.currentStyle;if(h&&h[a]!==b)for(d=0;d<c.length;d++)e.write('<link rel="stylesheet" href="'+c[d]+'"/>')}('font-family','FontAwesome',['lib\/font-awesome\/css\/font-awesome.min.css?v=quehf1dcxr']);</script>
<link rel="stylesheet" href="css/vault.min.css?v=20v6wsl9pb9" /> <link rel="stylesheet" href="css/vault.min.css?v=quehf1dcxr" />
</head> </head>
<body ng-controller="mainController as main" class="layout-boxed skin-blue sidebar-mini {{main.bodyClass}}"> <body ng-controller="mainController as main" class="layout-boxed skin-blue sidebar-mini {{main.bodyClass}}">
<div ui-view></div> <div ui-view></div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script>(window.jQuery||document.write('<script src="lib\/jquery\/jquery.min.js?v=20v6wsl9pb9"><\/script>'));</script> <script>(window.jQuery||document.write('<script src="lib\/jquery\/jquery.min.js?v=quehf1dcxr"><\/script>'));</script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>((window.jQuery&&window.jQuery.fn&&window.jQuery.fn.modal)||document.write('<script src="lib\/bootstrap\/js\/bootstrap.min.js?v=20v6wsl9pb9"><\/script>'));</script> <script>((window.jQuery&&window.jQuery.fn&&window.jQuery.fn.modal)||document.write('<script src="lib\/bootstrap\/js\/bootstrap.min.js?v=quehf1dcxr"><\/script>'));</script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.3/angular.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.3/angular.min.js"></script>
<script>(window.angular||document.write('<script src="lib\/angular\/angular.min.js?v=20v6wsl9pb9"><\/script>'));</script> <script>(window.angular||document.write('<script src="lib\/angular\/angular.min.js?v=quehf1dcxr"><\/script>'));</script>
<script src="js/lib.min.js?v=20v6wsl9pb9"></script> <script src="js/lib.min.js?v=quehf1dcxr"></script>
<script src="js/app.min.js?v=20v6wsl9pb9"></script> <script src="js/app.min.js?v=quehf1dcxr"></script>
<script> <script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

10
js/app.min.js vendored

File diff suppressed because one or more lines are too long