1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-08-01 19:45:24 +02:00

Redesign setting screens

We're using iconography to stylize each setting screen.

Imeplemented new color palletes and shades.
This commit is contained in:
McMatts 2018-12-13 12:24:16 +00:00
parent 02102f9bf3
commit f442081a41
42 changed files with 563 additions and 548 deletions

View file

@ -10,16 +10,20 @@
// https://documize.com
import { inject as service } from '@ember/service';
import Notifier from '../../mixins/notifier';
import Component from '@ember/component';
export default Component.extend({
export default Component.extend(Notifier, {
appMeta: service(),
buttonLabel: 'Rebuild Search Index',
buttonLabel: 'Rebuild',
actions: {
reindex() {
this.set('buttonLabel', 'Rebuilding search index...')
this.get('reindex')();
this.set('buttonLabel', 'Running...');
this.notifyInfo("Starting search re-index process");
this.get('reindex')(() => {
this.notifySuccess("Search re-indexing complete");
});
}
}
});

View file

@ -24,7 +24,7 @@ export default Component.extend(Notifier, {
testSMTP: null,
actions: {
saveSMTP() {
saveSMTP(e) {
if (this.get('SMTPHostEmptyError')) {
$("#smtp-host").focus();
return;
@ -49,11 +49,17 @@ export default Component.extend(Notifier, {
);
this.set('buttonText', 'Please wait...');
this.notifyInfo('Sending test email to you');
this.get('saveSMTP')().then((result) => {
this.notifySuccess('Saved');
this.set('buttonText', 'Save & Test');
this.set('testSMTP', result);
if (result.success) {
this.notifySuccess(result.message);
} else {
this.notifyError(result.message);
}
});
}
}

View file

@ -76,6 +76,7 @@ export default Component.extend(Notifier, Modals, {
this.set('deleteSpace.id', '');
this.set('deleteSpace.name', '');
this.loadData();
this.notifySuccess('Deleted');
});
},
@ -86,6 +87,8 @@ export default Component.extend(Notifier, Modals, {
filterType: 'space',
};
this.notifyInfo('Export running...');
this.get('documentSvc').export(spec).then((htmlExport) => {
this.get('browserSvc').downloadFile(htmlExport, 'documize.html');
this.notifySuccess('Exported');

View file

@ -0,0 +1,15 @@
// 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 Component from '@ember/component';
export default Component.extend({
});

View file

@ -58,6 +58,7 @@ export default Component.extend({
}),
click(e) {
e.preventDefault();
if (is.not.undefined(this.onClick)) {
this.onClick(e);
}

View file

@ -196,6 +196,7 @@ let constants = EmberObject.extend({
Icon: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
All: 'dicon-menu-8',
Announce: 'dicon-notification',
ArrowUp: 'dicon-arrow-up',
ArrowDown: 'dicon-arrow-down',
ArrowLeft: 'dicon-arrow-left',
@ -203,12 +204,21 @@ let constants = EmberObject.extend({
Attachment: 'dicon-attachment',
BarChart: 'dicon-chart-bar-2',
Bookmark: 'dicon-bookmark',
ButtonAction: 'button-2',
Database: 'dicon-database',
Download: 'dicon-download',
Delete: 'dicon-bin',
Edit: 'dicon-pen-2',
Email: 'dicon-email',
Export: 'dicon-data-upload',
Export2: 'dicon-upload',
Filter: 'dicon-sort-tool',
Grid1: 'dicon-grid-interface',
Handshake: 'handshake',
Index: 'dicon-align-justify',
Integrations: 'dicon-geometry',
ListBullet: 'dicon-list-bullet-2',
Locked: 'dicon-lock',
Print: 'dicon-print',
Pulse: 'dicon-pulse',
Plus: 'dicon-e-add',
@ -216,8 +226,10 @@ let constants = EmberObject.extend({
People: 'dicon-multiple-19',
Remove: 'dicon-i-remove',
Search: 'dicon-magnifier',
Send: 'dicon-send',
Settings: 'dicon-settings-gear',
Tag: 'dicon-delete-key',
Unlocked: 'dicon-unlocked',
World: 'dicon-globe',
},
@ -230,10 +242,13 @@ let constants = EmberObject.extend({
Label: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
Add: 'Add',
Activate: "Activate",
Cancel: 'Cancel',
Close: 'Close',
Delete: 'Delete',
Export: 'Export',
Insert: 'Insert',
Restore: 'Restore',
Save: 'Save',
Update: 'Update',
}

View file

@ -1,3 +1,8 @@
{{layout/logo-heading
title="Authentication"
desc="Choose user authentication provider — Documize, Redhat Keycloak, LDAP/AD"
icon=constants.Icon.Locked}}
{{customize/auth-settings
authProvider=model.authProvider
authConfig=model.authConfig

View file

@ -1 +1,6 @@
{{layout/logo-heading
title="Backup & Restore"
desc="Export all content to self-contained single zip file"
icon=constants.Icon.Database}}
{{customize/backup-restore onBackup=(action "onBackup") onRestore=(action "onRestore")}}

View file

@ -1 +1,6 @@
{{layout/logo-heading
title="Spaces"
desc="Delete spaces, take ownership of shared and orphaned spaces"
icon=constants.Icon.Grid1}}
{{customize/space-admin}}

View file

@ -1 +1,6 @@
{{layout/logo-heading
title="Customize"
desc="Options to help you customize Documize"
icon=constants.Icon.Settings}}
{{customize/general-settings model=model save=(action "save")}}

View file

@ -1 +1,6 @@
{{layout/logo-heading
title="User Groups"
desc="Define groups for easier user and permission management"
icon=constants.Icon.People}}
{{customize/user-groups}}

View file

@ -1 +1,6 @@
{{layout/logo-heading
title="Integrations"
desc="Enable and configure third party integrations"
icon=constants.Icon.Integrations}}
{{customize/integration-settings jira=model.jira trello=model.trello}}

View file

@ -9,7 +9,9 @@
//
// https://documize.com
import { inject as service } from '@ember/service';
import Controller from '@ember/controller';
export default Controller.extend({
appMeta: service(),
});

View file

@ -1 +1,6 @@
{{layout/logo-heading
title=(concat appMeta.edition " Edition " appMeta.version)
desc="Enterprise Edition provides premium features and comprehensive product support"
icon=constants.Icon.Announce}}
{{customize/change-log}}

View file

@ -1 +1,6 @@
{{layout/logo-heading
title="Search"
desc="Rebuild the search index"
icon=constants.Icon.Search}}
{{customize/search-index searchStatus=model reindex=(action "reindex")}}

View file

@ -1 +1,6 @@
{{layout/logo-heading
title="Mail Server"
desc="Specify mail server details required for sending user invite and notification emails"
icon=constants.Icon.Send}}
{{customize/smtp-settings model=model saveSMTP=(action "saveSMTP")}}

View file

@ -1,59 +1,71 @@
{{#layout/top-bar}}
{{/layout/top-bar}}
{{#layout/master-sidebar}}
{{ui/ui-spacer size=300}}
{{#layout/middle-zone}}
{{#layout/middle-zone-content}}
{{outlet}}
{{/layout/middle-zone-content}}
{{#layout/middle-zone-sidebar}}
<div id="sidebar" class="sidebar">
<h1>Settings</h1>
<p>Configure authentication, SMTP, licensing and manage user accounts</p>
<ul class="tabnav-control tabnav-control-centered w-75">
{{#link-to "customize.general" activeClass="selected" class="tab tab-vertical" tagName="li"}}General{{/link-to}}
{{#link-to "customize.integrations" activeClass="selected" class="tab tab-vertical" tagName="li"}}Integrations{{/link-to}}
{{#if session.isGlobalAdmin}}
{{#link-to "customize.smtp" activeClass="selected" class="tab tab-vertical" tagName="li"}}Mail{{/link-to}}
{{/if}}
</ul>
<div class="mt-4" />
<ul class="tabnav-control tabnav-control-centered w-75">
{{#link-to "customize.groups" activeClass="selected" class="tab tab-vertical" tagName="li"}}Groups{{/link-to}}
{{#link-to "customize.users" activeClass="selected" class="tab tab-vertical" tagName="li"}}Users{{/link-to}}
{{#if session.isGlobalAdmin}}
{{#link-to "customize.auth" activeClass="selected" class="tab tab-vertical" tagName="li"}}Authentication{{/link-to}}
{{/if}}
</ul>
<div class="mt-4" />
<ul class="tabnav-control tabnav-control-centered w-75">
{{#link-to "customize.folders" activeClass="selected" class="tab tab-vertical" tagName="li"}}Spaces{{/link-to}}
{{#if session.isGlobalAdmin}}
{{#link-to "customize.search" activeClass="selected" class="tab tab-vertical" tagName="li"}}Search{{/link-to}}
{{#if (eq appMeta.edition constants.Product.EnterpriseEdition)}}
{{#link-to "customize.audit" activeClass="selected" class="tab tab-vertical" tagName="li"}}Audit{{/link-to}}
{{/if}}
{{/if}}
</ul>
<div class="mt-4" />
<ul class="tabnav-control tabnav-control-centered w-75">
{{#link-to "customize.backup" activeClass="selected" class="tab tab-vertical" tagName="li"}}Backup // Restore{{/link-to}}
</ul>
<div class="mt-4" />
<ul class="tabnav-control tabnav-control-centered w-75">
<div class="section">
<div class="title">filter</div>
<div class="list">
{{#link-to "customize.general" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Settings}} />
<div class="name">General</div>
{{/link-to}}
{{#link-to "customize.integrations" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Integrations}} />
<div class="name">Integrations</div>
{{/link-to}}
{{#if session.isGlobalAdmin}}
{{#link-to "customize.smtp" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Send}} />
<div class="name">Mail Server</div>
{{/link-to}}
{{/if}}
{{#link-to "customize.users" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Person}} />
<div class="name">User Management</div>
{{/link-to}}
{{#link-to "customize.groups" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.People}} />
<div class="name">User Groups</div>
{{/link-to}}
{{#if session.isGlobalAdmin}}
{{#link-to "customize.auth" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Locked}} />
<div class="name">Authentication</div>
{{/link-to}}
{{/if}}
{{#link-to "customize.folders" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Grid1}} />
<div class="name">Spaces</div>
{{/link-to}}
{{#if session.isGlobalAdmin}}
{{#link-to "customize.search" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Search}} />
<div class="name">Search</div>
{{/link-to}}
{{#if (eq appMeta.edition constants.Product.EnterpriseEdition)}}
{{#link-to "customize.billing" activeClass="selected" class="tab tab-vertical" tagName="li"}}Billing{{/link-to}}
{{#link-to "customize.audit" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.ButtonAction}} />
<div class="name">Audit Log</div>
{{/link-to}}
{{/if}}
{{#link-to "customize.product" activeClass="selected" class="tab tab-vertical" tagName="li"}}Changelog{{/link-to}}
</ul>
{{/if}}
{{#link-to "customize.backup" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Database}} />
<div class="name">Backup & Restore</div>
{{/link-to}}
{{#if (eq appMeta.edition constants.Product.EnterpriseEdition)}}
{{#link-to "customize.billing" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Handshake}} />
<div class="name">Billing</div>
{{/link-to}}
{{/if}}
{{#link-to "customize.product" activeClass="selected" class="item" tagName="div"}}
<i class={{concat "dicon " constants.Icon.Announce}} />
<div class="name">Changelog</div>
{{/link-to}}
</div>
{{/layout/middle-zone-sidebar}}
{{/layout/middle-zone}}
</div>
{{/layout/master-sidebar}}
{{#layout/bottom-bar}}
{{/layout/bottom-bar}}
{{#layout/master-content}}
{{outlet}}
{{/layout/master-content}}

View file

@ -1,3 +1,8 @@
{{layout/logo-heading
title="User Management"
desc="Manage basic information, passwords and permissions"
icon=constants.Icon.Person}}
{{customize/user-admin users=model
onAddUser=(action "onAddUser")
onAddUsers=(action "onAddUsers")}}

View file

@ -1,33 +1,29 @@
{{#layout/master-sidebar selectedItem="spaces"}}
{{#unless session.isMobile}}
{{ui/ui-spacer size=300}}
{{/unless}}
{{ui/ui-spacer size=300}}
<div class="section">
<div class="title">filter</div>
<div class="list">
<div class="item {{if (eq selectedView "all") "selected"}}" {{action 'onSelect' 'all'}}>
<div class="item {{if (eq selectedView "all") "selected"}}" {{action "onSelect" "all"}}>
<i class={{concat "dicon " constants.Icon.All}} />
<div class="name">All ({{model.length}})</div>
</div>
<div class="item {{if (eq selectedView "public") "selected"}}" {{action 'onSelect' 'public'}}>
<div class="item {{if (eq selectedView "public") "selected"}}" {{action "onSelect" "public"}}>
<i class={{concat "dicon " constants.Icon.World}} />
<div class="name">Public ({{publicSpaces.length}})</div>
</div>
{{#if session.authenticated}}
<div class="item {{if (eq selectedView "protected") "selected"}}" {{action 'onSelect' 'protected'}}>
<div class="item {{if (eq selectedView "protected") "selected"}}" {{action "onSelect" "protected"}}>
<i class={{concat "dicon " constants.Icon.People}} />
<div class="name">Protected ({{protectedSpaces.length}})</div>
</div>
<div class="item {{if (eq selectedView "personal") "selected"}}" {{action 'onSelect' 'personal'}}>
<div class="item {{if (eq selectedView "personal") "selected"}}" {{action "onSelect" "personal"}}>
<i class={{concat "dicon " constants.Icon.Person}} />
<div class="name">Personal ({{personalSpaces.length}})</div>
</div>
{{/if}}
</div>
</div>
{{/layout/master-sidebar}}
{{#layout/master-content}}

View file

@ -59,19 +59,23 @@ $input-btn-focus-color: rgba($theme-500, .25);
// form labels
.form-group {
> label {
color: map-get($gray-shades, 800);
color: map-get($gray-shades, 700);
font-size: 1.2rem;
font-weight: 500;
font-weight: 600;
}
> small, > div[class*="col"] > small {
color: map-get($gray-shades, 600);
font-size: 1rem;
font-weight: 300;
}
> small.highlight, > div[class*="col"] > small.highlight {
font-size: 1rem;
color: map-get($yellow-shades, 700) !important;
}
margin-bottom: 30px !important;
}
// links

View file

@ -394,3 +394,23 @@ icons
.dicon-menu-8::before {
content: "\ea48";
}
.dicon-send::before {
content: "\ea49";
}
.dicon-email::before {
content: "\ea4a";
}
.dicon-download::before {
content: "\ea4b";
}
.dicon-database::before {
content: "\ea4c";
}
.dicon-notification::before {
content: "\ea4d";
}

View file

@ -10,3 +10,22 @@
font-weight: 400;
color: map-get($gray-shades, 800);
}
.logo-heading {
display: flex;
flex-direction: row;
> .image {
align-self: center;
margin-right: 25px;
> i {
font-size: 3.5rem;
color: map-get($gray-shades, 600);
}
}
> .text {
align-self: flex-start;
}
}

View file

@ -63,7 +63,6 @@
}
}
@mixin shadow() {
box-shadow: 1px 1px 3px 0px rgba(211,211,211,1);
}

View file

@ -1,32 +1,60 @@
.product-update {
text-align: left;
margin: 50px 0;
> .update-summary {
> .update-status {
padding: 25px;
border: 1px solid map-get($yellow-shades, 700);
background-color: map-get($gray-shades, 100);
@include border-radius(2px);
background-color: map-get($yellow-shades, 100);
border: 1px solid map-get($yellow-shades, 200);
@include shadow();
@include border-radius(3px);
> .caption {
> .title {
font-weight: bold;
font-size: 1.5rem;
color: map-get($yellow-shades, 700);
color: map-get($yellow-shades, 600);
margin-bottom: 15px;
display: inline-block;
display:block;
}
> .instructions {
font-weight: normal;
font-weight: 500;
font-size: 1.3rem;
color: map-get($gray-shades, 600);
color: map-get($gray-shades, 800);
margin-bottom: 30px;
}
> .links {
margin: 30px 0 0 0;
> p {
> .edition-name {
font-size: 1.3rem;
font-weight: 400;
color: map-get($yellow-shades, 900);
}
> .link {
font-size: 1.3rem;
color: map-get($yellow-shades, 800);
font-weight: 600;
}
}
}
}
> .change-log {
padding: 25px;
background-color: map-get($gray-shades, 100);
border: 1px solid map-get($gray-shades, 200);
@include shadow();
@include border-radius(3px);
> .version {
margin: 30px 0 0 20px;
font-size: 1.3rem;
color: map-get($gray-shades, 600);
font-weight: bold;
font-weight: 700;
font-size: 1.2rem;
color: map-get($yellow-shades, 700);
margin: 10px 0;
display: block;
}
> .changes {
@ -41,10 +69,11 @@
> .tag-edition {
margin: 10px 10px 10px 10px;
padding: 5px 10px;
background-color: map-get($gray-shades, 300);
color: $theme-500;
background-color: map-get($green-shades, 200);
color: map-get($green-shades, 600);
font-weight: bold;
font-size: 0.9rem;
@include border-radius(3px);
}
}
}

View file

@ -1,15 +1,4 @@
.view-customize {
> .admin-heading {
font-size: 1.5rem;
font-weight: bold;
color: $color-black;
}
> .sub-heading {
font-size: 1.1rem;
color: map-get($gray-shades, 600);
}
.user-table {
tbody tr td, thead tr th {
border-top: none !important;
@ -157,9 +146,9 @@
> .backup-zone {
@include border-radius(3px);
border: 1px solid map-get($gray-shades, 300);
border: 1px solid map-get($green-shades, 200);
padding: 20px 20px;
background-color: map-get($green-shades, 200);
background-color: map-get($green-shades, 100);
color: $color-black-light-1;
> .backup-fail {
@ -175,10 +164,10 @@
> .restore-zone {
@include border-radius(3px);
border: 1px solid map-get($gray-shades, 300);
border: 1px solid map-get($red-shades, 200);
margin: 50px 0;
padding: 20px 20px;
background-color: map-get($red-shades, 200);
background-color: map-get($red-shades, 100);
color: $color-black-light-1;
> .restore-fail {

View file

@ -1,14 +1,5 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">Authentication</h1>
<h2 class="sub-heading">Choose user authentication mechanism</h2>
</div>
</div>
</div>
<div class="view-customize">
<form class="mt-5">
<form>
<div class="widget-list-picker widget-list-picker-horiz">
<ul class="options">
<li class="option {{if isDocumizeProvider "selected"}}" {{action "onDocumize"}}>
@ -35,202 +26,144 @@
</ul>
</div>
<br>
<br>
<br>
{{#if isDocumizeProvider}}
<p>There are no settings.</p>
{{/if}}
{{ui/ui-spacer size=300}}
{{#if isKeycloakProvider}}
<div class="form-group row">
<label for="keycloak-url" class="col-sm-3 col-form-label">Keycloak Server URL</label>
<div class="col-sm-9">
{{focus-input id="keycloak-url" type="text" value=keycloakConfig.url class=(if KeycloakUrlError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. http://localhost:8888/auth</small>
</div>
<div class="form-group">
<label for="keycloak-url">Keycloak Server URL</label>
{{focus-input id="keycloak-url" type="text" value=keycloakConfig.url class=(if KeycloakUrlError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. http://localhost:8888/auth</small>
</div>
<div class="form-group row">
<label for="keycloak-realm" class="col-sm-3 col-form-label">Keycloak Realm</label>
<div class="col-sm-9">
{{input id="keycloak-realm" type="text" value=keycloakConfig.realm class=(if KeycloakRealmError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. main</small>
</div>
<div class="form-group">
<label for="keycloak-realm">Keycloak Realm</label>
{{input id="keycloak-realm" type="text" value=keycloakConfig.realm class=(if KeycloakRealmError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. main</small>
</div>
<div class="form-group row">
<label for="keycloak-publicKey" class="col-sm-3 col-form-label">Keycloak Realm Public Key</label>
<div class="col-sm-9">
{{textarea id="keycloak-publicKey" type="text" value=keycloakConfig.publicKey rows=7 class=(if KeycloakPublicKeyError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Copy the RSA Public Key from Realm Settings &rarr; Keys</small>
</div>
<div class="form-group">
<label for="keycloak-publicKey">Keycloak Realm Public Key</label>
{{textarea id="keycloak-publicKey" type="text" value=keycloakConfig.publicKey rows=7 class=(if KeycloakPublicKeyError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Copy the RSA Public Key from Realm Settings &rarr; Keys</small>
</div>
<div class="form-group row">
<label for="keycloak-clientId" class="col-sm-3 col-form-label">Keycloak OIDC Client ID</label>
<div class="col-sm-9">
{{input id="keycloak-clientId" type="text" value=keycloakConfig.clientId class=(if KeycloakClientIdError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. account</small>
</div>
<div class="form-group">
<label for="keycloak-clientId">Keycloak OIDC Client ID</label>
{{input id="keycloak-clientId" type="text" value=keycloakConfig.clientId class=(if KeycloakClientIdError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. account</small>
</div>
<div class="form-group row">
<label for="keycloak-group" class="col-sm-3 col-form-label">Keycloak Group ID (Optional)</label>
<div class="col-sm-9">
{{input id="keycloak-group" type="text" value=keycloakConfig.group class="form-control"}}
<small class="form-text text-muted">If you want to sync users in a particular Group (e.g. "Documize Users"), provide the Group ID (e.g. 511d8b61-1ec8-45f6-bc8d-5de64d54c9d2)</small>
</div>
<div class="form-group">
<label for="keycloak-group">Keycloak Group ID (Optional)</label>
{{input id="keycloak-group" type="text" value=keycloakConfig.group class="form-control"}}
<small class="form-text text-muted">If you want to sync users in a particular Group (e.g. "Documize Users"), provide the Group ID (e.g. 511d8b61-1ec8-45f6-bc8d-5de64d54c9d2)</small>
</div>
<div class="form-group row">
<label for="keycloak-admin-user" class="col-sm-3 col-form-label">Keycloak Username</label>
<div class="col-sm-9">
{{input id="keycloak-admin-user" type="text" value=keycloakConfig.adminUser class=(if KeycloakAdminUserError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Used to connect with Keycloak and sync users with Documize (create user under Master Realm and assign 'view-users' role
against Realm specified above)</small>
</div>
<div class="form-group">
<label for="keycloak-admin-user">Keycloak Username</label>
{{input id="keycloak-admin-user" type="text" value=keycloakConfig.adminUser class=(if KeycloakAdminUserError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Used to connect with Keycloak and sync users with Documize (create user under Master Realm and assign 'view-users' role
against Realm specified above)</small>
</div>
<div class="form-group row">
<label for="keycloak-admin-password" class="col-sm-3 col-form-label">Keycloak Password</label>
<div class="col-sm-9">
{{input id="keycloak-admin-password" type="password" value=keycloakConfig.adminPassword class=(if KeycloakAdminPasswordError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Used to connect with Keycloak and sync users with Documize</small>
</div>
<div class="form-group">
<label for="keycloak-admin-password">Keycloak Password</label>
{{input id="keycloak-admin-password" type="password" value=keycloakConfig.adminPassword class=(if KeycloakAdminPasswordError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Used to connect with Keycloak and sync users with Documize</small>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label">Disable Logout</label>
<div class="col-sm-9">
{{x-toggle value=keycloakConfig.disableLogout size="medium" theme="light" onToggle=(action (mut keycloakConfig.disableLogout))}}
</div>
<div class="form-group">
<label>Disable Logout</label>
{{x-toggle value=keycloakConfig.disableLogout size="medium" theme="light" onToggle=(action (mut keycloakConfig.disableLogout))}}
</div>
<div class="form-group row">
<label for="ldap-defaultPermissionAddSpace" class="col-sm-3 col-form-label">Can Create Spaces</label>
<div class="col-sm-9">
{{x-toggle value=keycloakConfig.defaultPermissionAddSpace size="medium" theme="light" onToggle=(action (mut keycloakConfig.defaultPermissionAddSpace))}}
</div>
<div class="form-group">
<label for="ldap-defaultPermissionAddSpace">Can Create Spaces</label>
{{x-toggle value=keycloakConfig.defaultPermissionAddSpace size="medium" theme="light" onToggle=(action (mut keycloakConfig.defaultPermissionAddSpace))}}
</div>
{{/if}}
{{#if isLDAPProvider}}
<div class="form-group row">
<label for="ldap-host" class="col-sm-3 col-form-label">LDAP Server</label>
<div class="col-sm-9">
{{focus-input id="ldap-host" type="text" value=ldapConfig.serverHost class=(if ldapErrorServerHost "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">IP or host address, e.g. ldap.example.org, 127.0.0.1</small>
</div>
<div class="form-group">
<label for="ldap-host">LDAP Server</label>
{{focus-input id="ldap-host" type="text" value=ldapConfig.serverHost class=(if ldapErrorServerHost "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">IP or host address, e.g. ldap.example.org, 127.0.0.1</small>
</div>
<div class="form-group row">
<label for="ldap-port" class="col-sm-3 col-form-label">LDAP Server Port</label>
<div class="col-sm-9">
{{input id="ldap-port" type="number" value=ldapConfig.serverPort class=(if ldapErrorServerPort "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Port number, e.g. 389</small>
</div>
<div class="form-group">
<label for="ldap-port">LDAP Server Port</label>
{{input id="ldap-port" type="number" value=ldapConfig.serverPort class=(if ldapErrorServerPort "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Port number, e.g. 389</small>
</div>
<div class="form-group row">
<label for="ldap-encryption" class="col-sm-3 col-form-label">Encryption</label>
<div class="col-sm-9">
<select onchange={{action "onLDAPEncryption" value="target.value"}} class="form-control">
<option value={{constants.AuthProvider.EncryptionTypeNone}} selected={{is-equal ldapConfig.encryptionType constants.AuthProvider.EncryptionTypeNone}}>
{{constants.AuthProvider.EncryptionTypeNone}}
</option>
<option value={{constants.AuthProvider.EncryptionTypeStartTLS}} selected={{is-equal ldapConfig.encryptionType constants.AuthProvider.EncryptionTypeStartTLS}}>
{{constants.AuthProvider.EncryptionTypeStartTLS}}
</option>
</select>
</div>
<div class="form-group">
<label for="ldap-encryption">Encryption</label>
<select onchange={{action "onLDAPEncryption" value="target.value"}} class="form-control">
<option value={{constants.AuthProvider.EncryptionTypeNone}} selected={{is-equal ldapConfig.encryptionType constants.AuthProvider.EncryptionTypeNone}}>
{{constants.AuthProvider.EncryptionTypeNone}}
</option>
<option value={{constants.AuthProvider.EncryptionTypeStartTLS}} selected={{is-equal ldapConfig.encryptionType constants.AuthProvider.EncryptionTypeStartTLS}}>
{{constants.AuthProvider.EncryptionTypeStartTLS}}
</option>
</select>
</div>
<div class="form-group row">
<label for="ldap-baseDN" class="col-sm-3 col-form-label">Base DN</label>
<div class="col-sm-9">
{{input id="ldap-baseDN" type="text" value=ldapConfig.baseDN class="form-control"}}
<small class="form-text text-muted">Starting point for search filters, e.g. ou=users,dc=example,dc=com</small>
</div>
<div class="form-group">
<label for="ldap-baseDN">Base DN</label>
{{input id="ldap-baseDN" type="text" value=ldapConfig.baseDN class="form-control"}}
<small class="form-text text-muted">Starting point for search filters, e.g. ou=users,dc=example,dc=com</small>
</div>
<div class="form-group row">
<label for="ldap-bindDN" class="col-sm-3 col-form-label">Bind DN</label>
<div class="col-sm-9">
{{input id="ldap-bindDN" type="text" value=ldapConfig.bindDN class=(if ldapErrorBindDN "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">login credentials for LDAP server</small>
</div>
<div class="form-group">
<label for="ldap-bindDN">Bind DN</label>
{{input id="ldap-bindDN" type="text" value=ldapConfig.bindDN class=(if ldapErrorBindDN "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">login credentials for LDAP server</small>
</div>
<div class="form-group row">
<label for="ldap-bindPassword" class="col-sm-3 col-form-label">Bind Password</label>
<div class="col-sm-9">
{{input id="ldap-bindPassword" type="password" value=ldapConfig.bindPassword class=(if ldapErrorBindPassword "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">login credentials for LDAP server</small>
</div>
<div class="form-group">
<label for="ldap-bindPassword">Bind Password</label>
{{input id="ldap-bindPassword" type="password" value=ldapConfig.bindPassword class=(if ldapErrorBindPassword "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">login credentials for LDAP server</small>
</div>
<div class="form-group row">
<label for="ldap-userFilter" class="col-sm-3 col-form-label">User Filter</label>
<div class="col-sm-9">
{{input id="ldap-userFilter" type="text" value=ldapConfig.userFilter class=(if ldapErrorNoFilter "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Search filter for finding users, e.g. (|(objectClass=person)(objectClass=user)(objectClass=inetOrgPerson))</small>
<small class="form-text text-muted highlight">Specify User Filter and/or Group Filter</small>
</div>
<div class="form-group">
<label for="ldap-userFilter">User Filter</label>
{{input id="ldap-userFilter" type="text" value=ldapConfig.userFilter class=(if ldapErrorNoFilter "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Search filter for finding users, e.g. (|(objectClass=person)(objectClass=user)(objectClass=inetOrgPerson))</small>
<small class="form-text text-muted highlight">Specify User Filter and/or Group Filter</small>
</div>
<div class="form-group row">
<label for="ldap-groupFilter" class="col-sm-3 col-form-label">Group Filter</label>
<div class="col-sm-9">
{{input id="ldap-groupFilter" type="text" value=ldapConfig.groupFilter class=(if ldapErrorNoFilter "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Search filter for finding users via groups, e.g. (&(objectClass=group)(|(cn=ship_crew)(cn=admin_staff)))</small>
</div>
<div class="form-group">
<label for="ldap-groupFilter">Group Filter</label>
{{input id="ldap-groupFilter" type="text" value=ldapConfig.groupFilter class=(if ldapErrorNoFilter "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Search filter for finding users via groups, e.g. (&(objectClass=group)(|(cn=ship_crew)(cn=admin_staff)))</small>
</div>
<div class="form-group row">
<label for="ldap-attributeUserRDN" class="col-sm-3 col-form-label">User Attribute RDN</label>
<div class="col-sm-9">
{{input id="ldap-attributeUserRDN" type="text" value=ldapConfig.attributeUserRDN class=(if ldapErrorAttributeUserRDN "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Username/login attribute, e.g. uid in LDAP, sAMAccountName in Active Directory</small>
<small class="form-text text-muted highlight">User Attributes used to retreive data when using User Filter</small>
</div>
<div class="form-group">
<label for="ldap-attributeUserRDN">User Attribute RDN</label>
{{input id="ldap-attributeUserRDN" type="text" value=ldapConfig.attributeUserRDN class=(if ldapErrorAttributeUserRDN "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Username/login attribute, e.g. uid in LDAP, sAMAccountName in Active Directory</small>
<small class="form-text text-muted highlight">User Attributes used to retreive data when using User Filter</small>
</div>
<div class="form-group row">
<label for="ldap-attributeUserFirstname" class="col-sm-3 col-form-label">User Attribute Firstname</label>
<div class="col-sm-9">
{{input id="ldap-attributeUserFirstname" type="text" value=ldapConfig.attributeUserFirstname class=(if ldapErrorAttributeUserFirstname "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Firstname attribute, e.g. givenName</small>
</div>
<div class="form-group">
<label for="ldap-attributeUserFirstname">User Attribute Firstname</label>
{{input id="ldap-attributeUserFirstname" type="text" value=ldapConfig.attributeUserFirstname class=(if ldapErrorAttributeUserFirstname "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Firstname attribute, e.g. givenName</small>
</div>
<div class="form-group row">
<label for="ldap-attributeUserLastname" class="col-sm-3 col-form-label">User Attribute Lastname</label>
<div class="col-sm-9">
{{input id="ldap-attributeUserLastname" type="text" value=ldapConfig.attributeUserLastname class=(if ldapErrorAttributeUserLastname "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Lastname attribute, e.g. sn</small>
</div>
<div class="form-group">
<label for="ldap-attributeUserLastname">User Attribute Lastname</label>
{{input id="ldap-attributeUserLastname" type="text" value=ldapConfig.attributeUserLastname class=(if ldapErrorAttributeUserLastname "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Lastname attribute, e.g. sn</small>
</div>
<div class="form-group row">
<label for="ldap-attributeUserEmail" class="col-sm-3 col-form-label">User Attribute Email</label>
<div class="col-sm-9">
{{input id="ldap-attributeUserEmail" type="text" value=ldapConfig.attributeUserEmail class=(if ldapErrorAttributeUserEmail "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Email attribute, e.g. mail</small>
</div>
<div class="form-group">
<label for="ldap-attributeUserEmail">User Attribute Email</label>
{{input id="ldap-attributeUserEmail" type="text" value=ldapConfig.attributeUserEmail class=(if ldapErrorAttributeUserEmail "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Email attribute, e.g. mail</small>
</div>
<div class="form-group row">
<label for="ldap-attributeGroupMember" class="col-sm-3 col-form-label">Group Attribute Member</label>
<div class="col-sm-9">
{{input id="ldap-attributeGroupMember" type="text" value=ldapConfig.attributeGroupMember class=(if ldapErrorAttributeGroupMember "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Attribute that identifies individual group member, e.g. member or uniqueMember</small>
<small class="form-text text-muted highlight">Group Attributes used to retreive data when using Group Filter</small>
</div>
<div class="form-group">
<label for="ldap-attributeGroupMember">Group Attribute Member</label>
{{input id="ldap-attributeGroupMember" type="text" value=ldapConfig.attributeGroupMember class=(if ldapErrorAttributeGroupMember "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Attribute that identifies individual group member, e.g. member or uniqueMember</small>
<small class="form-text text-muted highlight">Group Attributes used to retreive data when using Group Filter</small>
</div>
<div class="form-group row">
<label for="ldap-disableLogout" class="col-sm-3 col-form-label">Disable Logout</label>
<div class="col-sm-9">
{{x-toggle value=ldapConfig.disableLogout size="medium" theme="light" onToggle=(action (mut ldapConfig.disableLogout))}}
</div>
<div class="form-group">
<label for="ldap-disableLogout">Disable Logout</label>
{{x-toggle value=ldapConfig.disableLogout size="medium" theme="light" onToggle=(action (mut ldapConfig.disableLogout))}}
</div>
<div class="form-group row">
<label for="ldap-defaultPermissionAddSpace" class="col-sm-3 col-form-label">Can Create Spaces</label>
<div class="col-sm-9">
{{x-toggle value=ldapConfig.defaultPermissionAddSpace size="medium" theme="light" onToggle=(action (mut ldapConfig.defaultPermissionAddSpace))}}
</div>
</div>
<div class="form-group row">
<div class="col-sm-3"></div>
<div class="col-sm-9">
<div class="btn btn-secondary mt-4" {{action "onLDAPPreview"}}>Test Connection & Preview pauth&rarr;</div>
</div>
<div class="form-group">
<label for="ldap-defaultPermissionAddSpace">Can Create Spaces</label>
{{x-toggle value=ldapConfig.defaultPermissionAddSpace size="medium" theme="light" onToggle=(action (mut ldapConfig.defaultPermissionAddSpace))}}
</div>
{{ui/ui-button color=constants.Color.Yellow light=true label="Test →" onClick=(action "onLDAPPreview")}}
{{ui/ui-button-gap}}
{{/if}}
<div class="btn btn-success mt-4" {{action "onSave"}}>ACTIVATE</div>
{{ui/ui-button color=constants.Color.Green light=true label=constants.Label.Activate onClick=(action "onSave")}}
</form>
{{#if (gt keycloakFailure.length 0)}}
@ -253,8 +186,8 @@
{{/if}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Cancel dismiss=true}}
</div>
</div>
</div>
</div>
</div>

View file

@ -1,14 +1,4 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">Backup & Restore</h1>
<h2 class="sub-heading">Export all documents and settings to a single ZIP file.</h2>
</div>
</div>
</div>
<div class="view-customize">
<div class="backup-restore">
<div class="backup-zone">
{{#if session.isGlobalAdmin}}
@ -36,10 +26,10 @@
{{#if backupRunning}}
<h3 class="text-success">Backup running, please wait...</h3>
{{else}}
<button class="btn btn-success mb-3" {{action "onBackup"}}>TENANT BACKUP ({{appMeta.appHost}})</button>
{{ui/ui-button color=constants.Color.Yellow light=true label=(concat "TENANT BACKUP (" appMeta.appHost ")") onClick=(action "onBackup")}}
{{#if session.isGlobalAdmin}}
<div class="button-gap" />
<button class="btn btn-success mb-3" {{action "onSystemBackup"}}>SYSTEM BACKUP</button>
{{ui/ui-button-gap}}
{{ui/ui-button color=constants.Color.Green light=true label="SYSTEM BACKUP" onClick=(action "onSystemBackup")}}
{{/if}}
{{/if}}
{{#if backupFailed}}
@ -73,7 +63,7 @@
<div class="restore-success">Restore completed &mdash; restart your browser and log in</div>
{{else}}
{{#if restoreUploadReady}}
<button class="btn btn-danger mb-3" {{action "onShowRestoreModal"}}>{{restoreButtonLabel}}</button>
{{ui/ui-button color=constants.Color.Red light=false label=restoreButtonLabel onClick=(action "onShowRestoreModal")}}
{{/if}}
{{/if}}
</div>
@ -94,8 +84,9 @@
</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-danger" onclick={{action "onRestore"}}>Start Restore</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Cancel dismiss=true}}
{{ui/ui-button-gap}}
{{ui/ui-button color=constants.Color.Red light=true label=constants.Label.Restore onClick=(action "onRestore")}}
</div>
</div>
</div>

View file

@ -1,37 +1,31 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">{{appMeta.edition}} Edition {{appMeta.version}}</h1>
<h2 class="sub-heading">Enterprise Edition unlocks
<a class="" href="https://documize.com/pricing">premium capabilities and product support</a>
</h2>
</div>
</div>
</div>
<div class="product-update">
<div class="update-summary">
{{#if appMeta.updateAvailable}}
<a href="https://documize.com/downloads" class="caption">New version available</a>
<div class="update-status">
{{!-- appMeta.updateAvailable --}}
{{#if true}}
<a class="title" href="https://documize.com/downloads">Documize product update is available :)</a>
<p class="instructions">
To upgrade, replace existing binary and restart Documize. Migrate between Community and Enterprise editions seamlessly.
</p>
{{else}}
<div class="caption">Release Summary</div>
<div class="title">Product Downloads</div>
{{/if}}
<p>
<span class="color-black-light-2">Community Edition {{appMeta.communityLatest}}</span>&nbsp;&nbsp;&nbsp;
<a href="https://storage.googleapis.com/documize/downloads/documize-community-windows-amd64.exe" class="bold-700">Windows</a>&nbsp;&middot;
<a href="https://storage.googleapis.com/documize/downloads/documize-community-linux-amd64" class="bold-700">Linux</a>&nbsp;&middot;
<a href="https://storage.googleapis.com/documize/downloads/documize-community-darwin-amd64" class="bold-700">macOS</a>&nbsp;
</p>
<p>
<span class="color-black-light-2">Enterprise Edition {{appMeta.enterpriseLatest}}</span>&nbsp;&nbsp;&nbsp;
<a href="https://storage.googleapis.com/documize/downloads/documize-enterprise-windows-amd64.exe" class="bold-700 color-gray-700">Windows</a>&nbsp;&middot;
<a href="https://storage.googleapis.com/documize/downloads/documize-enterprise-linux-amd64" class="bold-700 color-gray-700">Linux</a>&nbsp;&middot;
<a href="https://storage.googleapis.com/documize/downloads/documize-enterprise-darwin-amd64" class="bold-700 color-gray-700">macOS</a>&nbsp;
</p>
<div class="my-5" />
<div class="links">
<p>
<span class="edition-name">Community Edition {{appMeta.communityLatest}}</span>&nbsp;&nbsp;&nbsp;
<a class="link" href="https://storage.googleapis.com/documize/downloads/documize-community-windows-amd64.exe">Windows</a>&nbsp;&middot;
<a class="link" href="https://storage.googleapis.com/documize/downloads/documize-community-linux-amd64">Linux</a>&nbsp;&middot;
<a class="link" href="https://storage.googleapis.com/documize/downloads/documize-community-darwin-amd64">macOS</a>&nbsp;
</p>
<p>
<span class="edition-name">Enterprise Edition {{appMeta.enterpriseLatest}}</span>&nbsp;&nbsp;&nbsp;
<a class="link" href="https://storage.googleapis.com/documize/downloads/documize-enterprise-windows-amd64.exe">Windows</a>&nbsp;&middot;
<a class="link" href="https://storage.googleapis.com/documize/downloads/documize-enterprise-linux-amd64">Linux</a>&nbsp;&middot;
<a class="link" href="https://storage.googleapis.com/documize/downloads/documize-enterprise-darwin-amd64">macOS</a>&nbsp;
</p>
</div>
</div>
{{ui/ui-spacer size=400}}
<div class="change-log">
{{{changelog}}}
</div>
</div>

View file

@ -1,73 +1,52 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">Instance Settings</h1>
<h2 class="sub-heading">Settings applicable to the Documize instance</h2>
</div>
</div>
</div>
<div class="view-customize">
<form class="mt-5">
<div class="form-group row">
<label for="siteTitle" class="col-sm-4 col-form-label">Site Name</label>
<div class="col-sm-7">
{{focus-input id="siteTitle" type="text" value=model.general.title class=(if hasTitleInputError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Provide short title for this Documize instance</small>
<form>
<div class="form-group">
<label for="siteTitle">Site Name</label>
{{focus-input id="siteTitle" type="text" value=model.general.title class=(if hasTitleInputError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Provide short title for this Documize instance</small>
</div>
<div class="form-group">
<label id="siteMessage">Site Message</label>
{{textarea id="siteMessage" rows="3" value=model.general.message class=(if hasMessageInputError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Provide short message explaining this Documize instance</small>
</div>
<div class="form-group">
<label>Anonymous Access</label>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="allowAnonymousAccess" checked={{model.general.allowAnonymousAccess}}>
<label class="form-check-label" for="allowAnonymousAccess">
Make content marked as "Everyone" available to anonymous users
</label>
</div>
</div>
<div class="form-group row">
<label id="siteMessage" class="col-sm-4 col-form-label">Site Message</label>
<div class="col-sm-7">
{{textarea id="siteMessage" rows="3" value=model.general.message class=(if hasMessageInputError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">Provide short message explaining this Documize instance</small>
</div>
<div class="form-group">
<label for="conversionEndpoint">Conversion Service URL</label>
{{input id="conversionEndpoint" type="text" value=model.general.conversionEndpoint class=(if hasConversionEndpointInputError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">
Endpoint for handling import/export (e.g. https://api.documize.com,
<a href="https://docs.documize.com/s/WNEpptWJ9AABRnha/administration-guides/d/WO0pt_MXigAB6sJ7/general-options">view documentation</a>)
</small>
</div>
<div class="form-group row">
<label class="col-sm-4 col-form-label">Anonymous Access</label>
<div class="col-sm-7">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="allowAnonymousAccess" checked={{model.general.allowAnonymousAccess}}>
<label class="form-check-label" for="allowAnonymousAccess">
Make content marked as "Everyone" available to anonymous users
</label>
</div>
</div>
<div class="form-group">
<label for="maxTags">Maximum Tags Per Document</label>
<select class="form-control" id="maxTags" {{action "change" on="change"}}>
<option selected={{is-equal 3 maxTags}} value="3">3</option>
<option selected={{is-equal 4 maxTags}} value="4">4</option>
<option selected={{is-equal 5 maxTags}} value="5">5</option>
<option selected={{is-equal 6 maxTags}} value="6">6</option>
<option selected={{is-equal 7 maxTags}} value="7">7</option>
<option selected={{is-equal 8 maxTags}} value="8">8</option>
<option selected={{is-equal 9 maxTags}} value="9">9</option>
<option selected={{is-equal 10 maxTags}} value="10">10</option>
</select>
<small class="form-text text-muted">How many tags can be assigned to a document (between 3 and 10 tags)</small>
</div>
<div class="form-group row">
<label for="conversionEndpoint" class="col-sm-4 col-form-label">Conversion Service URL</label>
<div class="col-sm-7">
{{input id="conversionEndpoint" type="text" value=model.general.conversionEndpoint class=(if hasConversionEndpointInputError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">
Endpoint for handling import/export (e.g. https://api.documize.com,
<a href="https://docs.documize.com/s/WNEpptWJ9AABRnha/administration-guides/d/WO0pt_MXigAB6sJ7/general-options">view documentation</a>)
</small>
</div>
</div>
<div class="form-group row">
<label for="maxTags" class="col-sm-4 col-form-label">Maximum Tags Per Document</label>
<div class="col-sm-7">
<select class="form-control" id="maxTags" {{action "change" on="change"}}>
<option selected={{is-equal 3 maxTags}} value="3">3</option>
<option selected={{is-equal 4 maxTags}} value="4">4</option>
<option selected={{is-equal 5 maxTags}} value="5">5</option>
<option selected={{is-equal 6 maxTags}} value="6">6</option>
<option selected={{is-equal 7 maxTags}} value="7">7</option>
<option selected={{is-equal 8 maxTags}} value="8">8</option>
<option selected={{is-equal 9 maxTags}} value="9">9</option>
<option selected={{is-equal 10 maxTags}} value="10">10</option>
</select>
<small class="form-text text-muted">How many tags can be assigned to a document (between 3 and 10 tags)</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-4 col-form-label">Default Site Theme</label>
<div class="col-sm-7">
{{ui/theme-picker onChange=(action "onThemeChange")}}
<small class="form-text text-muted">Users can set their own theme under Profile</small>
</div>
<div class="form-group">
<label>Default Site Theme</label>
{{ui/theme-picker onChange=(action "onThemeChange")}}
<small class="form-text text-muted">Users can set their own theme under Profile</small>
</div>
<div class="btn btn-success bold-700 text-uppercase mt-4" {{action "save"}}>Save</div>
{{ui/ui-button color=constants.Color.Green light=true label=constants.Label.Save onClick=(action "save")}}
</form>
</div>

View file

@ -1,52 +1,33 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">Integrations Settings</h1>
<h2 class="sub-heading">Enable and configure third party integrations</h2>
</div>
</div>
</div>
<div class="view-customize">
<form class="mt-5">
<form>
<h2>Jira</h2>
<p>Displays issues within documentation</p>
<div class="form-group row">
<label for="jira-url" class="col-sm-4 col-form-label">URL</label>
<div class="col-sm-7">
{{focus-input id="jira-url" type="text" value=jiraCreds.url class="form-control"}}
<small class="form-text text-muted">Fully qualified domain name for your Jira instance e.g. http://jira.example.org</small>
</div>
<div class="form-group">
<label for="jira-url">URL</label>
{{focus-input id="jira-url" type="text" value=jiraCreds.url class="form-control"}}
<small class="form-text text-muted">Fully qualified domain name for your Jira instance e.g. http://jira.example.org</small>
</div>
<div class="form-group row">
<label for="jira-username" class="col-sm-4 col-form-label">Username</label>
<div class="col-sm-7">
{{input id="jira-username" type="text" value=jiraCreds.username class="form-control"}}
<small class="form-text text-muted">Your Jira login username/email</small>
</div>
<div class="form-group">
<label for="jira-username">Username</label>
{{input id="jira-username" type="text" value=jiraCreds.username class="form-control"}}
<small class="form-text text-muted">Your Jira login username/email</small>
</div>
<div class="form-group row">
<label for="jira-secret" class="col-sm-4 col-form-label">Password</label>
<div class="col-sm-7">
{{input id="jira-secret" type="password" value=jiraCreds.secret class="form-control"}}
<small class="form-text text-muted">Provide API Token if using Atlassian Cloud or Password when self-hosting Jira</small>
</div>
<div class="form-group">
<label for="jira-secret">Password</label>
{{input id="jira-secret" type="password" value=jiraCreds.secret class="form-control"}}
<small class="form-text text-muted">Provide API Token if using Atlassian Cloud or Password when self-hosting Jira</small>
</div>
{{#if session.isGlobalAdmin}}
<h2>Trello</h2>
<p>Displays boards within documentation</p>
<div class="form-group row">
<label for="trello-key" class="col-sm-4 col-form-label">App Key</label>
<div class="col-sm-7">
<div class="form-group">
<label for="trello-key">App Key</label>
{{input id="trello-key" type="text" value=trelloCreds.appKey class="form-control"}}
<small class="form-text text-muted">See <a href="https://trello.com/app-key">https://trello.com/app-key</a></small>
</div>
<small class="form-text text-muted">See <a href="https://trello.com/app-key">https://trello.com/app-key</a></small>
</div>
{{/if}}
<div class="btn btn-success bold-700 text-uppercase mt-4" {{action "onSave"}}>Save</div>
{{ui/ui-button color=constants.Color.Green light=true label=constants.Label.Save onClick=(action "onSave")}}
</form>
</div>

View file

@ -1,17 +1,8 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">Search</h1>
<h2 class="sub-heading">There are currently {{searchStatus.entries}} search entries.</h2>
</div>
</div>
</div>
<div class="view-customize">
<form class="mt-5 ">
<form>
<div class="form-group">
<p>It can take up to 30 minutes to rebuild the search index across all documents and associated content.</p>
<div class="btn btn-danger mt-3" {{action "reindex"}}>{{buttonLabel}}</div>
<p>It can take up to 30 minutes to rebuild the search index.</p>
{{ui/ui-button color=constants.Color.Yellow light=true label=buttonLabel onClick=(action "reindex")}}
</div>
</form>
</div>

View file

@ -1,91 +1,56 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">SMTP Server</h1>
<h2 class="sub-heading">For sending email notifications</h2>
</div>
</div>
</div>
<div class="view-customize">
<form class="mt-5">
<div class="form-group row">
<label for="smtp-host" class="col-sm-4 col-form-label">Host</label>
<div class="col-sm-8">
{{focus-input id="smtp-host" type="text" value=model.smtp.host class=(if SMTPHostEmptyError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. my.host.com</small>
<form>
<div class="form-group">
<label for="smtp-host">Host</label>
{{focus-input id="smtp-host" type="text" value=model.smtp.host class=(if SMTPHostEmptyError "form-control is-invalid" "form-control")}}
<small class="form-text">e.g. my.host.com</small>
</div>
<div class="form-group">
<label for="smtp-port">Port</label>
{{input id="smtp-port" type="text" value=model.smtp.port class=(if SMTPPortEmptyError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. 587</small>
</div>
<div class="form-group">
<label for="smtp-userid">Username</label>
{{input id="smtp-userid" type="text" value=model.smtp.userid class="form-control"}}
<small class="form-text text-muted">e.g. Login username for SMTP server</small>
</div>
<div class="form-group">
<label for="smtp-password">Password</label>
{{input id="smtp-password" type="password" value=model.smtp.password class="form-control"}}
<small class="form-text text-muted">e.g. Login password for SMTP server</small>
</div>
<div class="form-group">
<label for="smtp-sender">Sender Email</label>
{{input id="smtp-sender" type="email" value=model.smtp.sender class=(if SMTPSenderEmptyError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. user@some-domain.com</small>
</div>
<div class="form-group">
<label for="smtp-senderName">Sender Name</label>
{{input id="smtp-senderName" type="text" value=model.smtp.senderName class=(if senderNameError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. Documize</small>
</div>
<div class="form-group">
<label>Anonymous</label>
<div class="form-check">
{{input id="smtp-anonymous" type="checkbox" checked=model.smtp.anonymous class="form-check-input"}}
<label class="form-check-label" for="smtp-anonymous">Anonymous authentication, ignore Username and Password fields</label>
</div>
</div>
<div class="form-group row">
<label for="smtp-port" class="col-sm-4 col-form-label">Port</label>
<div class="col-sm-8">
{{input id="smtp-port" type="text" value=model.smtp.port class=(if SMTPPortEmptyError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. 587</small>
<div class="form-group">
<label>Base64</label>
<div class="form-check">
{{input id="smtp-base64creds" type="checkbox" checked=model.smtp.base64creds class="form-check-input"}}
<label class="form-check-label" for="smtp-base64creds">Base64 encode Username and Password fields</label>
</div>
</div>
<div class="form-group row">
<label for="smtp-userid" class="col-sm-4 col-form-label">Username</label>
<div class="col-sm-8">
{{input id="smtp-userid" type="text" value=model.smtp.userid class="form-control"}}
<small class="form-text text-muted">e.g. Login username for SMTP server</small>
<div class="form-group">
<label>SSL</label>
<div class="form-check">
{{input id="smtp-usessl" type="checkbox" checked=model.smtp.usessl class="form-check-input"}}
<label class="form-check-label" for="smtp-usessl">Use SSL</label>
</div>
</div>
<div class="form-group row">
<label for="smtp-password" class="col-sm-4 col-form-label">Password</label>
<div class="col-sm-8">
{{input id="smtp-password" type="password" value=model.smtp.password class="form-control"}}
<small class="form-text text-muted">e.g. Login password for SMTP server</small>
</div>
</div>
<div class="form-group row">
<label for="smtp-sender" class="col-sm-4 col-form-label">Sender Email</label>
<div class="col-sm-8">
{{input id="smtp-sender" type="email" value=model.smtp.sender class=(if SMTPSenderEmptyError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. user@some-domain.com</small>
</div>
</div>
<div class="form-group row">
<label for="smtp-senderName" class="col-sm-4 col-form-label">Sender Name</label>
<div class="col-sm-8">
{{input id="smtp-senderName" type="text" value=model.smtp.senderName class=(if senderNameError "form-control is-invalid" "form-control")}}
<small class="form-text text-muted">e.g. Documize</small>
</div>
</div>
<div class="form-group row">
<label class="col-sm-4 col-form-label">Anonymous</label>
<div class="col-sm-8">
<div class="form-check">
{{input id="smtp-anonymous" type="checkbox" checked=model.smtp.anonymous class="form-check-input"}}
<label class="form-check-label" for="smtp-anonymous">Anonymous authentication, ignore Username and Password fields</label>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-4 col-form-label">Base64</label>
<div class="col-sm-8">
<div class="form-check">
{{input id="smtp-base64creds" type="checkbox" checked=model.smtp.base64creds class="form-check-input"}}
<label class="form-check-label" for="smtp-base64creds">Base64 encode Username and Password fields</label>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-4 col-form-label">SSL</label>
<div class="col-sm-8">
<div class="form-check">
{{input id="smtp-usessl" type="checkbox" checked=model.smtp.usessl class="form-check-input"}}
<label class="form-check-label" for="smtp-usessl">Use SSL</label>
</div>
</div>
</div>
<div class="btn btn-success mt-4" {{action "saveSMTP"}}>{{buttonText}}</div>
{{ui/ui-button color=constants.Color.Green light=true label=buttonText onClick=(action "saveSMTP")}}
</form>
{{#if testSMTP.success}}
<p class="smtp-success my-3">{{testSMTP.message}}</p>
{{else}}
<p class="smtp-failure my-3">{{testSMTP.message}}</p>
{{/if}}
</div>

View file

@ -1,15 +1,7 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">Manage Spaces</h1>
<h2 class="sub-heading">Delete spaces, take ownership of shared spaces and orphaned spaces</h2>
</div>
</div>
</div>
<div class="view-customize my-5">
<div class="view-customize">
{{#if spaces}}
<button type="button" class="btn btn-success" onclick={{action "onExport"}}>Export content</button>
{{ui/ui-button color=constants.Color.Yellow light=true icon=constants.Icon.Export label=constants.Label.Export onClick=(action "onExport")}}
<div class="space-list">
{{#each spaces as |space|}}
<div class="space row">
@ -46,8 +38,9 @@
</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-danger" onclick={{action "onDelete"}}>Delete</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Cancel dismiss=true}}
{{ui/ui-button-gap}}
{{ui/ui-button color=constants.Color.Red light=true label=constants.Label.Delete onClick=(action "onDelete")}}
</div>
</div>
</div>

View file

@ -1,11 +1,9 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">Users</h1>
<h2 class="sub-heading">Set basic information, passwords and permissions for {{users.length}} users</h2>
{{#if isAuthProviderDocumize}}
<div class="btn btn-success mt-3 mb-3" {{action "onOpenUserModal"}}>Add user</div>
{{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">

View file

@ -1,11 +1,8 @@
<div class="row">
<div class="col">
<div class="view-customize">
<h1 class="admin-heading">Groups</h1>
<h2 class="sub-heading">Create groups for easier user management &mdash; assign users to groups</h2>
<div class="btn btn-success mt-3 mb-3" {{action "onShowAddGroupModal"}}>Add Group</div>
{{ui/ui-button color=constants.Color.Green light=true icon=constants.Icon.People label=constants.Label.Add onClick=(action "onShowAddGroupModal")}}
{{ui/ui-spacer size=300}}
<div id="add-group-modal" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
@ -24,8 +21,9 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-success" onclick= {{action "onAddGroup"}}>Add</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Close dismiss=true}}
{{ui/ui-button-gap}}
{{ui/ui-button color=constants.Color.Red light=true label=constants.Label.Add onClick=(action "onAddGroup")}}
</div>
</div>
</div>
@ -83,8 +81,9 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger" onclick= {{action "onDeleteGroup"}}>Delete</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Close dismiss=true}}
{{ui/ui-button-gap}}
{{ui/ui-button color=constants.Color.Red light=true label=constants.Label.Delete onClick=(action "onDeleteGroup")}}
</div>
</div>
</div>
@ -108,8 +107,9 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-success" onclick= {{action "onEditGroup"}}>Save</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Close dismiss=true}}
{{ui/ui-button-gap}}
{{ui/ui-button color=constants.Color.Green light=true label=constants.Label.Save onClick=(action "onEditGroup")}}
</div>
</div>
</div>
@ -134,7 +134,7 @@
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
{{ui/ui-button color=constants.Color.Gray light=true label=constants.Label.Close dismiss=true}}
</div>
</div>
</div>
@ -153,7 +153,7 @@
<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}}>
{{#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>
@ -202,7 +202,7 @@
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-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

@ -0,0 +1,10 @@
<div class="logo-heading">
<div class="image">
<i class="dicon {{icon}}" />
</div>
<div class="text">
{{layout/page-heading title=title}}
{{layout/page-desc desc=desc}}
</div>
</div>
{{ui/ui-spacer size=300}}

View file

@ -1,3 +1,4 @@
<div class="master-content">
{{yield}}
</div>
{{ui/ui-spacer size=300}}