1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-23 07:09:43 +02:00

Reafctor client side (EJS) constants

This commit is contained in:
McMatts 2018-04-20 14:38:10 +01:00
parent 8fb001422a
commit bde0091a4a
23 changed files with 118 additions and 367 deletions

View file

@ -9,18 +9,22 @@
//
// https://documize.com
import { equal, empty } from '@ember/object/computed';
import { computed } from '@ember/object';
import { empty } from '@ember/object/computed';
import { set } from '@ember/object';
import { copy } from '@ember/object/internals';
import { inject as service } from '@ember/service';
import Component from '@ember/component';
import constants from '../../utils/constants';
import encoding from '../../utils/encoding';
export default Component.extend({
appMeta: service(),
isDocumizeProvider: equal('authProvider', constants.AuthProvider.Documize),
isKeycloakProvider: equal('authProvider', constants.AuthProvider.Keycloak),
isDocumizeProvider: computed('authProvider', function() {
return this.get('authProvider') === this.get('constants').AuthProvider.Documize;
}),
isKeycloakProvider: computed('authProvider', function() {
return this.get('authProvider') === this.get('constants').AuthProvider.Keycloak;
}),
KeycloakUrlError: empty('keycloakConfig.url'),
KeycloakRealmError: empty('keycloakConfig.realm'),
KeycloakClientIdError: empty('keycloakConfig.clientId'),
@ -47,6 +51,7 @@ export default Component.extend({
this._super(...arguments);
let provider = this.get('authProvider');
let constants = this.get('constants');
switch (provider) {
case constants.AuthProvider.Documize:
@ -71,14 +76,17 @@ export default Component.extend({
actions: {
onDocumize() {
let constants = this.get('constants');
this.set('authProvider', constants.AuthProvider.Documize);
},
onKeycloak() {
let constants = this.get('constants');
this.set('authProvider', constants.AuthProvider.Keycloak);
},
onSave() {
let constants = this.get('constants');
let provider = this.get('authProvider');
let config = this.get('authConfig');

View file

@ -15,11 +15,11 @@ import { inject as service } from '@ember/service';
import { computed } from '@ember/object';
import Component from '@ember/component';
import TooltipMixin from '../../mixins/tooltip';
import models from '../../utils/model';
export default Component.extend(TooltipMixin, {
documentService: service('document'),
sectionService: service('section'),
store: service(),
appMeta: service(),
link: service(),
hasPages: notEmpty('pages'),
@ -265,7 +265,7 @@ export default Component.extend(TooltipMixin, {
return;
}
let page = models.PageModel.create();
let page = this.get('store').createRecord('page');
page.set('documentId', this.get('document.id'));
page.set('title', sectionName);
page.set('contentType', section.get('contentType'));
@ -296,7 +296,7 @@ export default Component.extend(TooltipMixin, {
return;
}
let page = models.PageModel.create();
let page = this.get('store').createRecord('page');
page.set('documentId', this.get('document.id'));
page.set('title', `${block.get('title')}`);
page.set('body', block.get('body'));

View file

@ -36,13 +36,12 @@ export default Component.extend(AuthMixin, {
didReceiveAttrs() {
this._super(...arguments);
// this.setup();
this.setup();
},
didUpdateAttrs() {
this._super(...arguments);
// this.set('selectedDocuments', []);
// this.set('filteredDocs', []);
// this.setup();
},
setup() {
@ -65,10 +64,12 @@ export default Component.extend(AuthMixin, {
schedule('afterRender', () => {
if (this.get('categoryFilter') !== '') {
this.send('onDocumentFilter', 'category', this.get('categoryFilter'));
} else if (this.get('rootDocCount') > 0) {
} else {
this.send('onDocumentFilter', 'space', this.get('folder.id'));
} else if (selectedCategory !== '') {
this.send('onDocumentFilter', 'category', selectedCategory);
// } else if (this.get('rootDocCount') > 0) {
// this.send('onDocumentFilter', 'space', this.get('folder.id'));
// } else if (selectedCategory !== '') {
// this.send('onDocumentFilter', 'category', selectedCategory);
}
});
},
@ -148,8 +149,8 @@ export default Component.extend(AuthMixin, {
});
this.set('categoryFilter', '');
this.set('uncategorizedSelected', true);
this.set('spaceSelected', false);
this.set('uncategorizedSelected', true);
break;
case 'space':

View file

@ -10,7 +10,6 @@
// https://documize.com
import Component from '@ember/component';
import constants from '../../utils/constants';
import TooltipMixin from '../../mixins/tooltip';
import NotifierMixin from '../../mixins/notifier';
import AuthMixin from '../../mixins/auth';
@ -24,10 +23,13 @@ export default Component.extend(TooltipMixin, NotifierMixin, AuthMixin, {
this._super(...arguments);
this.publicFolders = [];
this.protectedFolders = [];
this.privateFolders = [];
this.privateFolders = [];
},
didReceiveAttrs() {
this._super(...arguments);
let constants = this.get('constants');
let folders = this.get('spaces');
let publicFolders = [];
let protectedFolders = [];

View file

@ -14,7 +14,6 @@ import { computed } from '@ember/object';
import { schedule } from '@ember/runloop';
import { A } from '@ember/array';
import { inject as service } from '@ember/service';
import constants from '../../utils/constants';
import TooltipMixin from '../../mixins/tooltip';
import ModalMixin from '../../mixins/modal';
import AuthMixin from '../../mixins/auth';
@ -51,7 +50,7 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, {
dropzone: null,
spaceTypeOptions: A([]),
spaceType: constants.FolderType.Private,
spaceType: 0,
likes: '',
allowLikes: false,
@ -69,6 +68,7 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, {
didReceiveAttrs() {
this._super(...arguments);
let constants = this.get('constants');
let folder = this.get('space');
let targets = _.reject(this.get('spaces'), {id: folder.get('id')});

View file

@ -13,7 +13,6 @@ import $ from 'jquery';
import { notEmpty } from '@ember/object/computed';
import { inject as service } from '@ember/service'
import ModalMixin from '../../mixins/modal';
import constants from '../../utils/constants';
import Component from '@ember/component';
export default Component.extend(ModalMixin, {
@ -31,6 +30,8 @@ export default Component.extend(ModalMixin, {
init() {
this._super(...arguments);
let constants = this.get('constants');
this.pins = [];
if (this.get('appMeta.authProvider') === constants.AuthProvider.Keycloak) {

View file

@ -12,9 +12,49 @@
import EmberObject from "@ember/object";
// access like so:
// let constants = this.get('constants');
// let constants = this.get('constants');
let constants = EmberObject.extend({
FolderType: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
Public: 1,
Private: 2,
Protected: 3
},
AuthProvider: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
Documize: 'documize',
Keycloak: 'keycloak'
},
DocumentActionType: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
Read: 1,
Feedback: 2,
Contribute: 3,
Approve: 4,
Approved: 5,
Rejected: 6,
Publish: 7,
},
UserActivityType: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
Created: 1,
Read: 2,
Edited: 3,
Deleted: 4,
Archived: 5,
Approved: 6,
Reverted: 7,
PublishedTemplate: 8,
PublishedBlock: 9,
Feedback: 10,
Rejected: 11,
SentSecureLink: 12,
Draft: 13,
Versioned: 14,
Searched: 15,
Published: 16
},
// Document
ProtectionType: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
None: 0,
@ -78,7 +118,18 @@ let constants = EmberObject.extend({
Unversioned: 1, // turn unversioned into versioned document
Cloned: 2, // create versioned document by cloning existing versioned document
Linked: 3 // link existing unversion document into this version group
}
},
// Document
ActionType: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
Read: 1,
Feedback: 2,
Contribute: 3,
ApprovalRequest: 4,
Approved: 5,
Rejected: 6,
Publish: 7,
},
});
export default { constants }

View file

@ -1,26 +0,0 @@
// 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 EmberObject from "@ember/object";
let econstants = EmberObject.extend({
// Document
ActionType: { // eslint-disable-line ember/avoid-leaking-state-in-ember-objects
Read: 1,
Feedback: 2,
Contribute: 3,
ApprovalRequest: 4,
Approved: 5,
Rejected: 6,
},
});
export default { econstants }

View file

@ -11,7 +11,6 @@
import $ from 'jquery';
import constants from '../constants/constants';
import econstants from '../constants/econstants';
export function initialize(application) {
// address insecure jquery defaults (kudos: @nathanhammond)
@ -24,9 +23,7 @@ export function initialize(application) {
});
let cs = constants.constants;
let ec = econstants.econstants;
application.register('constants:main', cs);
application.register('econstants:main', ec);
Dropzone.autoDiscover = false;
CodeMirror.modeURL = "/codemirror/mode/%N/%N.js";

View file

@ -1,25 +0,0 @@
// 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
export function initialize(application) {
application.inject('route', 'econstants', 'econstants:main');
application.inject('controller', 'econstants', 'econstants:main');
application.inject('component', 'econstants', 'econstants:main');
application.inject('template', 'econstants', 'econstants:main');
application.inject('service', 'econstants', 'econstants:main');
application.inject('model', 'econstants', 'econstants:main');
}
export default {
name: 'econstants',
after: "application",
initialize: initialize
};

View file

@ -10,9 +10,7 @@
// https://documize.com
import { inject as service } from '@ember/service';
import Mixin from '@ember/object/mixin';
import constants from '../utils/constants';
export default Mixin.create({
appMeta: service(),
@ -21,7 +19,9 @@ export default Mixin.create({
init() {
this._super(...arguments);
let constants = this.get('constants');
this.set('isAuthProviderDocumize', this.get('appMeta.authProvider') === constants.AuthProvider.Documize);
this.set('isAuthProviderKeycloak', this.get('appMeta.authProvider') === constants.AuthProvider.Keycloak);
}
});
});

View file

@ -12,7 +12,6 @@
import { computed } from '@ember/object';
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import constants from '../utils/constants';
export default Model.extend({
orgId: attr('string'),
@ -28,6 +27,7 @@ export default Model.extend({
activityLabel: computed('activityType', function() {
let label = '';
let constants = this.get('constants');
switch (this.get('activityType')) {
case constants.UserActivityType.Created:
@ -60,6 +60,9 @@ export default Model.extend({
case constants.UserActivityType.Rejected:
label = 'Rejected';
break;
case constants.UserActivityType.Published:
label = 'Published';
break;
default:
break;
}
@ -69,6 +72,7 @@ export default Model.extend({
activityColor: computed('activityType', function() {
let color = '';
let constants = this.get('constants');
switch (this.get('activityType')) {
case constants.UserActivityType.Created:
@ -101,6 +105,9 @@ export default Model.extend({
case constants.UserActivityType.Rejected:
color = 'color-red';
break;
case constants.UserActivityType.Published:
color = 'color-green';
break;
default:
break;
}

View file

@ -11,7 +11,6 @@
import { computed } from '@ember/object';
import attr from 'ember-data/attr';
import constants from '../utils/constants';
import stringUtil from '../utils/string';
import Model from 'ember-data/model';
@ -20,6 +19,7 @@ export default Model.extend({
orgId: attr('string'),
userId: attr('string'),
folderType: attr('number', { defaultValue: 2 }),
lifecycle: attr('number', { defaultValue: 1 }),
likes: attr('string'),
allowLikes: computed('likes', function () {
@ -31,14 +31,17 @@ export default Model.extend({
}),
markAsRestricted() {
let constants = this.get('constants');
this.set('folderType', constants.FolderType.Protected);
},
markAsPrivate() {
let constants = this.get('constants');
this.set('folderType', constants.FolderType.Private);
},
markAsPublic() {
let constants = this.get('constants');
this.set('folderType', constants.FolderType.Public);
},

View file

@ -25,6 +25,7 @@ export default Model.extend({
versioned: attr('string'),
drafted: attr('string'),
archived: attr('string'),
published: attr('string'),
hasContributed: computed('contributed', function () {
return this.get('contributed').length > 0;
@ -49,5 +50,8 @@ export default Model.extend({
}),
hasArchived: computed('archived', function () {
return this.get('archived').length > 0;
}),
hasPublished: computed('published', function () {
return this.get('published').length > 0;
})
});

View file

@ -12,12 +12,13 @@
import $ from 'jquery';
import { inject as service } from '@ember/service';
import Route from '@ember/routing/route';
import constants from '../../../utils/constants';
export default Route.extend({
appMeta: service(),
beforeModel() {
let constants = this.get('constants');
if (this.get('appMeta.authProvider') === constants.AuthProvider.Keycloak) {
this.transitionTo('auth.login');
}

View file

@ -10,10 +10,8 @@
// https://documize.com
import { Promise as EmberPromise } from 'rsvp';
import { inject as service } from '@ember/service';
import Route from '@ember/routing/route';
import constants from '../../../utils/constants';
export default Route.extend({
session: service(),
@ -29,6 +27,8 @@ export default Route.extend({
beforeModel(transition) {
return new EmberPromise((resolve) => {
let constants = this.get('constants');
this.set('mode', is.not.undefined(transition.queryParams.mode) ? transition.queryParams.mode : 'reject');
if (this.get('mode') === 'reject' || this.get('appMeta.authProvider') !== constants.AuthProvider.Keycloak) {

View file

@ -13,7 +13,6 @@ import $ from 'jquery';
import { Promise as EmberPromise } from 'rsvp';
import { inject as service } from '@ember/service';
import Route from '@ember/routing/route';
import constants from '../../../utils/constants';
export default Route.extend({
appMeta: service(),
@ -23,6 +22,8 @@ export default Route.extend({
beforeModel(transition) {
return new EmberPromise((resolve) => {
let constants = this.get('constants');
let authProvider = this.get('appMeta.authProvider');
switch (authProvider) {

View file

@ -13,7 +13,6 @@ import { Promise as EmberPromise } from 'rsvp';
import { inject as service } from '@ember/service';
import Controller from '@ember/controller';
import NotifierMixin from "../../../mixins/notifier";
// import constants from '../../../utils/constants';
export default Controller.extend(NotifierMixin, {
global: service(),

View file

@ -13,7 +13,6 @@ 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';
import constants from '../../../utils/constants';
export default Route.extend(AuthenticatedRouteMixin, {
appMeta: service(),
@ -33,6 +32,8 @@ export default Route.extend(AuthenticatedRouteMixin, {
};
return new EmberPromise((resolve) => {
let constants = this.get('constants');
this.get('global').getAuthConfig().then((config) => {
switch (data.authProvider) {
case constants.AuthProvider.Keycloak:

View file

@ -13,7 +13,6 @@ 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';
import constants from '../../../utils/constants';
export default Route.extend(AuthenticatedRouteMixin, {
userService: service('user'),
@ -28,6 +27,8 @@ export default Route.extend(AuthenticatedRouteMixin, {
model() {
return new EmberPromise((resolve) => {
let constants = this.get('constants');
if (this.get('appMeta.authProvider') == constants.AuthProvider.Keycloak) {
this.get('global').syncExternalUsers().then(() => {
this.get('userService').getComplete('').then((users) =>{

View file

@ -15,7 +15,6 @@ import { resolve } from 'rsvp';
import Service, { inject as service } from '@ember/service';
import miscUtil from '../utils/misc';
import config from '../config/environment';
import constants from '../utils/constants';
export default Service.extend({
ajax: service(),
@ -34,7 +33,7 @@ export default Service.extend({
updateAvailable: false,
valid: true,
allowAnonymousAccess: false,
authProvider: constants.AuthProvider.Documize,
authProvider: null,
authConfig: null,
setupMode: false,
secureMode: false,
@ -48,6 +47,9 @@ export default Service.extend({
},
boot(requestedRoute, requestedUrl) { // eslint-disable-line no-unused-vars
let constants = this.get('constants');
this.set('authProvider', constants.AuthProvider.Documize);
let dbhash;
if (is.not.null(document.head.querySelector("[property=dbhash]"))) {
dbhash = document.head.querySelector("[property=dbhash]").content;
@ -84,6 +86,7 @@ export default Service.extend({
let self = this;
let cacheBuster = + new Date();
$.getJSON(`https://storage.googleapis.com/documize/news/meta.json?cb=${cacheBuster}`, function (versions) {
let cv = 'v' + versions.community.version;
let ev = 'v' + versions.enterprise.version;

View file

@ -1,46 +0,0 @@
// 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
export default {
FolderType: {
Public: 1,
Private: 2,
Protected: 3
},
AuthProvider: {
Documize: 'documize',
Keycloak: 'keycloak'
},
DocumentActionType: {
Read: 1,
Feedback: 2,
Contribute: 3,
Approve: 4,
Approved: 5,
Rejected: 6,
},
UserActivityType: {
Created: 1,
Read: 2,
Edited: 3,
Deleted: 4,
Archived: 5,
Approved: 6,
Reverted: 7,
PublishedTemplate: 8,
PublishedBlock: 9,
Feedback: 10,
Rejected: 11,
}
};

View file

@ -1,232 +0,0 @@
// 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 { htmlSafe } from '@ember/string';
import EmberObject, { computed } from '@ember/object';
import Ember from 'ember';
import stringUtil from '../utils/string';
import constants from '../utils/constants';
let BaseModel = EmberObject.extend({
id: "",
created: null,
revised: null,
setSafe(attr, value) {
this.set(attr, htmlSafe(Ember.Handlebars.Utils.escapeExpression(value)));
}
});
// ProtectedFolderParticipant used to display folder participants that can
// then be marked as folder owner.
let ProtectedFolderParticipant = EmberObject.extend({
userId: "",
email: "",
firstname: "",
lastname: "",
name: "",
folderId: "",
folderType: 0,
fullname: computed('firstname', 'lastname', function () {
return `${this.get('firstname')} ${this.get('lastname')}`;
})
});
let UserModel = BaseModel.extend({
firstname: "",
lastname: "",
email: "",
initials: "",
active: false,
editor: false,
admin: false,
fullname: computed('firstname', 'lastname', function () {
return `${this.get('firstname')} ${this.get('lastname')}`;
}),
init() {
this._super(...arguments);
this.accounts = [];
},
generateInitials() {
let first = this.get('firstname').trim();
let last = this.get('lastname').trim();
this.set('initials', first.substr(0, 1) + last.substr(0, 1));
},
copy() {
let copy = UserModel.create();
copy.id = this.id;
copy.created = this.created;
copy.revised = this.revised;
copy.firstname = this.firstname;
copy.lastname = this.lastname;
copy.email = this.email;
copy.initials = this.initials;
copy.active = this.active;
copy.editor = this.editor;
copy.admin = this.admin;
copy.accounts = this.accounts;
return copy;
}
});
let OrganizationModel = BaseModel.extend({
title: "",
message: "",
email: "",
allowAnonymousAccess: false,
});
let DocumentModel = BaseModel.extend({
name: "",
excerpt: "",
job: "",
location: "",
orgId: "",
folderId: "",
userId: "",
tags: "",
template: "",
protection: 0,
approval: 0,
slug: computed('name', function () {
return stringUtil.makeSlug(this.get('name'));
}),
// client-side property
selected: false
});
let TemplateModel = BaseModel.extend({
author: "",
dated: null,
description: "",
title: "",
type: 0,
slug: computed('title', function () {
return stringUtil.makeSlug(this.get('title'));
}),
});
let FolderModel = BaseModel.extend({
name: "",
orgId: "",
userId: "",
folderType: constants.FolderType.Private,
slug: computed('name', function () {
return stringUtil.makeSlug(this.get('name'));
}),
markAsRestricted: function () {
this.set('folderType', constants.FolderType.Protected);
},
markAsPrivate: function () {
this.set('folderType', constants.FolderType.Private);
},
markAsPublic: function () {
this.set('folderType', constants.FolderType.Public);
},
// client-side prop that holds who can see this folder
init() {
this._super(...arguments);
this.sharedWith = [];
}
});
let AttachmentModel = BaseModel.extend({
documentId: "",
extension: "",
fileId: "",
filename: "",
job: "",
orgId: ""
});
let PageModel = BaseModel.extend({
documentId: "",
orgId: "",
contentType: "",
level: 1,
sequence: 1004,
revisions: 0,
title: "",
body: "",
rawBody: "",
status: 0,
relativeId: '',
tagName: computed('level', function () {
return "h" + this.get('level');
}),
tocIndent: computed('level', function () {
return (this.get('level') - 1) * 20;
}),
tocIndentCss: computed('tocIndent', function () {
let tocIndent = this.get('tocIndent');
return `margin-left-${tocIndent}`;
}),
init() {
this._super(...arguments);
this.meta = {};
}
});
let PageMetaModel = BaseModel.extend({
pageId: "",
documentId: "",
orgId: "",
rawBody: "",
externalSource: false,
init() {
this._super(...arguments);
this.config = {};
}
});
let SectionModel = BaseModel.extend({
contentType: "",
title: "",
description: "",
iconFont: "",
iconFile: "",
hasImage: computed('iconFont', 'iconFile', function () {
return this.get('iconFile').length > 0;
}),
});
export default {
AttachmentModel,
DocumentModel,
FolderModel,
OrganizationModel,
PageModel,
PageMetaModel,
ProtectedFolderParticipant,
SectionModel,
TemplateModel,
UserModel
};