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")
|
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
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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');
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
|
@ -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');
|
||||||
|
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -30,7 +30,6 @@ export default Component.extend({
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
this.items = [];
|
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
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 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'),
|
||||||
|
|
|
@ -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');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -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');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -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');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -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');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -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');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -32,6 +32,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
|
||||||
},
|
},
|
||||||
|
|
||||||
activate() {
|
activate() {
|
||||||
document.title = "SMTP | Documize";
|
this.get('browser').setTitle('SMTP Settings');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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');
|
||||||
|
}
|
||||||
|
});
|
|
@ -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({
|
||||||
|
|
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-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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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}}
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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}}
|
||||||
|
|
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