diff --git a/app/app/components/document/document-meta.js b/app/app/components/document/document-meta.js index bf0990f1..97c8ef74 100644 --- a/app/app/components/document/document-meta.js +++ b/app/app/components/document/document-meta.js @@ -16,6 +16,18 @@ import TooltipMixin from '../../mixins/tooltip'; export default Ember.Component.extend(NotifierMixin, TooltipMixin, { appMeta: Ember.inject.service(), + didReceiveAttrs() { + // setup document owner + let owner = this.get('users').findBy('id', this.get('document.userId')); + + // no document owner? You are the owner! + if (is.undefined(owner)) { + owner = this.session.user; + } + + this.set('owner', owner); + }, + actions: { onSave() { let doc = this.get('document'); diff --git a/app/app/components/document/document-sidebar-toc.js b/app/app/components/document/document-sidebar-toc.js index 8f56d58f..1483e43e 100644 --- a/app/app/components/document/document-sidebar-toc.js +++ b/app/app/components/document/document-sidebar-toc.js @@ -31,7 +31,7 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, { }), didReceiveAttrs: function () { - this.set('showToc', is.not.undefined(this.get('pages')) && this.get('pages').get('length') > 2); + this.set('showToc', is.not.undefined(this.get('pages')) && this.get('pages').get('length') > 0); if (is.not.null(this.get('page'))) { this.send('onEntryClick', this.get('page')); } @@ -66,7 +66,6 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, { let toc = this.get('pages'); let page = _.findWhere(toc, { id: pageId }); - let state = tocUtil.getState(toc, page); if (!this.get('isEditor') || is.empty(pageId)) { diff --git a/app/app/components/document/document-tab.js b/app/app/components/document/document-tab.js index ff7b092a..56b28fca 100644 --- a/app/app/components/document/document-tab.js +++ b/app/app/components/document/document-tab.js @@ -22,6 +22,8 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, { if (this.get('mode') === 'edit') { this.send('onEdit'); } + + this.audit.record("viewed-document-section-" + this.get('model.page.contentType')); }, didInsertElement() { @@ -42,11 +44,13 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, { onEdit() { this.set('viewMode', false); this.set('editMode', true); + this.set('mode', 'edit'); }, onView() { this.set('viewMode', true); this.set('editMode', false); + this.set('mode', 'view'); }, onCancel() { diff --git a/app/app/components/section/gemini/type-editor.js b/app/app/components/section/gemini/type-editor.js index dd3babf7..e2175aa7 100644 --- a/app/app/components/section/gemini/type-editor.js +++ b/app/app/components/section/gemini/type-editor.js @@ -1,11 +1,11 @@ // Copyright 2016 Documize Inc. . All rights reserved. // -// This software (Documize Community Edition) is licensed under +// 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 . +// by contacting . // // https://documize.com @@ -49,9 +49,7 @@ export default Ember.Component.extend(SectionMixin, NotifierMixin, TooltipMixin, self.set('waiting', true); this.get('sectionService').fetch(this.get('page'), "secrets", this.get('config')) .then(function (response) { - console.log(response); self.set('waiting', false); - self.set('config.APIKey', response.apikey); self.set('config.url', response.url); self.set('config.username', response.username); @@ -223,4 +221,4 @@ export default Ember.Component.extend(SectionMixin, NotifierMixin, TooltipMixin, this.attrs.onAction(page, meta); } } -}); \ No newline at end of file +}); diff --git a/app/app/pods/document/activity/route.js b/app/app/pods/document/activity/route.js index abc90a07..d0515980 100644 --- a/app/app/pods/document/activity/route.js +++ b/app/app/pods/document/activity/route.js @@ -14,45 +14,20 @@ import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-rout export default Ember.Route.extend(AuthenticatedRouteMixin, { documentService: Ember.inject.service('document'), - folderService: Ember.inject.service('folder'), - userService: Ember.inject.service('user'), - pages: [], model() { this.audit.record("viewed-document-activity"); - let folders = this.get('store').peekAll('folder'); - let folder = this.get('store').peekRecord('folder', this.paramsFor('document').folder_id); - - this.set('folders', folders); - this.set('folder', folder); - - return this.modelFor('document'); - }, - - afterModel(model) { - let self = this; - - let pages = this.get('store').peekAll('page').filter((page) => { - return page.get('documentId') === model.get('id'); + return Ember.RSVP.hash({ + folders: this.modelFor('document').folders, + folder: this.modelFor('document').folder, + document: this.modelFor('document').document, + isEditor: this.modelFor('document').isEditor, + pages: this.modelFor('document').allPages, + tabs: this.modelFor('document').tabs, + activity: this.get('documentService').getMeta(this.modelFor('document').document.get('id')).then((activity) => { + return activity; + }) }); - - this.set('pages', pages); - - return new Ember.RSVP.Promise(function (resolve) { - self.get('documentService').getMeta(model.get('id')).then(function (activity) { - self.set('activity', activity); - resolve(); - }); - }); - }, - - setupController(controller, model) { - controller.set('model', model); - controller.set('folder', this.get('folder')); - controller.set('folders', this.get('folders').rejectBy('id', 0)); - controller.set('isEditor', this.get('folderService').get('canEditCurrentFolder')); - controller.set('activity', this.get('activity')); - controller.set('pages', this.get('pages')); } }); diff --git a/app/app/pods/document/activity/template.hbs b/app/app/pods/document/activity/template.hbs index 59a9841a..2c687d18 100644 --- a/app/app/pods/document/activity/template.hbs +++ b/app/app/pods/document/activity/template.hbs @@ -1 +1 @@ -{{document/document-activity document=model pages=pages activity=activity}} +{{document/document-activity document=model.document pages=model.pages activity=model.activity}} diff --git a/app/app/pods/document/controller.js b/app/app/pods/document/controller.js index fe57acc0..5b9cd1c0 100644 --- a/app/app/pods/document/controller.js +++ b/app/app/pods/document/controller.js @@ -15,7 +15,6 @@ import NotifierMixin from '../../mixins/notifier'; export default Ember.Controller.extend(NotifierMixin, { documentService: Ember.inject.service('document'), templateService: Ember.inject.service('template'), - page: null, folder: {}, pages: [], @@ -53,11 +52,9 @@ export default Ember.Controller.extend(NotifierMixin, { }, onPageSequenceChange(changes) { - let self = this; - - this.get('documentService').changePageSequence(this.model.get('id'), changes).then(function () { - _.each(changes, function (change) { - let pageContent = _.findWhere(self.get('pages'), { + this.get('documentService').changePageSequence(this.get('model.document.id'), changes).then(() => { + _.each(changes, (change) => { + let pageContent = _.findWhere(this.get('model.pages'), { id: change.pageId }); @@ -66,16 +63,15 @@ export default Ember.Controller.extend(NotifierMixin, { } }); - self.set('pages', self.get('pages').sortBy('sequence')); + this.set('model.pages', this.get('model.pages').sortBy('sequence')); + this.get('target.router').refresh(); }); }, onPageLevelChange(changes) { - let self = this; - - this.get('documentService').changePageLevel(this.model.get('id'), changes).then(function () { - _.each(changes, function (change) { - let pageContent = _.findWhere(self.get('pages'), { + this.get('documentService').changePageLevel(this.get('model.document.id'), changes).then(() => { + _.each(changes, (change) => { + let pageContent = _.findWhere(this.get('model.pages'), { id: change.pageId }); @@ -84,89 +80,23 @@ export default Ember.Controller.extend(NotifierMixin, { } }); - let pages = self.get('pages'); + let pages = this.get('model.pages'); pages = pages.sortBy('sequence'); - self.set('pages', []); - self.set('pages', pages); + this.set('model.pages', []); + this.set('model.pages', pages); + this.get('target.router').refresh(); }); }, - onPageDeleted(deletePage) { - let self = this; - let documentId = this.get('model.id'); - let pages = this.get('pages'); - let deleteId = deletePage.id; - let deleteChildren = deletePage.children; - let page = _.findWhere(pages, { - id: deleteId - }); - let pageIndex = _.indexOf(pages, page, false); - let pendingChanges = []; - - // select affected pages - for (var i = pageIndex + 1; i < pages.get('length'); i++) { - if (pages[i].get('level') <= page.get('level')) { - break; - } - - pendingChanges.push({ - pageId: pages[i].get('id'), - level: pages[i].get('level') - 1 - }); - } - - if (deleteChildren) { - // nuke of page tree - pendingChanges.push({ - pageId: deleteId - }); - - this.get('documentService').deletePages(documentId, deleteId, pendingChanges).then(function () { - // update our models so we don't have to reload from db - for (var i = 0; i < pendingChanges.length; i++) { - let pageId = pendingChanges[i].pageId; - self.set('pages', _.reject(self.get('pages'), function (p) { //jshint ignore: line - return p.id === pageId; - })); - } - - self.set('pages', _.sortBy(self.get('pages'), "sequence")); - - self.audit.record("deleted-page"); - - // fetch document meta - self.get('documentService').getMeta(self.model.get('id')).then(function (meta) { - self.set('meta', meta); - }); - }); - } else { - // page delete followed by re-leveling child pages - this.get('documentService').deletePage(documentId, deleteId).then(function () { - self.set('pages', _.reject(self.get('pages'), function (p) { - return p.get('id') === deleteId; - })); - - self.audit.record("deleted-page"); - - // fetch document meta - self.get('documentService').getMeta(self.model.get('id')).then(function (meta) { - self.set('meta', meta); - }); - }); - - self.send('onPageLevelChange', pendingChanges); - } - }, - onSaveTemplate(name, desc) { - this.get('templateService').saveAsTemplate(this.model.get('id'), name, desc).then(function () {}); + this.get('templateService').saveAsTemplate(this.get('model.document.id'), name, desc).then(function () {}); }, onAddSection(section) { this.audit.record("added-section-" + section.get('contentType')); let page = { - documentId: this.get('model.id'), + documentId: this.get('model.document.id'), title: `${section.get('title')}`, level: 1, sequence: 0, @@ -175,44 +105,42 @@ export default Ember.Controller.extend(NotifierMixin, { pageType: section.get('pageType') }; - let data = this.get('store').normalize('page', page); - let pageData = this.get('store').push(data); - let meta = { - documentId: this.get('model.id'), + documentId: this.get('model.document.id'), rawBody: "", config: "" }; - let pageMeta = this.get('store').normalize('page-meta', meta); - let pageMetaData = this.get('store').push(pageMeta); - let model = { - page: pageData, - meta: pageMetaData + page: page, + meta: meta }; - this.get('documentService').addPage(this.get('model.id'), model).then((newPage) => { + this.get('documentService').addPage(this.get('model.document.id'), model).then((newPage) => { let data = this.get('store').normalize('page', newPage); this.get('store').push(data); - console.log(newPage); - this.transitionToRoute('document.edit', - this.get('folder.id'), - this.get('folder.slug'), - this.get('model.id'), - this.get('model.slug'), - newPage.id); + this.get('documentService').getPages(this.get('model.document.id')).then((pages) => { + this.set('model.pages', pages.filterBy('pageType', 'section')); + this.set('model.tabs', pages.filterBy('pageType', 'tab')); + + this.get('documentService').getPageMeta(this.get('model.document.id'), newPage.id).then(() => { + this.transitionToRoute('document.edit', + this.get('model.folder.id'), + this.get('model.folder.slug'), + this.get('model.document.id'), + this.get('model.document.slug'), + newPage.id); + }); + }); }); }, onDocumentDelete() { - let self = this; - - this.get('documentService').deleteDocument(this.get('model.id')).then(function () { - self.audit.record("deleted-page"); - self.send("showNotification", "Deleted"); - self.transitionToRoute('folder', self.get('folder.id'), self.get('folder.slug')); + this.get('documentService').deleteDocument(this.get('model.document.id')).then(() => { + this.audit.record("deleted-page"); + this.send("showNotification", "Deleted"); + this.transitionToRoute('folder', this.get('model.folder.id'), this.get('model.folder.slug')); }); } } diff --git a/app/app/pods/document/files/route.js b/app/app/pods/document/files/route.js index 1057ea74..ac4f8979 100644 --- a/app/app/pods/document/files/route.js +++ b/app/app/pods/document/files/route.js @@ -10,25 +10,22 @@ // https://documize.com import Ember from 'ember'; -import RSVP from 'rsvp'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; export default Ember.Route.extend(AuthenticatedRouteMixin, { documentService: Ember.inject.service('document'), - folderService: Ember.inject.service('folder'), - userService: Ember.inject.service('user'), model() { this.audit.record("viewed-document-attachments"); - return RSVP.hash({ - document: this.modelFor('document'), - files: this.get('documentService').getAttachments(this.modelFor('document').get('id')) + return Ember.RSVP.hash({ + folders: this.modelFor('document').folders, + folder: this.modelFor('document').folder, + document: this.modelFor('document').document, + isEditor: this.modelFor('document').isEditor, + pages: this.modelFor('document').allPages, + tabs: this.modelFor('document').tabs, + files: this.get('documentService').getAttachments(this.modelFor('document').document.get('id')) }); - }, - - setupController(controller, model) { - controller.set('model', model); - controller.set('isEditor', this.get('folderService').get('canEditCurrentFolder')); } }); diff --git a/app/app/pods/document/files/template.hbs b/app/app/pods/document/files/template.hbs index 99a3403d..ef1f4748 100644 --- a/app/app/pods/document/files/template.hbs +++ b/app/app/pods/document/files/template.hbs @@ -1 +1 @@ -{{document/document-files document=model.document files=model.files isEditor=isEditor onUpload=(action 'onUpload') onDelete=(action 'onDelete')}} +{{document/document-files document=model.document files=model.files isEditor=model.isEditor onUpload=(action 'onUpload') onDelete=(action 'onDelete')}} diff --git a/app/app/pods/document/index/controller.js b/app/app/pods/document/index/controller.js index cdcb095b..9046f1b8 100644 --- a/app/app/pods/document/index/controller.js +++ b/app/app/pods/document/index/controller.js @@ -14,11 +14,7 @@ import NotifierMixin from '../../../mixins/notifier'; export default Ember.Controller.extend(NotifierMixin, { documentService: Ember.inject.service('document'), - templateService: Ember.inject.service('template'), queryParams: ['page'], - page: null, - folder: {}, - pages: [], // Jump to the right part of the document. scrollToPage(pageId) { @@ -53,11 +49,9 @@ export default Ember.Controller.extend(NotifierMixin, { }, onPageSequenceChange(changes) { - let self = this; - - this.get('documentService').changePageSequence(this.model.get('id'), changes).then(function () { - _.each(changes, function (change) { - let pageContent = _.findWhere(self.get('pages'), { + this.get('documentService').changePageSequence(this.get('model.document.id'), changes).then(() => { + _.each(changes, (change) => { + let pageContent = _.findWhere(this.get('model.pages'), { id: change.pageId }); @@ -66,16 +60,15 @@ export default Ember.Controller.extend(NotifierMixin, { } }); - self.set('pages', self.get('pages').sortBy('sequence')); + this.set('model.pages', this.get('model.pages').sortBy('sequence')); + this.get('target.router').refresh(); }); }, onPageLevelChange(changes) { - let self = this; - - this.get('documentService').changePageLevel(this.model.get('id'), changes).then(function () { - _.each(changes, function (change) { - let pageContent = _.findWhere(self.get('pages'), { + this.get('documentService').changePageLevel(this.get('model.document.id'), changes).then(() => { + _.each(changes, (change) => { + let pageContent = _.findWhere(this.get('model.pages'), { id: change.pageId }); @@ -84,17 +77,17 @@ export default Ember.Controller.extend(NotifierMixin, { } }); - let pages = self.get('pages'); + let pages = this.get('model.pages'); pages = pages.sortBy('sequence'); - self.set('pages', []); - self.set('pages', pages); + this.set('model.pages', pages); + + this.get('target.router').refresh(); }); }, onPageDeleted(deletePage) { - let self = this; - let documentId = this.get('model.id'); - let pages = this.get('pages'); + let documentId = this.get('model.document.id'); + let pages = this.get('model.pages'); let deleteId = deletePage.id; let deleteChildren = deletePage.children; let page = _.findWhere(pages, { @@ -103,6 +96,8 @@ export default Ember.Controller.extend(NotifierMixin, { let pageIndex = _.indexOf(pages, page, false); let pendingChanges = []; + this.audit.record("deleted-page"); + // select affected pages for (var i = pageIndex + 1; i < pages.get('length'); i++) { if (pages[i].get('level') <= page.get('level')) { @@ -121,29 +116,28 @@ export default Ember.Controller.extend(NotifierMixin, { pageId: deleteId }); - this.get('documentService').deletePages(documentId, deleteId, pendingChanges).then(function () { + this.get('documentService').deletePages(documentId, deleteId, pendingChanges).then(() => { // update our models so we don't have to reload from db for (var i = 0; i < pendingChanges.length; i++) { let pageId = pendingChanges[i].pageId; - self.set('pages', _.reject(self.get('pages'), function (p) { //jshint ignore: line - return p.id === pageId; + this.set('model.pages', _.reject(pages, function (p) { //jshint ignore: line + return p.get('id') === pageId; })); } - self.set('pages', _.sortBy(self.get('pages'), "sequence")); + this.set('model.pages', _.sortBy(pages, "sequence")); + this.get('target.router').refresh(); }); } else { // page delete followed by re-leveling child pages - this.get('documentService').deletePage(documentId, deleteId).then(function () { - self.set('pages', _.reject(self.get('pages'), function (p) { + this.get('documentService').deletePage(documentId, deleteId).then(() => { + this.set('model.pages', _.reject(pages, function (p) { return p.get('id') === deleteId; })); + + this.send('onPageLevelChange', pendingChanges); }); - - self.send('onPageLevelChange', pendingChanges); } - - self.audit.record("deleted-page"); - }, + } } }); diff --git a/app/app/pods/document/index/route.js b/app/app/pods/document/index/route.js index d45abaed..4f2b418e 100644 --- a/app/app/pods/document/index/route.js +++ b/app/app/pods/document/index/route.js @@ -16,11 +16,6 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { documentService: Ember.inject.service('document'), folderService: Ember.inject.service('folder'), userService: Ember.inject.service('user'), - pages: [], - attachments: [], - users: [], - meta: [], - folder: null, queryParams: { page: { refreshModel: false @@ -28,40 +23,34 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { }, beforeModel(transition) { - this.pageId = is.not.undefined(transition.queryParams.page) ? transition.queryParams.page : ""; + this.set('pageId', is.not.undefined(transition.queryParams.page) ? transition.queryParams.page : ""); + this.set('folderId', this.paramsFor('document').folder_id); + this.set('documentId', this.paramsFor('document').document_id); let folders = this.get('store').peekAll('folder'); - let folder = this.get('store').peekRecord('folder', this.paramsFor('document').folder_id); + let folder = this.get('store').peekRecord('folder', this.get('folderId')); + let document = this.get('store').peekRecord('document', this.get('documentId')); + + this.set('document', document); this.set('folders', folders); this.set('folder', folder); - this.get('folderService').setCurrentFolder(folder); }, model() { - this.audit.record("viewed-document"); - return this.modelFor('document'); - }, + this.browser.setTitle(this.get('document.name')); + this.browser.setMetaDescription(this.get('document.excerpt')); - afterModel(model) { - var self = this; - var documentId = model.get('id'); + let self = this; - this.browser.setTitle(model.get('name')); - - return new Ember.RSVP.Promise(function (resolve) { - self.get('documentService').getPages(documentId).then(function (pages) { - self.set('pages', pages); - resolve(); - }); + return Ember.RSVP.hash({ + folders: self.get('folders'), + folder: self.get('folder'), + document: self.get('document'), + page: self.get('pageId'), + isEditor: self.get('folderService').get('canEditCurrentFolder'), + pages: self.get('documentService').getPages(self.get('documentId')).then(function (pages) { + return pages.filterBy('pageType', 'section'); + }) }); - }, - - setupController(controller, model) { - controller.set('model', model); - controller.set('folder', this.folder); - controller.set('folders', this.get('folders').rejectBy('id', 0)); - controller.set('currentPage', this.pageId); - controller.set('isEditor', this.get('folderService').get('canEditCurrentFolder')); - controller.set('pages', this.get('pages').filterBy('pageType', 'section')); } }); diff --git a/app/app/pods/document/index/template.hbs b/app/app/pods/document/index/template.hbs index b7bba053..25684a14 100644 --- a/app/app/pods/document/index/template.hbs +++ b/app/app/pods/document/index/template.hbs @@ -1,2 +1,2 @@ -{{document/document-view document=model meta=meta pages=pages attachments=attachments folder=folder folders=folders isEditor=isEditor +{{document/document-view document=model.document meta=meta pages=model.pages folder=model.folder folders=model.folders isEditor=model.isEditor gotoPage=(action 'gotoPage') onDeletePage=(action 'onPageDeleted')}} diff --git a/app/app/pods/document/meta/controller.js b/app/app/pods/document/meta/controller.js index 1f0f1f4d..9c7c03e8 100644 --- a/app/app/pods/document/meta/controller.js +++ b/app/app/pods/document/meta/controller.js @@ -17,12 +17,9 @@ export default Ember.Controller.extend(NotifierMixin, { actions: { onSave(doc) { - let self = this; - - this.get('documentService').save(doc).then(function () { - self.showNotification('Saved'); - self.set('model', doc); - self.transitionToRoute('document.index'); + this.get('documentService').save(doc).then(() => { + this.showNotification('Saved'); + this.transitionToRoute('document.index'); }); } } diff --git a/app/app/pods/document/meta/route.js b/app/app/pods/document/meta/route.js index 335b02e2..887acd57 100644 --- a/app/app/pods/document/meta/route.js +++ b/app/app/pods/document/meta/route.js @@ -13,49 +13,21 @@ import Ember from 'ember'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; export default Ember.Route.extend(AuthenticatedRouteMixin, { - documentService: Ember.inject.service('document'), - folderService: Ember.inject.service('folder'), userService: Ember.inject.service('user'), model() { this.audit.record("viewed-document-meta"); - let folders = this.get('store').peekAll('folder'); - let folder = this.get('store').peekRecord('folder', this.paramsFor('document').folder_id); - this.set('folders', folders); - this.set('folder', folder); + let folderId = this.modelFor('document').folder.get('id'); - return this.modelFor('document'); - }, - - afterModel() { - let self = this; - - return new Ember.RSVP.Promise(function (resolve) { - self.get('userService').getFolderUsers(self.get('folder.id')).then(function (users) { - self.set('users', users); - resolve(); - }); + return Ember.RSVP.hash({ + folders: this.modelFor('document').folders, + folder: this.modelFor('document').folder, + document: this.modelFor('document').document, + isEditor: this.modelFor('document').isEditor, + pages: this.modelFor('document').allPages, + tabs: this.modelFor('document').tabs, + users: this.get('userService').getFolderUsers(folderId) }); - }, - - setupController(controller, model) { - controller.set('model', model); - controller.set('folder', this.get('folder')); - controller.set('folders', this.get('folders').rejectBy('id', 0)); - controller.set('isEditor', this.get('folderService').get('canEditCurrentFolder')); - controller.set('users', this.get('users')); - - // setup document owner - let owner = this.get('users').findBy('id', model.get('userId')); - - // no document owner? You are the owner! - if (is.undefined(owner)) { - owner = this.session.user; - model.set('userId', this.get('session.session.authenticated.user.id')); - this.get('documentService').save(model); - } - - controller.set('owner', owner); } }); diff --git a/app/app/pods/document/meta/template.hbs b/app/app/pods/document/meta/template.hbs index d8e528ad..39185e1a 100644 --- a/app/app/pods/document/meta/template.hbs +++ b/app/app/pods/document/meta/template.hbs @@ -1 +1 @@ -{{document/document-meta document=model folders=folders folder=folder users=users owner=owner isEditor=isEditor onSave=(action 'onSave')}} +{{document/document-meta document=model.document folders=model.folders folder=model.folder users=model.users isEditor=model.isEditor onSave=(action 'onSave')}} diff --git a/app/app/pods/document/route.js b/app/app/pods/document/route.js index 69550ff1..e6958063 100644 --- a/app/app/pods/document/route.js +++ b/app/app/pods/document/route.js @@ -16,74 +16,56 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { sectionService: Ember.inject.service('section'), documentService: Ember.inject.service('document'), folderService: Ember.inject.service('folder'), - userService: Ember.inject.service('user'), - pages: [], - users: [], - meta: [], - folder: null, beforeModel(transition) { - this.pageId = is.not.undefined(transition.queryParams.page) ? transition.queryParams.page : ""; - var self = this; + this.set('pageId', is.not.undefined(transition.queryParams.page) ? transition.queryParams.page : ""); + this.set('folderId', this.paramsFor('document').folder_id); + this.set('documentId', this.paramsFor('document').document_id); - this.get('folderService').getAll().then(function (folders) { - self.set('folders', folders); - self.set('folder', folders.findBy("id", self.paramsFor('document').folder_id)); - self.get('folderService').setCurrentFolder(self.get('folder')); - }); - }, + return new Ember.RSVP.Promise((resolve) => { + this.get('folderService').getAll().then((folders) => { + this.set('folders', folders); - model: function (params) { - // this.audit.record("viewed-document"); - return this.get('documentService').getDocument(params.document_id); - }, + this.get('folderService').getFolder(this.get('folderId')).then((folder) => { + this.set('folder', folder); - afterModel(model) { - var self = this; - var documentId = model.get('id'); + this.get('folderService').setCurrentFolder(folder).then(() => { + this.set('isEditor', this.get('folderService').get('canEditCurrentFolder')); - this.browser.setTitle(model.get('name')); - - return new Ember.RSVP.Promise(function (resolve) { - self.get('documentService').getPages(documentId).then(function (pages) { - self.set('allPages', pages); - - self.get('sectionService').getAll().then(function (sections) { - self.set('sections', sections.filterBy('pageType', 'section')); - resolve(); + this.get('documentService').getPages(this.get('documentId')).then((pages) => { + this.set('allPages', pages); + this.set('pages', pages.filterBy('pageType', 'section')); + this.set('tabs', pages.filterBy('pageType', 'tab')); + resolve(); + }); + }); }); }); }); }, - setupController(controller, model) { - controller.set('model', model); - controller.set('folder', this.folder); - controller.set('folders', this.get('folders').rejectBy('id', 0)); - controller.set('currentPage', this.pageId); - controller.set('isEditor', this.get('folderService').get('canEditCurrentFolder')); - controller.set('pages', this.get('allPages').filterBy('pageType', 'section')); - controller.set('tabs', this.get('allPages').filterBy('pageType', 'tab')); - controller.set('sections', this.get('sections')); - - // setup document owner - let owner = this.get('users').findBy('id', model.get('userId')); - - // no document owner? You are the owner! - if (is.undefined(owner)) { - owner = this.session.user; - model.set('userId', this.get('session.session.authenticated.user.id')); - this.get('documentService').save(model); - } - - controller.set('owner', owner); - - this.browser.setMetaDescription(model.get('excerpt')); + model() { + return Ember.RSVP.hash({ + folders: this.get('folders'), + folder: this.get('folder'), + document: this.get('documentService').getDocument(this.get('documentId')).then((document) => { + return document; + }), + page: this.get('pageId'), + isEditor: this.get('isEditor'), + allPages: this.get('allPages'), + pages: this.get('pages'), + tabs: this.get('tabs'), + sections: this.get('sectionService').getAll().then((sections) => { + return sections.filterBy('pageType', 'section'); + }), + }); }, actions: { error(error /*, transition*/ ) { console.log(error); + console.log(error.stack); if (error) { this.transitionTo('/not-found'); return false; diff --git a/app/app/pods/document/section/controller.js b/app/app/pods/document/section/controller.js index 72eb3fc3..fac8ed73 100644 --- a/app/app/pods/document/section/controller.js +++ b/app/app/pods/document/section/controller.js @@ -19,7 +19,6 @@ export default Ember.Controller.extend(NotifierMixin, { actions: { onAction(page, meta) { - let self = this; this.showNotification("Saving"); let model = { @@ -27,21 +26,20 @@ export default Ember.Controller.extend(NotifierMixin, { meta: meta.toJSON({ includeId: true }) }; - this.get('documentService').updatePage(page.get('documentId'), page.get('id'), model).then(function (page) { - self.audit.record("edited-page"); - let data = self.get('store').normalize('page', page); - self.get('store').push(data); + this.get('documentService').updatePage(page.get('documentId'), page.get('id'), model).then((page) => { + this.audit.record("edited-page"); + let data = this.get('store').normalize('page', page); + this.get('store').push(data); + this.get('target.router').refresh(); }); }, onDelete(document, page) { - let self = this; - - this.get('documentService').deletePage(document.get('id'), page.get('id')).then(function () { - page.deleteRecord(); - self.audit.record("deleted-page"); - self.showNotification('Deleted'); - self.transitionToRoute('document'); + this.get('documentService').deletePage(document.get('id'), page.get('id')).then(() => { + this.audit.record("deleted-page"); + this.showNotification('Deleted'); + this.transitionToRoute('document'); + this.get('target.router').refresh(); }); } } diff --git a/app/app/pods/document/section/route.js b/app/app/pods/document/section/route.js index ad0e9c15..79aab403 100644 --- a/app/app/pods/document/section/route.js +++ b/app/app/pods/document/section/route.js @@ -28,30 +28,16 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { }, model(params) { - let self = this; - let document = this.modelFor('document'); - let folders = this.get('store').peekAll('folder'); - let folder = this.get('store').peekRecord('folder', this.paramsFor('document').folder_id); - - let pages = this.get('store').peekAll('page').filter((page) => { - return page.get('documentId') === document.get('id') && page.get('pageType') === 'section'; - }); - - let tabs = this.get('store').peekAll('page').filter((page) => { - return page.get('documentId') === document.get('id') && page.get('pageType') === 'tab'; - }); - - let page = tabs.findBy('id', params.page_id); - - this.audit.record("viewed-document-section-" + page.get('contentType')); - return Ember.RSVP.hash({ - folders: folders, - folder: folder, - document: document, - pages: pages, - page: page, - meta: self.get('documentService').getPageMeta(document.get('id'), params.page_id) + folders: this.modelFor('document').folders, + folder: this.modelFor('document').folder, + document: this.modelFor('document').document, + pages: this.modelFor('document').pages, + tabs: this.get('documentService').getPages(this.modelFor('document').document.get('id')).then((pages) => { + return pages.filterBy('pageType', 'tab'); + }), + page: this.get('documentService').getPage(this.modelFor('document').document.get('id'), params.page_id), + meta: this.get('documentService').getPageMeta(this.modelFor('document').document.get('id'), params.page_id) }); }, }); diff --git a/app/app/pods/document/template.hbs b/app/app/pods/document/template.hbs index 1d9c44ca..765707c3 100644 --- a/app/app/pods/document/template.hbs +++ b/app/app/pods/document/template.hbs @@ -1,12 +1,12 @@ {{layout/zone-navigation}} {{#layout/zone-sidebar}} - {{document/document-sidebar document=model folder=folder pages=pages page=page isEditor=isEditor sections=sections + {{document/document-sidebar document=model.document folder=model.folder pages=model.pages page=model.page isEditor=model.isEditor sections=model.sections onAddSection=(action 'onAddSection') changePageSequence=(action 'onPageSequenceChange') changePageLevel=(action 'onPageLevelChange') gotoPage=(action 'gotoPage')}} {{/layout/zone-sidebar}} {{#layout/zone-content}} - {{document/document-toolbar document=model pages=pages tabs=tabs folder=folder isEditor=isEditor + {{document/document-toolbar document=model.document pages=model.pages tabs=model.tabs folder=model.folder isEditor=model.isEditor onSaveTemplate=(action 'onSaveTemplate') onDocumentDelete=(action 'onDocumentDelete')}} {{outlet}} diff --git a/app/app/pods/document/wizard/controller.js b/app/app/pods/document/wizard/controller.js index 6456729c..6b11bc76 100644 --- a/app/app/pods/document/wizard/controller.js +++ b/app/app/pods/document/wizard/controller.js @@ -9,6 +9,7 @@ export default Ember.Controller.extend(NotifierMixin, { this.transitionToRoute('document'); }, + onAddSection(section) { this.audit.record("added-section-" + section.get('contentType')); @@ -22,28 +23,70 @@ export default Ember.Controller.extend(NotifierMixin, { pageType: section.get('pageType') }; - let data = this.get('store').normalize('page', page); - let pageData = this.get('store').push(data); - let meta = { documentId: this.get('model.document.id'), rawBody: "", config: "" }; - let pageMeta = this.get('store').normalize('page-meta', meta); - let pageMetaData = this.get('store').push(pageMeta); - let model = { - page: pageData, - meta: pageMetaData + page: page, + meta: meta }; this.get('documentService').addPage(this.get('model.document.id'), model).then((newPage) => { - let options = {}; - options['mode'] = 'edit'; - this.transitionToRoute('document.section', newPage.id, { queryParams: options }); + let data = this.get('store').normalize('page', newPage); + this.get('store').push(data); + + this.get('documentService').getPages(this.get('model.document.id')).then((pages) => { + this.set('model.pages', pages.filterBy('pageType', 'section')); + this.set('model.tabs', pages.filterBy('pageType', 'tab')); + + this.get('documentService').getPageMeta(this.get('model.document.id'), newPage.id).then(() => { + let options = {}; + options['mode'] = 'edit'; + this.transitionToRoute('document.section', newPage.id, { queryParams: options }); + }); + }); }); } + + // + // zonAddSection(section) { + // this.audit.record("added-section-" + section.get('contentType')); + // + // let page = { + // documentId: this.get('model.document.id'), + // title: `${section.get('title')}`, + // level: 1, + // sequence: 0, + // body: "", + // contentType: section.get('contentType'), + // pageType: section.get('pageType') + // }; + // + // let data = this.get('store').normalize('page', page); + // let pageData = this.get('store').push(data); + // + // let meta = { + // documentId: this.get('model.document.id'), + // rawBody: "", + // config: "" + // }; + // + // let pageMeta = this.get('store').normalize('page-meta', meta); + // let pageMetaData = this.get('store').push(pageMeta); + // + // let model = { + // page: pageData, + // meta: pageMetaData + // }; + // + // this.get('documentService').addPage(this.get('model.document.id'), model).then((newPage) => { + // let options = {}; + // options['mode'] = 'edit'; + // this.transitionToRoute('document.section', newPage.id, { queryParams: options }); + // }); + // } } }); diff --git a/app/app/pods/document/wizard/route.js b/app/app/pods/document/wizard/route.js index 357ec02f..0fe2d0d3 100644 --- a/app/app/pods/document/wizard/route.js +++ b/app/app/pods/document/wizard/route.js @@ -6,12 +6,13 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { folderService: Ember.inject.service('folder'), sectionService: Ember.inject.service('section'), - model() { - let self = this; - + model(params) { return Ember.RSVP.hash({ - folder: self.get('folderService').getFolder(self.paramsFor('document').folder_id), - document: self.get('documentService').getDocument(self.paramsFor('document').document_id), + folders: this.modelFor('document').folders, + folder: this.modelFor('document').folder, + document: this.modelFor('document').document, + pages: this.modelFor('document').pages, + tabs: this.modelFor('document').tabs, sections: this.get('sectionService').getAll().then(function (sections) { return sections.filterBy('pageType', 'tab'); }) diff --git a/app/app/templates/components/document/document-sidebar.hbs b/app/app/templates/components/document/document-sidebar.hbs index d813a520..ab750ae1 100644 --- a/app/app/templates/components/document/document-sidebar.hbs +++ b/app/app/templates/components/document/document-sidebar.hbs @@ -25,6 +25,7 @@ gotoPage=(action 'gotoPage')}} {{/if}} {{#if showSections}} - {{document/page-wizard display='section' document=document folder=folder sections=sections onCancel=(action 'onCancel') onAction=(action 'onAddSection')}} + {{document/page-wizard display='section' document=document folder=folder sections=sections + onCancel=(action 'onCancel') onAction=(action 'onAddSection')}} {{/if}}