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:
parent
88b99979a9
commit
adef6dfffa
37 changed files with 140 additions and 117 deletions
|
@ -490,7 +490,6 @@ func (h *Handler) Delete(w http.ResponseWriter, r *http.Request) {
|
|||
response.WriteMissingDataError(w, method, "documentID")
|
||||
return
|
||||
}
|
||||
|
||||
pageID := request.Param(r, "pageID")
|
||||
if len(pageID) == 0 {
|
||||
response.WriteMissingDataError(w, method, "pageID")
|
||||
|
@ -504,32 +503,25 @@ func (h *Handler) Delete(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
ok, err := h.workflowPermitsChange(doc, ctx)
|
||||
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)
|
||||
p, err := h.Store.Page.Get(ctx, pageID)
|
||||
if err != nil {
|
||||
response.WriteServerError(w, method, err)
|
||||
h.Runtime.Log.Error(method, err)
|
||||
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)
|
||||
h.Runtime.Log.Info("attempted delete document section when not approver")
|
||||
h.Runtime.Log.Info("attempted delete section on locked document")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -541,14 +533,6 @@ func (h *Handler) Delete(w http.ResponseWriter, r *http.Request) {
|
|||
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 {
|
||||
h.Store.Block.DecrementUsage(ctx, p.BlockID)
|
||||
}
|
||||
|
@ -623,13 +607,6 @@ func (h *Handler) DeletePages(w http.ResponseWriter, r *http.Request) {
|
|||
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()
|
||||
if err != nil {
|
||||
response.WriteServerError(w, method, err)
|
||||
|
@ -646,6 +623,21 @@ func (h *Handler) DeletePages(w http.ResponseWriter, r *http.Request) {
|
|||
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 {
|
||||
h.Store.Block.DecrementUsage(ctx, pageData.BlockID)
|
||||
}
|
||||
|
@ -1358,6 +1350,10 @@ func (h *Handler) FetchPages(w http.ResponseWriter, r *http.Request) {
|
|||
page.Numberize(t)
|
||||
for i, j := range t {
|
||||
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
|
||||
|
|
|
@ -23,11 +23,12 @@ export default Component.extend(TooltipMixin, {
|
|||
didReceiveAttrs() {
|
||||
this._super(...arguments);
|
||||
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')) {
|
||||
this.workflow();
|
||||
}
|
||||
|
||||
if (this.get('toEdit') === this.get('page.id') && this.get('permissions.documentEdit')) this.send('onEdit');
|
||||
},
|
||||
|
||||
workflow() {
|
||||
|
|
|
@ -19,13 +19,13 @@ export default Component.extend({
|
|||
selectedDocuments: A([]),
|
||||
selectedCaption: 'document',
|
||||
|
||||
showAdd: computed('permissions', 'documents', function() {
|
||||
showAdd: computed('permissions.documentAdd', 'documents', function() {
|
||||
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');
|
||||
}),
|
||||
hasDocumentActions: computed('permissions', function() {
|
||||
hasDocumentActions: computed('permissions.{documentDelete,documentMove}', function() {
|
||||
return this.get('permissions.documentDelete') || this.get('permissions.documentMove');
|
||||
}),
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ export default Component.extend(AuthMixin, {
|
|||
|
||||
this.set('documents', documents);
|
||||
let cb = this.get('onRefresh');
|
||||
cb.onRefresh();
|
||||
cb();
|
||||
});
|
||||
},
|
||||
|
||||
|
|
|
@ -265,17 +265,17 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, {
|
|||
|
||||
onShowTemplateDocModal() {
|
||||
let t = this.get('templates');
|
||||
if (t.length > 0) {
|
||||
t[0].set('selected', true);
|
||||
t.forEach((t) => {
|
||||
t.set('selected', false);
|
||||
});
|
||||
this.modalOpen("#template-doc-modal", {"show": true}, '#template-doc-name');
|
||||
}
|
||||
},
|
||||
|
||||
onSelectTemplate(i) {
|
||||
let t = this.get('templates');
|
||||
t.forEach((t) => {
|
||||
t.set('selected', false);
|
||||
})
|
||||
});
|
||||
i.set('selected', true);
|
||||
this.set('selectedTemplate', i.id);
|
||||
},
|
||||
|
@ -288,16 +288,17 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, {
|
|||
this.set('templateDocNameError', true);
|
||||
$('#template-doc-name').focus();
|
||||
return;
|
||||
} else {
|
||||
this.set('templateDocNameError', false);
|
||||
this.set('templateDocName', '');
|
||||
}
|
||||
|
||||
let id = this.get('selectedTemplate');
|
||||
if (is.empty(id)) {
|
||||
$('#widget-list-picker').addClass('is-invalid');
|
||||
return;
|
||||
}
|
||||
|
||||
this.set('templateDocNameError', false);
|
||||
this.set('templateDocName', '');
|
||||
|
||||
this.modalClose("#template-doc-modal");
|
||||
|
||||
this.get('templateService').importSavedTemplate(this.get('space.id'), id, docName).then((document) => {
|
||||
|
|
|
@ -22,10 +22,11 @@ export default Component.extend(NotifierMixin, AuthMixin, {
|
|||
copyPermission: true,
|
||||
copyDocument: false,
|
||||
hasClone: notEmpty('clonedSpace.id'),
|
||||
clonedSpace: null,
|
||||
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
this.clonedSpace = { id: '' };
|
||||
// this.clonedSpace = { id: '' };
|
||||
},
|
||||
|
||||
didInsertElement() {
|
||||
|
@ -63,9 +64,8 @@ export default Component.extend(NotifierMixin, AuthMixin, {
|
|||
}
|
||||
|
||||
this.set('spaceName', '');
|
||||
this.set('clonedSpace.id', '');
|
||||
this.set('clonedSpace', null);
|
||||
$("#new-space-name").removeClass("is-invalid");
|
||||
|
||||
$('#add-space-modal').modal('hide');
|
||||
$('#add-space-modal').modal('dispose');
|
||||
|
||||
|
|
|
@ -25,11 +25,6 @@ export default Component.extend({
|
|||
// leaking changes to it via a 2-way binding
|
||||
_selection: reads('selection'),
|
||||
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
this.content = [];
|
||||
},
|
||||
|
||||
actions: {
|
||||
change() {
|
||||
const selectEl = this.$('select')[0];
|
||||
|
|
|
@ -30,7 +30,6 @@ export default Component.extend({
|
|||
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
this.items = [];
|
||||
},
|
||||
|
||||
actions: {
|
||||
|
|
|
@ -16,7 +16,6 @@ import miscUtil from '../utils/misc';
|
|||
export default Component.extend({
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
this.notifications = [];
|
||||
},
|
||||
|
||||
didInsertElement() {
|
||||
|
|
27
gui/app/helpers/is-one-of.js
Normal file
27
gui/app/helpers/is-one-of.js
Normal 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);
|
|
@ -11,11 +11,8 @@
|
|||
|
||||
import Model from 'ember-data/model';
|
||||
import attr from 'ember-data/attr';
|
||||
// import { belongsTo } from 'ember-data/relationships';
|
||||
|
||||
export default Model.extend({
|
||||
// page: belongsTo('page', { inverse: null }),
|
||||
// meta: belongsTo('page-meta', { inverse: null }),
|
||||
page: attr(),
|
||||
meta: attr(),
|
||||
owner: attr('string'),
|
||||
|
|
|
@ -29,6 +29,7 @@ export default Route.extend({
|
|||
},
|
||||
|
||||
activate() {
|
||||
this.get('browser').setTitleAsPhrase('Forgot Password');
|
||||
$('body').addClass('background-color-theme-light');
|
||||
},
|
||||
|
||||
|
|
|
@ -57,10 +57,10 @@ export default Route.extend({
|
|||
setupController: function (controller, model) {
|
||||
controller.set('model', model);
|
||||
controller.reset();
|
||||
this.browser.setTitleAsPhrase("Login");
|
||||
},
|
||||
|
||||
activate() {
|
||||
this.get('browser').setTitleAsPhrase('Login');
|
||||
$('body').addClass('background-color-theme-light');
|
||||
},
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ export default Route.extend({
|
|||
},
|
||||
|
||||
activate() {
|
||||
this.get('browser').setTitleAsPhrase('Reset Password');
|
||||
$('body').addClass('background-color-theme-light');
|
||||
},
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
},
|
||||
|
||||
activate() {
|
||||
this.get('browser').setTitle('Share Space');
|
||||
$('body').addClass('background-color-off-white');
|
||||
},
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// https://documize.com
|
||||
|
||||
import { inject as service } from '@ember/service';
|
||||
|
||||
import Route from '@ember/routing/route';
|
||||
|
||||
export default Route.extend({
|
||||
|
@ -29,4 +28,8 @@ export default Route.extend({
|
|||
this.transitionTo('auth.login');
|
||||
});
|
||||
},
|
||||
|
||||
activate() {
|
||||
this.get('browser').setTitle('SSO');
|
||||
}
|
||||
});
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// https://documize.com
|
||||
|
||||
import { Promise as EmberPromise } from 'rsvp';
|
||||
|
||||
import { inject as service } from '@ember/service';
|
||||
import Route from '@ember/routing/route';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
|
@ -50,6 +49,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
},
|
||||
|
||||
activate() {
|
||||
document.title = "Authentication | Documize";
|
||||
this.get('browser').setTitle('Authentication');
|
||||
}
|
||||
});
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
// https://documize.com
|
||||
|
||||
import $ from 'jquery';
|
||||
import { computed } from '@ember/computed';
|
||||
import { computed } from '@ember/object';
|
||||
import { inject as service } from '@ember/service';
|
||||
import Controller from '@ember/controller';
|
||||
import TooltipMixin from '../../../mixins/tooltip';
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// https://documize.com
|
||||
|
||||
import { inject as service } from '@ember/service';
|
||||
|
||||
import Route from '@ember/routing/route';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
|
||||
|
@ -34,10 +33,9 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
}
|
||||
|
||||
controller.set('folders', nonPrivateFolders);
|
||||
|
||||
},
|
||||
|
||||
activate() {
|
||||
document.title = "Spaces | Documize";
|
||||
this.get('browser').setTitle('Spaces');
|
||||
}
|
||||
});
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// https://documize.com
|
||||
|
||||
import { inject as service } from '@ember/service';
|
||||
|
||||
import Route from '@ember/routing/route';
|
||||
import RSVP from 'rsvp';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
|
@ -35,6 +34,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
},
|
||||
|
||||
activate() {
|
||||
document.title = "Settings | Documize";
|
||||
this.get('browser').setTitle('General Settings');
|
||||
}
|
||||
});
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// https://documize.com
|
||||
|
||||
import { inject as service } from '@ember/service';
|
||||
|
||||
import Route from '@ember/routing/route';
|
||||
import RSVP from 'rsvp';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
|
@ -33,6 +32,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
},
|
||||
|
||||
activate() {
|
||||
document.title = "Settings | Documize";
|
||||
this.get('browser').setTitle('License');
|
||||
}
|
||||
});
|
||||
|
|
|
@ -32,6 +32,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
},
|
||||
|
||||
activate() {
|
||||
document.title = "SMTP | Documize";
|
||||
this.get('browser').setTitle('SMTP Settings');
|
||||
}
|
||||
});
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// https://documize.com
|
||||
|
||||
import { Promise as EmberPromise } from 'rsvp';
|
||||
|
||||
import { inject as service } from '@ember/service';
|
||||
import Route from '@ember/routing/route';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
|
@ -44,6 +43,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
},
|
||||
|
||||
activate() {
|
||||
document.title = "Users | Documize";
|
||||
this.get('browser').setTitle('Users');
|
||||
}
|
||||
});
|
||||
|
|
|
@ -111,7 +111,6 @@ export default Controller.extend(TooltipMixin, {
|
|||
pendingChanges.push({ pageId: deleteId });
|
||||
|
||||
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.set('pages', pages);
|
||||
});
|
||||
|
@ -119,7 +118,6 @@ export default Controller.extend(TooltipMixin, {
|
|||
} else {
|
||||
// page delete followed by re-leveling child pages
|
||||
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.set('pages', pages);
|
||||
});
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// https://documize.com
|
||||
|
||||
import { Promise as EmberPromise, hash } from 'rsvp';
|
||||
|
||||
import { inject as service } from '@ember/service';
|
||||
import Route from '@ember/routing/route';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
|
@ -54,21 +53,10 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
categories: this.get('categories'),
|
||||
categorySummary: this.get('categorySummary'),
|
||||
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
|
||||
// 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 categoryMembers = model.categoryMembers;
|
||||
let rootDocCount = 0;
|
||||
|
|
|
@ -27,5 +27,9 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
|||
|
||||
model() {
|
||||
return this.get('folderService').getAll();
|
||||
},
|
||||
|
||||
activate() {
|
||||
this.get('browser').setTitle('Spaces');
|
||||
}
|
||||
});
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
// https://documize.com
|
||||
|
||||
import { inject as service } from '@ember/service';
|
||||
|
||||
import Route from '@ember/routing/route';
|
||||
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
|
||||
|
||||
|
|
|
@ -12,4 +12,8 @@
|
|||
import Route from '@ember/routing/route';
|
||||
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');
|
||||
}
|
||||
});
|
|
@ -17,6 +17,7 @@ export default Service.extend({
|
|||
sessionService: service('session'),
|
||||
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
this.setMetaDescription();
|
||||
},
|
||||
|
||||
|
@ -24,10 +25,6 @@ export default Service.extend({
|
|||
document.title = title + " | " + this.get('sessionService.appMeta.title');
|
||||
},
|
||||
|
||||
setTitleReverse(title) {
|
||||
document.title = this.get('sessionService.appMeta.title') + " | " + title;
|
||||
},
|
||||
|
||||
setTitleAsPhrase(title) {
|
||||
document.title = this.get('sessionService.appMeta.title') + " " + title;
|
||||
},
|
||||
|
@ -49,7 +46,6 @@ export default Service.extend({
|
|||
scrollTo(id) {
|
||||
schedule('afterRender', () => {
|
||||
let elem = $(id).offset();
|
||||
|
||||
if (is.undefined(elem)) return;
|
||||
|
||||
$('html, body').animate({
|
||||
|
|
2
gui/app/styles/bootstrap.scss
vendored
2
gui/app/styles/bootstrap.scss
vendored
|
@ -58,6 +58,7 @@ $dropdown-link-hover-color: $color-link;
|
|||
$dropdown-link-hover-bg: $color-white;
|
||||
$dropdown-link-active-color: $color-link;
|
||||
$dropdown-link-active-bg: $color-white;
|
||||
$dropdown-header-color: $color-black;
|
||||
|
||||
// form
|
||||
$input-color: $color-off-black;
|
||||
|
@ -102,7 +103,6 @@ $link-hover-decoration: none;
|
|||
// @import "node_modules/bootstrap/scss/navbar";
|
||||
// @import "node_modules/bootstrap/scss/images";
|
||||
|
||||
|
||||
.modal-80 {
|
||||
max-width: 80% !important;
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
height: initial !important;
|
||||
min-height: initial !important;
|
||||
-webkit-print-color-adjust: exact;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.non-printable,
|
||||
|
@ -47,6 +48,7 @@
|
|||
.document-toc,
|
||||
.tabnav-control,
|
||||
#nav-bar,
|
||||
.page-toolbar,
|
||||
.new-section-wizard {
|
||||
float: none !important;
|
||||
display: none !important;
|
||||
|
|
|
@ -49,9 +49,9 @@
|
|||
{{/ui/ui-dialog}}
|
||||
|
||||
{{#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 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}}
|
|
@ -2,7 +2,6 @@
|
|||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="mt-4 mb-5">
|
||||
|
||||
{{#unless editMode}}
|
||||
<div class="view-space">
|
||||
<div class="heading">
|
||||
|
@ -16,14 +15,13 @@
|
|||
<div class="view-space">
|
||||
<div class="heading">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{/unless}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -62,13 +62,17 @@
|
|||
<i class="material-icons">check</i>
|
||||
{{/if}}
|
||||
</li>
|
||||
{{else}}
|
||||
No document templates
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<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>
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<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>
|
||||
<div class="margin-top-10" />
|
||||
{{#if hasClone}}
|
||||
|
|
15
gui/tests/integration/helpers/is-one-of-test.js
Normal file
15
gui/tests/integration/helpers/is-one-of-test.js
Normal 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');
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue