From b5a595e305eadc07cd3cf93ae55cead736bd663b Mon Sep 17 00:00:00 2001
From: Harvey Kandola
Date: Sun, 22 Jan 2017 15:22:14 -0800
Subject: [PATCH] implemented move content to another document
---
app/app/components/document/document-view.js | 4 ++
app/app/components/document/page-heading.js | 53 +++++++++++++++----
app/app/pods/document/index/controller.js | 12 ++++-
app/app/pods/document/index/template.hbs | 2 +-
app/app/services/document.js | 10 ++++
app/app/styles/view/document/content.scss | 9 ++--
.../components/document/document-view.hbs | 2 +-
.../components/document/page-heading.hbs | 18 +++++--
core/api/request/page.go | 14 +++++
9 files changed, 105 insertions(+), 19 deletions(-)
diff --git a/app/app/components/document/document-view.js b/app/app/components/document/document-view.js
index 59a528d8..15466ae7 100644
--- a/app/app/components/document/document-view.js
+++ b/app/app/components/document/document-view.js
@@ -78,6 +78,10 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
this.attrs.onCopyPage(pageId, documentId);
},
+ onMovePage(pageId, documentId) {
+ this.attrs.onMovePage(pageId, documentId);
+ },
+
onDeletePage(id, deleteChildren) {
let page = this.get('pages').findBy("id", id);
diff --git a/app/app/components/document/page-heading.js b/app/app/components/document/page-heading.js
index cd2898a1..4eee7354 100644
--- a/app/app/components/document/page-heading.js
+++ b/app/app/components/document/page-heading.js
@@ -39,13 +39,13 @@ export default Ember.Component.extend(TooltipMixin, {
let id = this.get('page.id');
return `delete-page-button-${id}`;
}),
- saveAsTarget: computed('page', function () {
+ publishButtonId: computed('page', function () {
let id = this.get('page.id');
- return `saveas-page-button-${id}`;
+ return `publish-button-${id}`;
}),
- saveAsDialogId: computed('page', function () {
+ publishDialogId: computed('page', function () {
let id = this.get('page.id');
- return `save-as-dialog-${id}`;
+ return `publish-dialog-${id}`;
}),
blockTitleId: computed('page', function () {
let id = this.get('page.id');
@@ -63,6 +63,14 @@ export default Ember.Component.extend(TooltipMixin, {
let id = this.get('page.id');
return `copy-dialog-${id}`;
}),
+ moveButtonId: computed('page', function () {
+ let id = this.get('page.id');
+ return `move-page-button-${id}`;
+ }),
+ moveDialogId: computed('page', function () {
+ let id = this.get('page.id');
+ return `move-dialog-${id}`;
+ }),
didRender() {
if (this.get('isEditor')) {
@@ -82,7 +90,13 @@ export default Ember.Component.extend(TooltipMixin, {
actions: {
onMenuOpen() {
- if ($('#' + this.get('saveAsDialogId')).is( ":visible" )) {
+ if ($('#' + this.get('publishDialogId')).is( ":visible" )) {
+ return;
+ }
+ if ($('#' + this.get('copyDialogId')).is( ":visible" )) {
+ return;
+ }
+ if ($('#' + this.get('moveDialogId')).is( ":visible" )) {
return;
}
@@ -137,9 +151,9 @@ export default Ember.Component.extend(TooltipMixin, {
});
},
- // Copy action
+ // Copy/move actions
onCopyDialogOpen() {
- // Fetch document targets once.
+ // Fetch document targets once.
if (this.get('documentList').length > 0) {
return;
}
@@ -156,13 +170,34 @@ export default Ember.Component.extend(TooltipMixin, {
},
onCopyPage(page) {
+ // can't proceed if no data
+ if (this.get('documentList'.length) === 0) {
+ return;
+ }
+
let targetDocumentId = this.get('document.id');
if (is.not.null(this.get('selectedDocument'))) {
- targetDocumentId = this.get('selectedDocument.id')
+ targetDocumentId = this.get('selectedDocument.id');
}
this.attrs.onCopyPage(page.get('id'), targetDocumentId);
return true;
- }
+ },
+
+ onMovePage(page) {
+ // can't proceed if no data
+ if (this.get('documentListOthers.length') === 0) {
+ return;
+ }
+
+ if (is.null(this.get('selectedDocument'))) {
+ this.set('selectedDocument', this.get('documentListOthers')[0]);
+ }
+
+ let targetDocumentId = this.get('selectedDocument.id');
+
+ this.attrs.onMovePage(page.get('id'), targetDocumentId);
+ return true;
+ }
}
});
diff --git a/app/app/pods/document/index/controller.js b/app/app/pods/document/index/controller.js
index 4c6fd658..b8fbbb14 100644
--- a/app/app/pods/document/index/controller.js
+++ b/app/app/pods/document/index/controller.js
@@ -94,7 +94,7 @@ export default Ember.Controller.extend(NotifierMixin, {
onCopyPage(pageId, targetDocumentId) {
let documentId = this.get('model.document.id');
- this.get('documentService').copyPage(documentId, pageId, targetDocumentId).then((page) => {
+ this.get('documentService').copyPage(documentId, pageId, targetDocumentId).then(() => {
this.showNotification("Copied");
// refresh data if copied to same document
@@ -104,6 +104,16 @@ export default Ember.Controller.extend(NotifierMixin, {
});
},
+ onMovePage(pageId, targetDocumentId) {
+ let documentId = this.get('model.document.id');
+
+ this.get('documentService').copyPage(documentId, pageId, targetDocumentId).then(() => {
+ this.showNotification("Moved");
+
+ this.send('onPageDeleted', { id: pageId, children: false });
+ });
+ },
+
onPageDeleted(deletePage) {
let documentId = this.get('model.document.id');
let pages = this.get('model.pages');
diff --git a/app/app/pods/document/index/template.hbs b/app/app/pods/document/index/template.hbs
index 09c8b792..70063ee5 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.document links=model.links allPages=model.allPages tabs=model.tabs pages=model.pages folder=model.folder folders=model.folders isEditor=model.isEditor
- gotoPage=(action 'gotoPage') onAddBlock=(action 'onAddBlock') onCopyPage=(action 'onCopyPage') onDeletePage=(action 'onPageDeleted')}}
+ gotoPage=(action 'gotoPage') onAddBlock=(action 'onAddBlock') onCopyPage=(action 'onCopyPage') onMovePage=(action 'onMovePage') onDeletePage=(action 'onPageDeleted')}}
diff --git a/app/app/services/document.js b/app/app/services/document.js
index 98f0abb8..7d1d1130 100644
--- a/app/app/services/document.js
+++ b/app/app/services/document.js
@@ -325,6 +325,16 @@ export default Ember.Service.extend({
let data = this.get('store').normalize('page', response);
return this.get('store').push(data);
});
+ },
+
+ // Move existing page to different document.
+ movePage(documentId, pageId, targetDocumentId) {
+ return this.get('ajax').request(`documents/${documentId}/pages/${pageId}/move/${targetDocumentId}`, {
+ method: 'POST'
+ }).then((response) => {
+ let data = this.get('store').normalize('page', response);
+ return this.get('store').push(data);
+ });
}
});
diff --git a/app/app/styles/view/document/content.scss b/app/app/styles/view/document/content.scss
index d2c23b9e..47756abd 100644
--- a/app/app/styles/view/document/content.scss
+++ b/app/app/styles/view/document/content.scss
@@ -41,12 +41,13 @@
> .is-a-page {
.page-title {
> .page-toolbar {
- opacity: 0.5;
+ // opacity: 0.5;
+ opacity: 0;
@extend .transition-all;
- &:hover {
- opacity: 1;
- }
+ // &:hover {
+ // opacity: 1;
+ // }
}
&:hover {
diff --git a/app/app/templates/components/document/document-view.hbs b/app/app/templates/components/document/document-view.hbs
index 79721305..6b5f7b4f 100644
--- a/app/app/templates/components/document/document-view.hbs
+++ b/app/app/templates/components/document/document-view.hbs
@@ -18,7 +18,7 @@
{{document/page-heading tagName=page.tagName document=document folder=folder page=page isEditor=isEditor
- onAddBlock=(action 'onAddBlock') onCopyPage=(action 'onCopyPage') onDeletePage=(action 'onDeletePage')}}
+ onAddBlock=(action 'onAddBlock') onCopyPage=(action 'onCopyPage') onMovePage=(action 'onMovePage') onDeletePage=(action 'onDeletePage')}}
{{section/base-renderer page=page}}
diff --git a/app/app/templates/components/document/page-heading.hbs b/app/app/templates/components/document/page-heading.hbs
index b7563c40..95258f8b 100644
--- a/app/app/templates/components/document/page-heading.hbs
+++ b/app/app/templates/components/document/page-heading.hbs
@@ -15,8 +15,8 @@
{{#dropdown-menu target=menuTarget position="bottom right" open="click" onOpenCallback=(action 'onMenuOpen') onCloseCallback=(action 'onMenuOpen')}}
@@ -30,7 +30,7 @@
{{/dropdown-dialog}}
- {{#dropdown-dialog id=saveAsDialogId target=saveAsTarget position="bottom right" button="Publish" color="flat-green" focusOn=blockTitleId onAction=(action 'onAddBlock' page)}}
+ {{#dropdown-dialog id=publishDialogId target=publishButtonId position="bottom right" button="Publish" color="flat-green" focusOn=blockTitleId onAction=(action 'onAddBlock' page)}}