diff --git a/gui/app/components/customize/auth-settings.js b/gui/app/components/customize/auth-settings.js index 11bc5db7..ff75762e 100644 --- a/gui/app/components/customize/auth-settings.js +++ b/gui/app/components/customize/auth-settings.js @@ -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'); diff --git a/gui/app/components/document/view-content.js b/gui/app/components/document/view-content.js index 16340ee9..3f2426f4 100644 --- a/gui/app/components/document/view-content.js +++ b/gui/app/components/document/view-content.js @@ -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')); diff --git a/gui/app/components/folder/space-view.js b/gui/app/components/folder/space-view.js index 59cdbd83..91983e45 100644 --- a/gui/app/components/folder/space-view.js +++ b/gui/app/components/folder/space-view.js @@ -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': diff --git a/gui/app/components/spaces/space-list.js b/gui/app/components/spaces/space-list.js index a9d687df..f64f906a 100644 --- a/gui/app/components/spaces/space-list.js +++ b/gui/app/components/spaces/space-list.js @@ -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 = []; diff --git a/gui/app/components/toolbar/for-space.js b/gui/app/components/toolbar/for-space.js index d66d452e..3c318c35 100644 --- a/gui/app/components/toolbar/for-space.js +++ b/gui/app/components/toolbar/for-space.js @@ -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')}); diff --git a/gui/app/components/toolbar/nav-bar.js b/gui/app/components/toolbar/nav-bar.js index bda4e06e..5bae465f 100644 --- a/gui/app/components/toolbar/nav-bar.js +++ b/gui/app/components/toolbar/nav-bar.js @@ -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) { diff --git a/gui/app/constants/constants.js b/gui/app/constants/constants.js index defda0fd..ce804f8d 100644 --- a/gui/app/constants/constants.js +++ b/gui/app/constants/constants.js @@ -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 } diff --git a/gui/app/constants/econstants.js b/gui/app/constants/econstants.js deleted file mode 100644 index 2dd1b625..00000000 --- a/gui/app/constants/econstants.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2016 Documize Inc. . 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 . -// -// 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 } \ No newline at end of file diff --git a/gui/app/initializers/application.js b/gui/app/initializers/application.js index d8ab6149..ab571f21 100644 --- a/gui/app/initializers/application.js +++ b/gui/app/initializers/application.js @@ -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"; diff --git a/gui/app/initializers/econstants.js b/gui/app/initializers/econstants.js deleted file mode 100644 index 90e879bd..00000000 --- a/gui/app/initializers/econstants.js +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2016 Documize Inc. . 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 . -// -// 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 -}; diff --git a/gui/app/mixins/auth.js b/gui/app/mixins/auth.js index 07d99c63..4cc64c81 100644 --- a/gui/app/mixins/auth.js +++ b/gui/app/mixins/auth.js @@ -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); } -}); \ No newline at end of file +}); diff --git a/gui/app/models/document-activity.js b/gui/app/models/document-activity.js index 2b10b159..886356c5 100644 --- a/gui/app/models/document-activity.js +++ b/gui/app/models/document-activity.js @@ -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; } diff --git a/gui/app/models/folder.js b/gui/app/models/folder.js index 05dba897..c5fff3d8 100644 --- a/gui/app/models/folder.js +++ b/gui/app/models/folder.js @@ -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); }, diff --git a/gui/app/models/user-activity.js b/gui/app/models/user-activity.js index 02358db3..465073a2 100644 --- a/gui/app/models/user-activity.js +++ b/gui/app/models/user-activity.js @@ -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; }) }); diff --git a/gui/app/pods/auth/forgot/route.js b/gui/app/pods/auth/forgot/route.js index 0e117bdc..09537371 100644 --- a/gui/app/pods/auth/forgot/route.js +++ b/gui/app/pods/auth/forgot/route.js @@ -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'); } diff --git a/gui/app/pods/auth/keycloak/route.js b/gui/app/pods/auth/keycloak/route.js index f1e429bc..ebd6cd43 100644 --- a/gui/app/pods/auth/keycloak/route.js +++ b/gui/app/pods/auth/keycloak/route.js @@ -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) { diff --git a/gui/app/pods/auth/login/route.js b/gui/app/pods/auth/login/route.js index 2edd8d53..a7815e1c 100644 --- a/gui/app/pods/auth/login/route.js +++ b/gui/app/pods/auth/login/route.js @@ -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) { diff --git a/gui/app/pods/customize/auth/controller.js b/gui/app/pods/customize/auth/controller.js index 8b21cfd3..b68019b8 100644 --- a/gui/app/pods/customize/auth/controller.js +++ b/gui/app/pods/customize/auth/controller.js @@ -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(), diff --git a/gui/app/pods/customize/auth/route.js b/gui/app/pods/customize/auth/route.js index 627edba1..f36b6350 100644 --- a/gui/app/pods/customize/auth/route.js +++ b/gui/app/pods/customize/auth/route.js @@ -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: diff --git a/gui/app/pods/customize/users/route.js b/gui/app/pods/customize/users/route.js index bc06c4fa..abea379e 100644 --- a/gui/app/pods/customize/users/route.js +++ b/gui/app/pods/customize/users/route.js @@ -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) =>{ diff --git a/gui/app/services/app-meta.js b/gui/app/services/app-meta.js index 1072cae7..a980fe4c 100644 --- a/gui/app/services/app-meta.js +++ b/gui/app/services/app-meta.js @@ -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; diff --git a/gui/app/utils/constants.js b/gui/app/utils/constants.js deleted file mode 100644 index 4f24b469..00000000 --- a/gui/app/utils/constants.js +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 Documize Inc. . 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 . -// -// 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, - } -}; diff --git a/gui/app/utils/model.js b/gui/app/utils/model.js deleted file mode 100644 index 824726df..00000000 --- a/gui/app/utils/model.js +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2016 Documize Inc. . 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 . -// -// 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 -};