1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-20 13:49:42 +02:00

Set consistent browser titles

This commit is contained in:
sauls8t 2018-01-24 13:23:11 +00:00
parent 88b99979a9
commit adef6dfffa
37 changed files with 140 additions and 117 deletions

View file

@ -490,7 +490,6 @@ func (h *Handler) Delete(w http.ResponseWriter, r *http.Request) {
response.WriteMissingDataError(w, method, "documentID") response.WriteMissingDataError(w, method, "documentID")
return return
} }
pageID := request.Param(r, "pageID") pageID := request.Param(r, "pageID")
if len(pageID) == 0 { if len(pageID) == 0 {
response.WriteMissingDataError(w, method, "pageID") response.WriteMissingDataError(w, method, "pageID")
@ -504,32 +503,25 @@ func (h *Handler) Delete(w http.ResponseWriter, r *http.Request) {
return return
} }
ok, err := h.workflowPermitsChange(doc, ctx) p, err := h.Store.Page.Get(ctx, pageID)
if !ok {
response.WriteForbiddenError(w)
h.Runtime.Log.Info("attempted delete section on locked document")
return
}
// If locked document then no can do
if doc.Protection == workflow.ProtectionLock {
response.WriteForbiddenError(w)
h.Runtime.Log.Info("attempted delete section on locked document")
return
}
// If approval workflow then only approvers can delete page
if doc.Protection == workflow.ProtectionReview {
approvers, err := permission.GetDocumentApprovers(ctx, *h.Store, doc.LabelID, doc.RefID)
if err != nil { if err != nil {
response.WriteServerError(w, method, err) response.WriteServerError(w, method, err)
h.Runtime.Log.Error(method, err) h.Runtime.Log.Error(method, err)
return return
} }
if !user.Exists(approvers, ctx.UserID) { // you can delete your own pending page
ownPending := false
if (p.Status == workflow.ChangePending || p.Status == workflow.ChangePendingNew) && p.UserID == ctx.UserID {
ownPending = true
}
// if not own page then check permission
if !ownPending {
ok, _ := h.workflowPermitsChange(doc, ctx)
if !ok {
response.WriteForbiddenError(w) response.WriteForbiddenError(w)
h.Runtime.Log.Info("attempted delete document section when not approver") h.Runtime.Log.Info("attempted delete section on locked document")
return return
} }
} }
@ -541,14 +533,6 @@ func (h *Handler) Delete(w http.ResponseWriter, r *http.Request) {
return return
} }
p, err := h.Store.Page.Get(ctx, pageID)
if err != nil {
ctx.Transaction.Rollback()
response.WriteServerError(w, method, err)
h.Runtime.Log.Error(method, err)
return
}
if len(p.BlockID) > 0 { if len(p.BlockID) > 0 {
h.Store.Block.DecrementUsage(ctx, p.BlockID) h.Store.Block.DecrementUsage(ctx, p.BlockID)
} }
@ -623,13 +607,6 @@ func (h *Handler) DeletePages(w http.ResponseWriter, r *http.Request) {
return return
} }
ok, err := h.workflowPermitsChange(doc, ctx)
if !ok {
response.WriteForbiddenError(w)
h.Runtime.Log.Info("attempted delete section on locked document")
return
}
ctx.Transaction, err = h.Runtime.Db.Beginx() ctx.Transaction, err = h.Runtime.Db.Beginx()
if err != nil { if err != nil {
response.WriteServerError(w, method, err) response.WriteServerError(w, method, err)
@ -646,6 +623,21 @@ func (h *Handler) DeletePages(w http.ResponseWriter, r *http.Request) {
return return
} }
ownPending := false
if (pageData.Status == workflow.ChangePending || pageData.Status == workflow.ChangePendingNew) && pageData.UserID == ctx.UserID {
ownPending = true
}
// if not own page then check permission
if !ownPending {
ok, _ := h.workflowPermitsChange(doc, ctx)
if !ok {
ctx.Transaction.Rollback()
response.WriteForbiddenError(w)
h.Runtime.Log.Info("attempted delete section on locked document")
return
}
}
if len(pageData.BlockID) > 0 { if len(pageData.BlockID) > 0 {
h.Store.Block.DecrementUsage(ctx, pageData.BlockID) h.Store.Block.DecrementUsage(ctx, pageData.BlockID)
} }
@ -1358,6 +1350,10 @@ func (h *Handler) FetchPages(w http.ResponseWriter, r *http.Request) {
page.Numberize(t) page.Numberize(t)
for i, j := range t { for i, j := range t {
model[i].Page = j model[i].Page = j
// pending pages get same numbering
for k := range model[i].Pending {
model[i].Pending[k].Page.Numbering = j.Numbering
}
} }
// deliver payload // deliver payload

View file

@ -23,11 +23,12 @@ export default Component.extend(TooltipMixin, {
didReceiveAttrs() { didReceiveAttrs() {
this._super(...arguments); this._super(...arguments);
if (this.get('isDestroyed') || this.get('isDestroying')) return; if (this.get('isDestroyed') || this.get('isDestroying')) return;
if (this.get('toEdit') === this.get('page.id') && this.get('permissions.documentEdit')) this.send('onEdit');
if (this.get('session.authenticated')) { if (this.get('session.authenticated')) {
this.workflow(); this.workflow();
} }
if (this.get('toEdit') === this.get('page.id') && this.get('permissions.documentEdit')) this.send('onEdit');
}, },
workflow() { workflow() {

View file

@ -19,13 +19,13 @@ export default Component.extend({
selectedDocuments: A([]), selectedDocuments: A([]),
selectedCaption: 'document', selectedCaption: 'document',
showAdd: computed('permissions', 'documents', function() { showAdd: computed('permissions.documentAdd', 'documents', function() {
return this.get('documents.length') === 0 && this.get('permissions.documentAdd'); return this.get('documents.length') === 0 && this.get('permissions.documentAdd');
}), }),
showLockout: computed('permissions', 'documents', function() { showLockout: computed('permissions.documentAdd', 'documents', function() {
return this.get('documents.length') === 0 && !this.get('permissions.documentAdd'); return this.get('documents.length') === 0 && !this.get('permissions.documentAdd');
}), }),
hasDocumentActions: computed('permissions', function() { hasDocumentActions: computed('permissions.{documentDelete,documentMove}', function() {
return this.get('permissions.documentDelete') || this.get('permissions.documentMove'); return this.get('permissions.documentDelete') || this.get('permissions.documentMove');
}), }),

View file

@ -113,7 +113,7 @@ export default Component.extend(AuthMixin, {
this.set('documents', documents); this.set('documents', documents);
let cb = this.get('onRefresh'); let cb = this.get('onRefresh');
cb.onRefresh(); cb();
}); });
}, },

View file

@ -265,17 +265,17 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, {
onShowTemplateDocModal() { onShowTemplateDocModal() {
let t = this.get('templates'); let t = this.get('templates');
if (t.length > 0) { t.forEach((t) => {
t[0].set('selected', true); t.set('selected', false);
});
this.modalOpen("#template-doc-modal", {"show": true}, '#template-doc-name'); this.modalOpen("#template-doc-modal", {"show": true}, '#template-doc-name');
}
}, },
onSelectTemplate(i) { onSelectTemplate(i) {
let t = this.get('templates'); let t = this.get('templates');
t.forEach((t) => { t.forEach((t) => {
t.set('selected', false); t.set('selected', false);
}) });
i.set('selected', true); i.set('selected', true);
this.set('selectedTemplate', i.id); this.set('selectedTemplate', i.id);
}, },
@ -288,16 +288,17 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, {
this.set('templateDocNameError', true); this.set('templateDocNameError', true);
$('#template-doc-name').focus(); $('#template-doc-name').focus();
return; return;
} else {
this.set('templateDocNameError', false);
this.set('templateDocName', '');
} }
let id = this.get('selectedTemplate'); let id = this.get('selectedTemplate');
if (is.empty(id)) { if (is.empty(id)) {
$('#widget-list-picker').addClass('is-invalid');
return; return;
} }
this.set('templateDocNameError', false);
this.set('templateDocName', '');
this.modalClose("#template-doc-modal"); this.modalClose("#template-doc-modal");
this.get('templateService').importSavedTemplate(this.get('space.id'), id, docName).then((document) => { this.get('templateService').importSavedTemplate(this.get('space.id'), id, docName).then((document) => {

View file

@ -22,10 +22,11 @@ export default Component.extend(NotifierMixin, AuthMixin, {
copyPermission: true, copyPermission: true,
copyDocument: false, copyDocument: false,
hasClone: notEmpty('clonedSpace.id'), hasClone: notEmpty('clonedSpace.id'),
clonedSpace: null,
init() { init() {
this._super(...arguments); this._super(...arguments);
this.clonedSpace = { id: '' }; // this.clonedSpace = { id: '' };
}, },
didInsertElement() { didInsertElement() {
@ -63,9 +64,8 @@ export default Component.extend(NotifierMixin, AuthMixin, {
} }
this.set('spaceName', ''); this.set('spaceName', '');
this.set('clonedSpace.id', ''); this.set('clonedSpace', null);
$("#new-space-name").removeClass("is-invalid"); $("#new-space-name").removeClass("is-invalid");
$('#add-space-modal').modal('hide'); $('#add-space-modal').modal('hide');
$('#add-space-modal').modal('dispose'); $('#add-space-modal').modal('dispose');

View file

@ -25,11 +25,6 @@ export default Component.extend({
// leaking changes to it via a 2-way binding // leaking changes to it via a 2-way binding
_selection: reads('selection'), _selection: reads('selection'),
init() {
this._super(...arguments);
this.content = [];
},
actions: { actions: {
change() { change() {
const selectEl = this.$('select')[0]; const selectEl = this.$('select')[0];

View file

@ -30,7 +30,6 @@ export default Component.extend({
init() { init() {
this._super(...arguments); this._super(...arguments);
this.items = [];
}, },
actions: { actions: {

View file

@ -16,7 +16,6 @@ import miscUtil from '../utils/misc';
export default Component.extend({ export default Component.extend({
init() { init() {
this._super(...arguments); this._super(...arguments);
this.notifications = [];
}, },
didInsertElement() { didInsertElement() {

View file

@ -0,0 +1,27 @@
// 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 { helper } from '@ember/component/helper';
export function isOneOf(params/*, hash*/) {
if (is.not.undefined(params) || is.not.null(params)) {
if (params.length >= 2) {
let value = params[0];
for (let i=1; i < params.length; i++) {
if (params[i] == value) return true;
}
}
}
return false;
}
export default helper(isOneOf);

View file

@ -11,11 +11,8 @@
import Model from 'ember-data/model'; import Model from 'ember-data/model';
import attr from 'ember-data/attr'; import attr from 'ember-data/attr';
// import { belongsTo } from 'ember-data/relationships';
export default Model.extend({ export default Model.extend({
// page: belongsTo('page', { inverse: null }),
// meta: belongsTo('page-meta', { inverse: null }),
page: attr(), page: attr(),
meta: attr(), meta: attr(),
owner: attr('string'), owner: attr('string'),

View file

@ -29,6 +29,7 @@ export default Route.extend({
}, },
activate() { activate() {
this.get('browser').setTitleAsPhrase('Forgot Password');
$('body').addClass('background-color-theme-light'); $('body').addClass('background-color-theme-light');
}, },

View file

@ -57,10 +57,10 @@ export default Route.extend({
setupController: function (controller, model) { setupController: function (controller, model) {
controller.set('model', model); controller.set('model', model);
controller.reset(); controller.reset();
this.browser.setTitleAsPhrase("Login");
}, },
activate() { activate() {
this.get('browser').setTitleAsPhrase('Login');
$('body').addClass('background-color-theme-light'); $('body').addClass('background-color-theme-light');
}, },

View file

@ -18,6 +18,7 @@ export default Route.extend({
}, },
activate() { activate() {
this.get('browser').setTitleAsPhrase('Reset Password');
$('body').addClass('background-color-theme-light'); $('body').addClass('background-color-theme-light');
}, },

View file

@ -36,6 +36,7 @@ export default Route.extend(AuthenticatedRouteMixin, {
}, },
activate() { activate() {
this.get('browser').setTitle('Share Space');
$('body').addClass('background-color-off-white'); $('body').addClass('background-color-off-white');
}, },

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
export default Route.extend({ export default Route.extend({
@ -29,4 +28,8 @@ export default Route.extend({
this.transitionTo('auth.login'); this.transitionTo('auth.login');
}); });
}, },
activate() {
this.get('browser').setTitle('SSO');
}
}); });

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { Promise as EmberPromise } from 'rsvp'; import { Promise as EmberPromise } from 'rsvp';
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
@ -50,6 +49,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
}, },
activate() { activate() {
document.title = "Authentication | Documize"; this.get('browser').setTitle('Authentication');
} }
}); });

View file

@ -10,7 +10,7 @@
// https://documize.com // https://documize.com
import $ from 'jquery'; import $ from 'jquery';
import { computed } from '@ember/computed'; import { computed } from '@ember/object';
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Controller from '@ember/controller'; import Controller from '@ember/controller';
import TooltipMixin from '../../../mixins/tooltip'; import TooltipMixin from '../../../mixins/tooltip';

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
@ -34,10 +33,9 @@ export default Route.extend(AuthenticatedRouteMixin, {
} }
controller.set('folders', nonPrivateFolders); controller.set('folders', nonPrivateFolders);
}, },
activate() { activate() {
document.title = "Spaces | Documize"; this.get('browser').setTitle('Spaces');
} }
}); });

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import RSVP from 'rsvp'; import RSVP from 'rsvp';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
@ -35,6 +34,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
}, },
activate() { activate() {
document.title = "Settings | Documize"; this.get('browser').setTitle('General Settings');
} }
}); });

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import RSVP from 'rsvp'; import RSVP from 'rsvp';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
@ -33,6 +32,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
}, },
activate() { activate() {
document.title = "Settings | Documize"; this.get('browser').setTitle('License');
} }
}); });

View file

@ -32,6 +32,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
}, },
activate() { activate() {
document.title = "SMTP | Documize"; this.get('browser').setTitle('SMTP Settings');
} }
}); });

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { Promise as EmberPromise } from 'rsvp'; import { Promise as EmberPromise } from 'rsvp';
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
@ -44,6 +43,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
}, },
activate() { activate() {
document.title = "Users | Documize"; this.get('browser').setTitle('Users');
} }
}); });

View file

@ -111,7 +111,6 @@ export default Controller.extend(TooltipMixin, {
pendingChanges.push({ pageId: deleteId }); pendingChanges.push({ pageId: deleteId });
this.get('documentService').deletePages(documentId, deleteId, pendingChanges).then(() => { this.get('documentService').deletePages(documentId, deleteId, pendingChanges).then(() => {
// this.send('onPageLevelChange', '', pendingChanges);
this.get('documentService').fetchPages(this.get('document.id'), this.get('session.user.id')).then((pages) => { this.get('documentService').fetchPages(this.get('document.id'), this.get('session.user.id')).then((pages) => {
this.set('pages', pages); this.set('pages', pages);
}); });
@ -119,7 +118,6 @@ export default Controller.extend(TooltipMixin, {
} else { } else {
// page delete followed by re-leveling child pages // page delete followed by re-leveling child pages
this.get('documentService').deletePage(documentId, deleteId).then(() => { this.get('documentService').deletePage(documentId, deleteId).then(() => {
// this.send('onPageLevelChange', '', pendingChanges);
this.get('documentService').fetchPages(this.get('document.id'), this.get('session.user.id')).then((pages) => { this.get('documentService').fetchPages(this.get('document.id'), this.get('session.user.id')).then((pages) => {
this.set('pages', pages); this.set('pages', pages);
}); });

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { Promise as EmberPromise, hash } from 'rsvp'; import { Promise as EmberPromise, hash } from 'rsvp';
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
@ -54,21 +53,10 @@ export default Route.extend(AuthenticatedRouteMixin, {
categories: this.get('categories'), categories: this.get('categories'),
categorySummary: this.get('categorySummary'), categorySummary: this.get('categorySummary'),
categoryMembers: this.get('categoryMembers'), categoryMembers: this.get('categoryMembers'),
// categories: this.get('categoryService').getUserVisible(this.modelFor('folder').folder.get('id')),
// categorySummary: this.get('categoryService').getSummary(this.modelFor('folder').folder.get('id')),
// categoryMembers: this.get('categoryService').getSpaceCategoryMembership(this.modelFor('folder').folder.get('id')),
}); });
}, },
afterModel(model, transition) { // eslint-disable-line no-unused-vars afterModel(model, transition) { // eslint-disable-line no-unused-vars
// model.folder = this.modelFor('folder').folder;
// model.permissions = this.modelFor('folder').permissions;
// model.folders = this.modelFor('folder').folders;
// model.documents = this.modelFor('folder').documents;
// model.templates = this.modelFor('folder').templates;
// model.showStartDocument = false;
// model.rootDocCount = 0;
let docs = model.documents; let docs = model.documents;
let categoryMembers = model.categoryMembers; let categoryMembers = model.categoryMembers;
let rootDocCount = 0; let rootDocCount = 0;

View file

@ -27,5 +27,9 @@ export default Route.extend(AuthenticatedRouteMixin, {
model() { model() {
return this.get('folderService').getAll(); return this.get('folderService').getAll();
},
activate() {
this.get('browser').setTitle('Spaces');
} }
}); });

View file

@ -10,7 +10,6 @@
// https://documize.com // https://documize.com
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';

View file

@ -12,4 +12,8 @@
import Route from '@ember/routing/route'; import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
export default Route.extend(AuthenticatedRouteMixin); export default Route.extend(AuthenticatedRouteMixin, {
activate() {
this.get('browser').setTitle('Search');
}
});

View file

@ -17,6 +17,7 @@ export default Service.extend({
sessionService: service('session'), sessionService: service('session'),
init() { init() {
this._super(...arguments);
this.setMetaDescription(); this.setMetaDescription();
}, },
@ -24,10 +25,6 @@ export default Service.extend({
document.title = title + " | " + this.get('sessionService.appMeta.title'); document.title = title + " | " + this.get('sessionService.appMeta.title');
}, },
setTitleReverse(title) {
document.title = this.get('sessionService.appMeta.title') + " | " + title;
},
setTitleAsPhrase(title) { setTitleAsPhrase(title) {
document.title = this.get('sessionService.appMeta.title') + " " + title; document.title = this.get('sessionService.appMeta.title') + " " + title;
}, },
@ -49,7 +46,6 @@ export default Service.extend({
scrollTo(id) { scrollTo(id) {
schedule('afterRender', () => { schedule('afterRender', () => {
let elem = $(id).offset(); let elem = $(id).offset();
if (is.undefined(elem)) return; if (is.undefined(elem)) return;
$('html, body').animate({ $('html, body').animate({

View file

@ -58,6 +58,7 @@ $dropdown-link-hover-color: $color-link;
$dropdown-link-hover-bg: $color-white; $dropdown-link-hover-bg: $color-white;
$dropdown-link-active-color: $color-link; $dropdown-link-active-color: $color-link;
$dropdown-link-active-bg: $color-white; $dropdown-link-active-bg: $color-white;
$dropdown-header-color: $color-black;
// form // form
$input-color: $color-off-black; $input-color: $color-off-black;
@ -102,7 +103,6 @@ $link-hover-decoration: none;
// @import "node_modules/bootstrap/scss/navbar"; // @import "node_modules/bootstrap/scss/navbar";
// @import "node_modules/bootstrap/scss/images"; // @import "node_modules/bootstrap/scss/images";
.modal-80 { .modal-80 {
max-width: 80% !important; max-width: 80% !important;
} }

View file

@ -40,6 +40,7 @@
height: initial !important; height: initial !important;
min-height: initial !important; min-height: initial !important;
-webkit-print-color-adjust: exact; -webkit-print-color-adjust: exact;
overflow: hidden;
} }
.non-printable, .non-printable,
@ -47,6 +48,7 @@
.document-toc, .document-toc,
.tabnav-control, .tabnav-control,
#nav-bar, #nav-bar,
.page-toolbar,
.new-section-wizard { .new-section-wizard {
float: none !important; float: none !important;
display: none !important; display: none !important;

View file

@ -49,9 +49,9 @@
{{/ui/ui-dialog}} {{/ui/ui-dialog}}
{{#if showAdd}} {{#if showAdd}}
{{empty-state icon="direct" message="You can create new documents via the green + button"}} {{empty-state icon="direct" message="Add documents via + DOCUMENT"}}
{{/if}} {{/if}}
{{#if showLockout}} {{#if showLockout}}
{{empty-state icon="visibility" message="It looks like space permissions are preventing you from viewing and creating documents"}} {{empty-state icon="visibility" message="Space permissions are preventing you from viewing and creating documents"}}
{{/if}} {{/if}}

View file

@ -2,7 +2,6 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="mt-4 mb-5"> <div class="mt-4 mb-5">
{{#unless editMode}} {{#unless editMode}}
<div class="view-space"> <div class="view-space">
<div class="heading"> <div class="heading">
@ -16,14 +15,13 @@
<div class="view-space"> <div class="view-space">
<div class="heading"> <div class="heading">
<div class="form-group"> <div class="form-group">
{{input id="space-name" type="text" value=spaceName class=(if hasNameError 'form-control is-invalid' 'form-control') placeholder="Space name" autocomplete="off"}} {{focus-input id="space-name" type="text" value=spaceName class=(if hasNameError 'form-control is-invalid' 'form-control') placeholder="Space name" autocomplete="off"}}
<small class="form-text text-muted">Press Enter to save or Escape to cancel</small> <small class="form-text text-muted">Press Enter to save or Escape to cancel</small>
</div> </div>
</div> </div>
</div> </div>
</form> </form>
{{/unless}} {{/unless}}
</div> </div>
</div> </div>
</div> </div>

View file

@ -62,13 +62,17 @@
<i class="material-icons">check</i> <i class="material-icons">check</i>
{{/if}} {{/if}}
</li> </li>
{{else}}
No document templates
{{/each}} {{/each}}
</ul> </ul>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button> <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
{{#if templates}}
<button type="button" class="btn btn-success" onclick={{action 'onOpenTemplate'}}>Open</button> <button type="button" class="btn btn-success" onclick={{action 'onOpenTemplate'}}>Open</button>
{{/if}}
</div> </div>
</div> </div>
</div> </div>

View file

@ -18,7 +18,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="clone-space-dropdown">Clone Space</label> <label for="clone-space-dropdown">Clone Space</label>
{{ui-select id="clone-space-dropdown" content=spaces prompt="select space" action=(action 'onCloneSpaceSelect') optionValuePath="id" optionLabelPath="name" selection=cloneSpace}} {{ui-select id="clone-space-dropdown" content=spaces prompt="select space" action=(action 'onCloneSpaceSelect') optionValuePath="id" optionLabelPath="name" selection=clonedSpace}}
<small id="emailHelp" class="form-text text-muted">Copy templates, permissions, documents from existing space</small> <small id="emailHelp" class="form-text text-muted">Copy templates, permissions, documents from existing space</small>
<div class="margin-top-10" /> <div class="margin-top-10" />
{{#if hasClone}} {{#if hasClone}}

View file

@ -0,0 +1,15 @@
import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';
moduleForComponent('is-one-of', 'helper:action-type', {
integration: true
});
// Replace this with your real tests.
test('it renders', function(assert) {
this.set('inputValue', '1234');
this.render(hbs`{{is-one-of 1 1 2 3}}`);
assert.equal(this.$().text().trim(), 'true');
});