1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-08-02 20:15:26 +02:00

Complete UI revamp for admin screens

This commit is contained in:
Harvey Kandola 2018-12-14 15:47:41 +00:00
parent edb256e754
commit 0ec0c65002
26 changed files with 376 additions and 284 deletions

View file

@ -12,9 +12,10 @@
import $ from 'jquery';
import AuthProvider from '../../mixins/auth';
import ModalMixin from '../../mixins/modal';
import Notifier from '../../mixins/notifier';
import Component from '@ember/component';
export default Component.extend(AuthProvider, ModalMixin, {
export default Component.extend(AuthProvider, ModalMixin, Notifier, {
bulkUsers: '',
newUser: null,
@ -51,6 +52,7 @@ export default Component.extend(AuthProvider, ModalMixin, {
this.get('onAddUser')(user).then(() => {
this.set('newUser', { firstname: '', lastname: '', email: '', active: true });
this.notifySuccess('Added user');
});
this.modalClose("#add-user-modal");
@ -65,6 +67,7 @@ export default Component.extend(AuthProvider, ModalMixin, {
this.get('onAddUsers')(this.get('bulkUsers')).then(() => {
this.set('bulkUsers', '');
this.notifySuccess('Added users');
});
this.modalClose("#add-user-modal");

View file

@ -15,9 +15,10 @@ import { inject as service } from '@ember/service';
import { schedule, debounce } from '@ember/runloop';
import AuthProvider from '../../mixins/auth';
import ModalMixin from '../../mixins/modal';
import Notifier from '../../mixins/notifier';
import Component from '@ember/component';
export default Component.extend(AuthProvider, ModalMixin, {
export default Component.extend(AuthProvider, ModalMixin, Notifier, {
groupSvc: service('group'),
editUser: null,
deleteUser: null,
@ -171,9 +172,15 @@ export default Component.extend(AuthProvider, ModalMixin, {
let cb = this.get('onDelete');
cb(this.get('deleteUser.id'));
this.notifySuccess("Deleted user");
return true;
},
onShowDeleteBulk() {
this.modalOpen("#admin-user-delete-modal", {"show": true});
},
onBulkDelete() {
let su = this.get('selectedUsers');
@ -185,6 +192,8 @@ export default Component.extend(AuthProvider, ModalMixin, {
this.set('selectedUsers', []);
this.set('hasSelectedUsers', false);
this.notifySuccess("Deleted selected users");
this.modalClose('#admin-user-delete-modal');
},

View file

@ -19,7 +19,6 @@ export default Component.extend({
confirmCaption: 'OK',
title: 'Confirm',
show: false,
buttonType: 'btn-secondary',
size: '', // modal-lg, modal-sm
didInsertElement() {

View file

@ -40,8 +40,7 @@ export default Component.extend({
return;
}
if (is.not.undefined(this.linkTo)) {
// TODO:
// Pass in linkModel, linkOptions
// TODO: pass in linkModel, linkOptions
// https://emberjs.com/api/ember/3.5/classes/RouterService/methods/transitionTo?anchor=transitionTo
this.router.transitionTo(this.linkTo);
}

View file

@ -0,0 +1,44 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
import { inject as service } from '@ember/service';
import { computed } from '@ember/object';
import Component from '@ember/component';
export default Component.extend({
router: service(),
tagName: 'div',
classNames: ['label'],
classNameBindings: ['calcClass'],
color: '',
label: '',
tooltip: '',
calcClass: computed(function() {
let c = '';
if (this.color !== '') c += this.color + ' ';
return c.trim();
}),
click(e) {
if (is.not.undefined(this.onClick)) {
this.onClick(e);
return;
}
if (is.not.undefined(this.linkTo)) {
// TODO: pass in linkModel, linkOptions
// https://emberjs.com/api/ember/3.5/classes/RouterService/methods/transitionTo?anchor=transitionTo
this.router.transitionTo(this.linkTo);
}
}
});

View file

@ -24,7 +24,5 @@ export default Component.extend({
bordered: false,
dark: false,
light: false,
actions: {
}
tooltip: ''
});

View file

@ -206,6 +206,8 @@ let constants = EmberObject.extend({
BarChart: 'dicon-chart-bar-2',
Bookmark: 'dicon-bookmark',
ButtonAction: 'button-2',
Checkbox: 'dicon-shape-rectangle',
CheckboxChecked: 'dicon-i-check',
Database: 'dicon-database',
Download: 'dicon-download',
Delete: 'dicon-bin',
@ -220,6 +222,7 @@ let constants = EmberObject.extend({
Integrations: 'dicon-geometry',
ListBullet: 'dicon-list-bullet-2',
Locked: 'dicon-lock',
NotAllowed: 'dicon-ban',
Print: 'dicon-print',
Pulse: 'dicon-pulse',
Plus: 'dicon-e-add',
@ -250,7 +253,8 @@ let constants = EmberObject.extend({
Delete: 'Delete',
Export: 'Export',
Insert: 'Insert',
Join : 'Join',
Join: 'Join',
Leave: 'Leave',
Next: 'Next',
Remove: 'Remove',
Reset: 'Reset',

View file

@ -427,3 +427,14 @@ icons
content: "\ea50";
}
.dicon-i-check::before {
content: "\ea51";
}
.dicon-shape-rectangle::before {
content: "\ea52";
}
.dicon-ban::before {
content: "\ea53";
}

View file

@ -3,13 +3,16 @@
}
.dmz-toolbar {
display: inline-block;
display: inline-flex;
// flex: 0 1 auto;
flex-basis: auto;
text-align: center;
white-space: nowrap;
vertical-align: middle;
border: 1px solid transparent;
height: 30px;
padding: 5px 10px;
width: auto;
padding: 6px 10px;
line-height: 24px;
@extend .no-select;
@include border-radius(6px);
@ -18,7 +21,7 @@
font-size: 16px;
font-weight: 500;
color: map-get($gray-shades, 600);
padding: 0 0.25rem;
padding: 0 0.5rem;
cursor: pointer;
&:hover {
@ -26,6 +29,16 @@
}
}
> .label {
// display: inline-block;
font-size: 14px;
font-weight: 500;
color: map-get($gray-shades, 600);
padding: 0 0.5rem;
align-self: center;
cursor: pointer;
}
> .red {
color: map-get($red-shades, 500);
@ -53,7 +66,7 @@
.dmz-toolbar-large {
height: 40px;
padding: 7px 10px;
padding: 9px 10px;
line-height: 33px;
> .dicon {

View file

@ -10,25 +10,13 @@
// https://documize.com
a {
// @include ease-in();
cursor: pointer;
color: $color-link;
text-decoration: none;
cursor: pointer;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
a:focus,
a:hover {
text-decoration: none;
}
}
a.admin-link {
text-decoration: none;
font-weight: bold;
a:focus,
a:hover {
a:focus, a:hover {
text-decoration: none;
}
}
@ -86,3 +74,34 @@ a.broken-link {
border: 1px solid map-get($gray-shades, 300);
}
.hide {
display: none;
}
.display-block {
display: block;
}
.display-inline-block {
display: inline-block;
}
.visible {
visibility: visible;
}
.invisible {
visibility: none;
}
.align-top {
vertical-align: top!important;
}
.align-middle {
vertical-align: middle!important;
}
.text-center {
text-align: center;
}

View file

@ -1,4 +1,31 @@
.view-customize {
> .explain-user-perms {
padding: 15px 25px;
background-color: map-get($yellow-shades, 100);
border: 1px solid map-get($yellow-shades, 300);
@include border-radius(3px);
> .title {
font-weight: 700;
font-size: 1.1rem;
color: map-get($yellow-shades, 800);
}
> .perm-name {
font-size: 1rem;
font-weight: 600;
color: map-get($gray-shades, 800);
margin-top: 10px;
}
> .perm-desc {
font-size: 0.9rem;
font-weight: 300;
color: map-get($gray-shades, 800);
}
}
.user-table {
tbody tr td, thead tr th {
border-top: none !important;
@ -6,49 +33,53 @@
}
.name {
font-size: 1.2rem;
font-weight: bold;
color: $color-link;
font-size: 1.1rem;
font-weight: 500;
color: map-get($gray-shades, 900);
margin: 0 0 0 10px;
display: inline-block;
cursor: pointer;
> .email {
font-size: 0.9rem;
color: $color-black-light-1;
font-size: 1rem;
font-weight: 400;
color: map-get($gray-shades, 800);
margin: 0;
display: inline-block;
font-weight: normal;
display: block;
}
}
.groups {
cursor: pointer;
margin: 5px 0 0 10px;
font-size: 1rem;
color: map-get($gray-shades, 600);
font-weight: 300;
color: map-get($yellow-shades, 900);
cursor: pointer;
margin: 0 0 0 10px;
&:hover {
color: $color-link;
}
}
.inactive-user
{
color: map-get($red-shades, 600);
font-weight: normal;
text-decoration: line-through;
.inactive-user {
> .name, > .name > .email, > .groups {
color: map-get($red-shades, 600) !important;
font-weight: normal !important;
text-decoration: line-through !important;
}
}
.admin-user
{
color: map-get($green-shades, 600);
font-weight: normal;
.admin-user {
> .name, > .name > .email, > .groups {
color: map-get($green-shades, 600);
font-weight: 600;
}
}
.checkbox {
color: map-get($gray-shades, 900);
.user-checkbox {
color: map-get($green-shades, 700);
cursor: pointer;
font-weight: 600;
}
}
@ -119,8 +150,11 @@
// used for group admin
> .group-users-members {
text-align: center;
> .item {
margin: 5px 0;
margin: 7px;
display: inline-block;
> .fullname {
color: map-get($gray-shades, 800);
@ -135,10 +169,11 @@
margin: 10px 0;
> .group-name {
color: $theme-500;
font-size: 1.2rem;
color: map-get($gray-shades, 800);
font-size: 1rem;
> .group-purpose {
color: map-get($gray-shades, 700);
font-size: 0.9rem;
}
}
@ -169,10 +204,6 @@
}
}
> .max-results {
float: right;
}
> .backup-restore {
margin: 20px 0;
font-size: 1.1rem;

View file

@ -3,11 +3,10 @@
<div class="view-customize">
{{#if isAuthProviderDocumize}}
{{ui/ui-button color=constants.Color.Green light=true icon=constants.Icon.Person label=constants.Label.Add onClick=(action "onOpenUserModal")}}
<div id="add-user-modal" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">Add User</div>
<div class="modal-header">Add Users</div>
<div class="modal-body">
<form onsubmit={{action "onAddUser"}}>
<div class="form-row">
@ -24,31 +23,26 @@
{{input id="newUserEmail" type="email" class="form-control" placeholder="Email" value=newUser.email}}
</div>
</div>
<div class="form-row">
<div class="col mt-3 text-right">
<button type="submit" class="btn btn-success" {{action "onAddUser"}}>Add user</button>
</div>
</div>
{{ui/ui-spacer size=200}}
{{ui/ui-button color=constants.Color.Green icon=constants.Icon.Person light=true label=constants.Label.Add onClick=(action "onAddUser")}}
{{ui/ui-spacer size=300}}
</form>
<form onsubmit={{action "onAddUser"}}>
<div class="form-group">
<label for="edit-group-desc">Bulk create users</label>
<label for="edit-group-desc">Bulk Upload</label>
{{textarea id="bulkUsers" value=bulkUsers class="form-control" rows="5" placeholder="firstname, lastname, email"}}
<small class="form-text text-muted">Comma-delimited list: firstname, lastname, email</small>
</div>
<div class="text-right">
<button type="submit" class="btn btn-success" {{action "onAddUsers"}}>Add users</button>
</div>
{{ui/ui-button color=constants.Color.Green icon=constants.Icon.People light=true label=constants.Label.Add onClick=(action "onAddUsers")}}
</form>
</div>
<div class="modal-footer mt-4">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
<div class="modal-footer">
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Close dismiss=true}}
</div>
</div>
</div>
</div>
{{/if}}
</div>
</div>
</div>

View file

@ -103,15 +103,13 @@
<div class="modal-header">Remove Member &mdash; {{membersGroup.name}} ({{members.length}})</div>
<div class="modal-body">
<div class="view-customize">
<div class="group-users-members my-5">
<div class="group-users-members">
{{#each members as |member|}}
<div class="row item">
<div class="col-10 fullname">{{member.fullname}}</div>
<div class="col-2 text-right">
{{#ui/ui-toolbar dark=false light=true raised=true large=false bordered=true}}
{{ui/ui-toolbar-icon icon=constants.Icon.RemoveUser color=constants.Color.Red tooltip="Remove member" onClick=(action "onLeaveGroup" member.userId)}}
{{/ui/ui-toolbar}}
</div>
<div class="item">
{{#ui/ui-toolbar dark=false light=true raised=true large=false bordered=true}}
{{ui/ui-toolbar-icon icon=constants.Icon.RemoveUser color=constants.Color.Red tooltip="Remove member" onClick=(action "onLeaveGroup" member.userId)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label=member.fullname onClick=(action "onLeaveGroup" member.userId)}}
{{/ui/ui-toolbar}}
</div>
{{/each}}
</div>
@ -130,58 +128,36 @@
<div class="modal-header">Add Member &mdash; {{membersGroup.name}} ({{members.length}})</div>
<div class="modal-body">
<div class="form-group">
<label for="group-members-search">Search users to join this group</label>
<label for="group-members-search">Find users</label>
{{input id="group-members-search" type="text" class="form-control mousetrap" placeholder="Search members and users..." value=searchText key-up=(action "onSearch")}}
<small class="form-text text-muted">search firstname, lastname, email</small>
<small class="form-text text-muted">firstname, lastname, email</small>
</div>
<div class="view-customize">
<div class="text-center">
<div class="btn-group btn-group-toggle">
{{#attach-tooltip showDelay=1000}}Number of users to display{{/attach-tooltip}}
<label class="btn btn-outline-secondary {{if (eq userLimit 1) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 1}}>1
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 10) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 10}}>10
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 25) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 25}}>25
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 50) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 50}}>50
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 100) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 100}}>100
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 250) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 250}}>250
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 500) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 500}}>500
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 1000) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 1000}}>1,000
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 99999) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 99999}}>all
</label>
</div>
{{#ui/ui-toolbar dark=false light=false raised=false large=true bordered=false tooltip="Maximum users to display"}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="1" onClick=(action "onLimit" 1)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="10" onClick=(action "onLimit" 10)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="25" onClick=(action "onLimit" 25)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="50" onClick=(action "onLimit" 50)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="100" onClick=(action "onLimit" 100)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="250" onClick=(action "onLimit" 250)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="500" onClick=(action "onLimit" 500)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="1,000" onClick=(action "onLimit" 1000)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="ALL" onClick=(action "onLimit" 99999)}}
{{/ui/ui-toolbar}}
</div>
<div class="clearfix" />
<div class="group-users-members my-5">
{{ui/ui-spacer size=300}}
<div class="group-users-members">
{{#each users as |user|}}
<div class="row item">
<div class="col-10 fullname">{{user.firstname}} {{user.lastname}}</div>
<div class="col-2 text-right">
{{#ui/ui-toolbar dark=false light=true raised=true large=false bordered=true}}
{{#if user.isMember}}
{{ui/ui-toolbar-icon icon=constants.Icon.RemoveUser color=constants.Color.Red tooltip="Remove member" onClick=(action "onLeaveGroup" user.id)}}
{{else}}
{{ui/ui-toolbar-icon icon=constants.Icon.AddUser color=constants.Color.Green tooltip="Add member" onClick=(action "onJoinGroup" user.id)}}
{{/if}}
{{/ui/ui-toolbar}}
</div>
<div class="item">
{{#ui/ui-toolbar dark=false light=true raised=true large=false bordered=true}}
{{#if user.isMember}}
{{ui/ui-toolbar-icon icon=constants.Icon.RemoveUser color=constants.Color.Red tooltip="Remove member" onClick=(action "onLeaveGroup" user.id)}}
{{else}}
{{ui/ui-toolbar-icon icon=constants.Icon.AddUser color=constants.Color.Green tooltip="Add member" onClick=(action "onJoinGroup" user.id)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label=(concat user.firstname " " user.lastname) onClick=(action "onJoinGroup" user.id)}}
{{/if}}
{{/ui/ui-toolbar}}
</div>
{{/each}}
</div>

View file

@ -1,184 +1,165 @@
<div class="view-customize my-5">
<div class="view-customize">
{{#if isAuthProviderKeycloak}}
{{#if syncInProgress}}
<div class="btn btn-secondary mt-3 mb-3">Keycloak user sync running...</div>
{{else}}
<div class="btn btn-success mt-3 mb-3" {{action "onSyncKeycloak"}}>Sync with Keycloak</div>
{{/if}}
{{ui/ui-spacer size=300}}
{{#if syncInProgress}}
{{ui/ui-button color=constants.Color.Gray light=true icon=constants.Icon.Locked label="Keycloak user sync running..."}}
{{else}}
{{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.Locked label="Sync with Keycloak" onClick=(action "onSyncKeycloak")}}
{{/if}}
{{/if}}
{{#if isAuthProviderLDAP}}
{{#if syncInProgress}}
<div class="btn btn-secondary mt-3 mb-3">LDAP user sync running...</div>
{{else}}
<div class="btn btn-success mt-3 mb-3" {{action "onSyncLDAP"}}>Sync with LDAP</div>
{{/if}}
{{ui/ui-spacer size=300}}
{{#if syncInProgress}}
{{ui/ui-button color=constants.Color.Gray light=true icon=constants.Icon.Locked label="LDAP user sync running..."}}
{{else}}
{{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.Locked label="Sync with LDAP" onClick=(action "onSyncLDAP")}}
{{/if}}
{{/if}}
<div class="my-2">
<span class="bold-700">Spaces</span>
<span class="text-muted">&nbsp;&nbsp;&mdash;&nbsp;can add spaces, both personal and shared with others</span>
</div>
<div class="my-2">
<span class="bold-700">Visible</span>
<span class="text-muted">&nbsp;&nbsp;&mdash;&nbsp;can see names of users and groups, can disable for external users
like customers/partners</span>
</div>
<div class="my-2">
<span class="bold-700">Admin</span>
<span class="text-muted">&nbsp;&nbsp;&mdash;&nbsp;can manage all aspects of Documize, like this screen</span>
</div>
<div class="my-2">
<span class="bold-700">Analytics</span>
<span class="text-muted">&nbsp;&nbsp;&mdash;&nbsp;can view analytical reports</span>
</div>
<div class="mt-2 mb-4">
<span class="bold-700">Active</span>
<span class="text-muted">&nbsp;&nbsp;&mdash;&nbsp;can login and use Documize</span>
{{ui/ui-spacer size=300}}
<div class="explain-user-perms">
<div class="title">User Permissions Explained</div>
<div class="perm-name">Spaces</div>
<div class="perm-desc">Can add spaces, both personal and shared with others</div>
<div class="perm-name">Visible</div>
<div class="perm-desc">Can see names of users and groups, can disable for external users like customers/partners</div>
<div class="perm-name">Admin</div>
<div class="perm-desc">Can manage all aspects of Documize, like this screen</div>
<div class="perm-name">Analytics</div>
<div class="perm-desc">Can view analytical reports<</div>
<div class="perm-name">Active</div>
<div class="perm-desc">Can login and use Documize</div>
</div>
{{ui/ui-spacer size=300}}
<div class="form-group mt-5 mb-3">
<div class="form-group">
{{focus-input type="text" class="form-control" placeholder="filter users" value=filter}}
<small class="form-text text-muted">search firstname, lastname, email</small>
</div>
<div class="max-results py-3">
<div class="btn-group btn-group-toggle">
{{#attach-tooltip showDelay=1000}}Number of users to display{{/attach-tooltip}}
<label class="btn btn-outline-secondary {{if (eq userLimit 1) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 1}}>1
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 10) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 10}}>10
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 25) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 25}}>25
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 50) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 50}}>50
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 100) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 100}}>100
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 250) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 250}}>250
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 500) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 500}}>500
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 1000) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 1000}}>1,000
</label>
<label class="btn btn-outline-secondary {{if (eq userLimit 99999) "active"}}">
<input type="radio" name="options" autocomplete="off" {{action "onLimit" 99999}}>all
</label>
</div>
<div class="text-center">
{{#ui/ui-toolbar dark=false light=false raised=false large=true bordered=false tooltip="Maximum users to display"}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="1" onClick=(action "onLimit" 1)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="10" onClick=(action "onLimit" 10)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="25" onClick=(action "onLimit" 25)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="50" onClick=(action "onLimit" 50)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="100" onClick=(action "onLimit" 100)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="250" onClick=(action "onLimit" 250)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="500" onClick=(action "onLimit" 500)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="1,000" onClick=(action "onLimit" 1000)}}
{{ui/ui-toolbar-label color=constants.Color.Gray label="ALL" onClick=(action "onLimit" 99999)}}
{{/ui/ui-toolbar}}
</div>
<table class="table table-responsive table-borderless user-table">
<thead>
<tr>
<th class="text-muted">
<th class="no-width"></th>
<th>
{{#if hasSelectedUsers}}
<button id="bulk-delete-users" type="button" class="btn btn-danger" data-toggle="modal" data-target="#admin-user-delete-modal"
data-backdrop="static">Delete selected users</button>
{{ui/ui-button
id="bulk-delete-users"
color=constants.Color.Red
light=false
icon=constants.Icon.Delete
label="Delete selected users"
onClick=(action "onShowDeleteBulk")}}
{{/if}}
</th>
<th class="no-width">Spaces</th>
<th class="no-width">Visible</th>
<th class="no-width">Admin</th>
<th class="no-width">Analytics</th>
<th class="no-width">Admin</th>
<th class="no-width">Active</th>
<th class="no-width">
</th>
<th class="no-width"></th>
</tr>
</thead>
<tbody>
{{#each users key="id" as |user|}}
<tr>
<td class="{{unless user.active "inactive-user"}} {{if user.admin "admin-user"}}">
<div class="d-inline-block align-top">
<tr>
<td class="no-width text-center align-middle">
{{#if user.me}}
<i class="material-icons color-gray-700">check_box_outline_blank</i>
<i class="user-checkbox dicon {{constants.Icon.NotAllowed}}" />
{{else if user.selected}}
<i class="material-icons checkbox" {{action "toggleSelect" user}}>check_box</i>
<i class="user-checkbox dicon {{constants.Icon.CheckboxChecked}}" {{action "toggleSelect" user}} />
{{else}}
<i class="material-icons checkbox" {{action "toggleSelect" user}}>check_box_outline_blank</i>
<i class="user-checkbox dicon {{constants.Icon.Checkbox}}" {{action "toggleSelect" user}} />
{{/if}}
</div>
<div class="d-inline-block">
<div class="name" {{action "onShowEdit" user.id}}>{{user.fullname}}<div class="email">&nbsp;&nbsp;({{user.email}})</div>
</td>
<td class="{{unless user.active "inactive-user"}} {{if user.admin "admin-user"}}">
<div class="name" {{action "onShowEdit" user.id}}>
{{user.fullname}}
<div class="email">{{user.email}}</div>
</div>
<div class="groups" {{action "onShowGroupsModal" user.id}}>
{{#each user.groups as |group|}}
<span class="group">
{{group.name}}{{#if (not-eq group user.groups.lastObject)}}, {{/if}}
</span>
<span class="group">
{{group.name}}{{#if (not-eq group user.groups.lastObject)}}, {{/if}}
</span>
{{else}}
<span class="group">&lt;no groups&gt;</span>
<span class="group">&lt;no groups&gt;</span>
{{/each}}
</div>
</div>
</td>
<td class="no-width text-center">
{{#if user.editor}}
<i class="material-icons checkbox" {{action "toggleEditor" user.id}}>check_box</i>
{{else}}
<i class="material-icons checkbox" {{action "toggleEditor" user.id}}>check_box_outline_blank</i>
{{/if}}
</td>
<td class="no-width text-center">
{{#if user.viewUsers}}
<i class="material-icons checkbox" {{action "toggleUsers" user.id}}>check_box</i>
{{else}}
<i class="material-icons checkbox" {{action "toggleUsers" user.id}}>check_box_outline_blank</i>
{{/if}}
</td>
<td class="no-width text-center">
{{#if user.me}}
<i class="material-icons color-gray-700">check_box</i>
{{else if user.admin}}
<i class="material-icons checkbox" {{action "toggleAdmin" user.id}}>check_box</i>
{{else}}
<i class="material-icons checkbox" {{action "toggleAdmin" user.id}}>check_box_outline_blank</i>
{{/if}}
</td>
<td class="no-width text-center">
{{#if user.analytics}}
<i class="material-icons checkbox" {{action "toggleAnalytics" user.id}}>check_box</i>
{{else}}
<i class="material-icons checkbox" {{action "toggleAnalytics" user.id}}>check_box_outline_blank</i>
{{/if}}
</td>
<td class="no-width text-center">
{{#if user.me}}
<i class="material-icons color-gray-700">check_box</i>
{{else if user.active}}
<i class="material-icons checkbox" {{action "toggleActive" user.id}}>check_box</i>
{{else}}
<i class="material-icons checkbox" {{action "toggleActive" user.id}}>check_box_outline_blank</i>
{{/if}}
</td>
<td class="no-width text-center">
<div class="user-button-{{user.id}} button-icon-gray button-icon-small" title="Edit"
{{action "onShowEdit" user.id}}>
<i class="material-icons">mode_edit</i>
{{#attach-tooltip showDelay=1000}}Edit user{{/attach-tooltip}}
</div>
{{#unless user.me}}
<div class="button-icon-gap" />
<div class="delete-button-{{user.id}} button-icon-red button-icon-small" title="Delete"
{{action "onShowDelete" user.id}}>
<i class="material-icons">delete</i>
{{#attach-tooltip showDelay=1000}}Delete user{{/attach-tooltip}}
</div>
{{/unless}}
</td>
</tr>
</td>
<td class="no-width text-center align-middle">
{{#if user.editor}}
<i class="user-checkbox dicon {{constants.Icon.CheckboxChecked}}" {{action "toggleEditor" user.id}} />
{{else}}
<i class="user-checkbox dicon {{constants.Icon.Checkbox}}" {{action "toggleEditor" user.id}} />
{{/if}}
</td>
<td class="no-width text-center align-middle">
{{#if user.viewUsers}}
<i class="user-checkbox dicon {{constants.Icon.CheckboxChecked}}" {{action "toggleUsers" user.id}} />
{{else}}
<i class="user-checkbox dicon {{constants.Icon.Checkbox}}" {{action "toggleUsers" user.id}} />
{{/if}}
</td>
<td class="no-width text-center align-middle">
{{#if user.analytics}}
<i class="user-checkbox dicon {{constants.Icon.CheckboxChecked}}" {{action "toggleAnalytics" user.id}} />
{{else}}
<i class="user-checkbox dicon {{constants.Icon.Checkbox}}" {{action "toggleAnalytics" user.id}} />
{{/if}}
</td>
<td class="no-width text-center align-middle">
{{#if user.me}}
<i class="user-checkbox dicon {{constants.Icon.NotAllowed}}" />
{{else if user.admin}}
<i class="user-checkbox dicon {{constants.Icon.CheckboxChecked}}" {{action "toggleAdmin" user.id}} />
{{else}}
<i class="user-checkbox dicon {{constants.Icon.Checkbox}}" {{action "toggleAdmin" user.id}} />
{{/if}}
</td>
<td class="no-width text-center align-middle">
{{#if user.me}}
<i class="user-checkbox dicon {{constants.Icon.NotAllowed}}" />
{{else if user.active}}
<i class="user-checkbox dicon {{constants.Icon.CheckboxChecked}}" {{action "toggleActive" user.id}} />
{{else}}
<i class="user-checkbox dicon {{constants.Icon.Checkbox}}" {{action "toggleActive" user.id}} />
{{/if}}
</td>
<td class="no-width text-center align-middle">
{{#ui/ui-toolbar dark=false light=true raised=true large=false bordered=true}}
{{ui/ui-toolbar-icon icon=constants.Icon.Edit color=constants.Color.Gray tooltip="Edit user" onClick=(action "onShowEdit" user.id)}}
{{ui/ui-toolbar-icon icon=constants.Icon.AddUser color=constants.Color.Gray tooltip="Assign user groups" onClick=(action "onShowGroupsModal" user.id)}}
{{#unless user.me}}
{{ui/ui-toolbar-icon icon=constants.Icon.Delete color=constants.Color.Red tooltip="Delete user" onClick=(action "onShowDelete" user.id)}}
{{/unless}}
{{/ui/ui-toolbar}}
</td>
</tr>
{{/each}}
</tbody>
</table>
</div>
{{#ui/ui-dialog title="Delete User" confirmCaption="Delete" buttonColor=constants.Color.Red show=showDeleteDialog onAction=(action "onDelete")}}
<p>Are you sure you want to delete {{deleteUser.fullname}}?</p>
{{/ui/ui-dialog}}
<div id="edit-user-modal" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
@ -218,18 +199,13 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-success" onclick={{action "onUpdate"}}>Save</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Close dismiss=true}}
{{ui/ui-button color=constants.Color.Green light=true label=constants.Label.Update onClick=(action "onUpdate")}}
</div>
</div>
</div>
</div>
{{#ui/ui-dialog title="Delete User" confirmCaption="Delete" buttonType="btn-danger" show=showDeleteDialog
onAction=(action "onDelete")}}
<p>Are you sure you want to delete {{deleteUser.fullname}}?</p>
{{/ui/ui-dialog}}
<div id="admin-user-delete-modal" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
@ -238,8 +214,8 @@ onAction=(action "onDelete")}}
<p>Are you sure you want to delete selected users?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-success" onclick={{action "onBulkDelete"}}>Delete</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Close dismiss=true}}
{{ui/ui-button color=constants.Color.Red light=true label=constants.Label.Delete onClick=(action "onBulkDelete")}}
</div>
</div>
</div>
@ -251,19 +227,19 @@ onAction=(action "onDelete")}}
<div class="modal-header">{{selectedUser.fullname}}</div>
<div class="modal-body">
<div class="view-customize">
<div class="group-membership my-5">
<div class="group-membership">
{{#each groups as |group|}}
<div class="row item">
<div class="col-10 group-name">{{group.name}}
{{#if group.purpose}}
<span class="text-muted group-purpose">&nbsp;&nbsp;&mdash;&nbsp;{{group.purpose}}</span>
<span class="group-purpose">&nbsp;&mdash;&nbsp;{{group.purpose}}</span>
{{/if}}
</div>
<div class="col-2 text-right">
{{#if group.isMember}}
<button class="btn btn-danger" {{action "onLeaveGroup" group.id}}>Leave</button>
{{ui/ui-button color=constants.Color.Red light=true label=constants.Label.Leave onClick=(action "onLeaveGroup" group.id)}}
{{else}}
<button class="btn btn-success" {{action "onJoinGroup" group.id}}>Join</button>
{{ui/ui-button color=constants.Color.Green light=true label=constants.Label.Join onClick=(action "onJoinGroup" group.id)}}
{{/if}}
</div>
</div>
@ -272,7 +248,7 @@ onAction=(action "onDelete")}}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Close dismiss=true}}
</div>
</div>
</div>

View file

@ -26,6 +26,6 @@
{{/if}}
</div>
{{#ui/ui-dialog title="Delete Attachment" confirmCaption="Delete" buttonType="btn-danger" show=showDialog onAction=(action "onDelete")}}
{{#ui/ui-dialog title="Delete Attachment" confirmCaption="Delete" buttonColor=constants.Color.Red show=showDialog onAction=(action "onDelete")}}
<p>Are you sure you want to delete {{deleteAttachment.name}}?</p>
{{/ui/ui-dialog}}

View file

@ -49,11 +49,11 @@
</ul>
</div>
{{#ui/ui-dialog title="Delete Documents" confirmCaption="Delete" buttonType="btn-danger" show=showDeleteDialog onAction=(action "onDeleteDocuments")}}
{{#ui/ui-dialog title="Delete Documents" confirmCaption="Delete" buttonColor=constants.Color.Red show=showDeleteDialog onAction=(action "onDeleteDocuments")}}
<p>Are you sure you want to delete {{selectedDocuments.length}} {{selectedCaption}}?</p>
{{/ui/ui-dialog}}
{{#ui/ui-dialog title="Move Documents" confirmCaption="Move" buttonType="btn-success" show=showMoveDialog onAction=(action "onMoveDocuments")}}
{{#ui/ui-dialog title="Move Documents" confirmCaption="Move" buttonColor=constants.Color.Green show=showMoveDialog onAction=(action "onMoveDocuments")}}
<p>Select space for {{selectedDocuments.length}} {{selectedCaption}}</p>
{{ui/ui-list-picker items=moveOptions nameField="name" singleSelect=true}}
{{/ui/ui-dialog}}

View file

@ -12,7 +12,7 @@
</div>
{{#if isSpaceAdmin}}
    {{#ui/ui-dialog title="Delete Content Block" confirmCaption="Delete" buttonType="btn-danger" show=showDeleteDialog onAction=(action "onDeleteBlock")}}
    {{#ui/ui-dialog title="Delete Content Block" confirmCaption="Delete" buttonColor=constants.Color.Red show=showDeleteDialog onAction=(action "onDeleteBlock")}}
        <p>Are you sure you want to delete this re-usable content block?</p>
    {{/ui/ui-dialog}}
{{/if}}

View file

@ -68,7 +68,7 @@
</div>
</div>
{{#ui/ui-dialog title="Set Category Access" confirmCaption="Save" buttonType="btn-success" show=showCategoryAccess onAction=(action "onGrantAccess")}}
{{#ui/ui-dialog title="Set Category Access" confirmCaption="Save" buttonColor=constants.Color.Green show=showCategoryAccess onAction=(action "onGrantAccess")}}
<p>Select who can view documents within category</p>
<div class="widget-list-picker">

View file

@ -8,8 +8,8 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal" {{action "onCancel"}}>{{cancelCaption}}</button>
<button type="button" class="btn {{buttonType}}" onclick={{action "onAction"}}>{{confirmCaption}}</button>
{{ui/ui-button color=constants.Color.Gray light=true label=cancelCaption dismiss=true onClick=(action "onCancel")}}
{{ui/ui-button color=buttonColor light=true label=confirmCaption onClick=(action "onAction")}}
</div>
</div>
</div>

View file

@ -0,0 +1,4 @@
{{label}}
{{#if tooltip}}
{{#attach-tooltip showDelay=1000}}{{tooltip}}{{/attach-tooltip}}
{{/if}}

View file

@ -1 +1,4 @@
{{yield}}
{{yield}}
{{#if tooltip}}
{{#attach-tooltip showDelay=1000}}{{tooltip}}{{/attach-tooltip}}
{{/if}}