mirror of
https://github.com/documize/community.git
synced 2025-08-04 21:15:24 +02:00
Improve move/copy/merge sections between documents
Processx all child sections during copy/move/merge operation. Ensure links work as expected within newly copied/moved content. Index copied/moved content for searching. fixes #138 fixes #248
This commit is contained in:
parent
ec8d5c78e2
commit
a90c5834fa
7 changed files with 133 additions and 47 deletions
|
@ -9,7 +9,7 @@
|
|||
//
|
||||
// https://documize.com
|
||||
|
||||
import { Promise as EmberPromise } from 'rsvp';
|
||||
import { Promise as EmberPromise, all } from 'rsvp';
|
||||
import { inject as service } from '@ember/service';
|
||||
import Notifier from '../../../mixins/notifier';
|
||||
import Controller from '@ember/controller';
|
||||
|
@ -46,8 +46,19 @@ export default Controller.extend(Notifier, {
|
|||
|
||||
onCopyPage(pageId, targetDocumentId) {
|
||||
let documentId = this.get('document.id');
|
||||
this.get('documentService').copyPage(documentId, pageId, targetDocumentId).then(() => {
|
||||
let pages = this.get('pages');
|
||||
|
||||
// Make list of page ID values including all child pages.
|
||||
let pagesToProcess = [{ pageId: pageId }].concat(this.get('documentService').getChildren(pages, pageId));
|
||||
|
||||
// Copy each page.
|
||||
let promises = [];
|
||||
pagesToProcess.forEach((page, index) => {
|
||||
promises[index] = this.get('documentService').copyPage(documentId, page.pageId, targetDocumentId);
|
||||
});
|
||||
|
||||
// Do post-processing after all copying has completed.
|
||||
all(promises).then(() => {
|
||||
// refresh data if copied to same document
|
||||
if (documentId === targetDocumentId) {
|
||||
this.set('pageId', '');
|
||||
|
@ -62,9 +73,21 @@ export default Controller.extend(Notifier, {
|
|||
|
||||
onMovePage(pageId, targetDocumentId) {
|
||||
let documentId = this.get('document.id');
|
||||
let pages = this.get('pages');
|
||||
|
||||
this.get('documentService').copyPage(documentId, pageId, targetDocumentId).then(() => {
|
||||
this.send('onPageDeleted', { id: pageId, children: false });
|
||||
// Make list of page ID values including all child pages.
|
||||
let pagesToProcess = [{ pageId: pageId }].concat(this.get('documentService').getChildren(pages, pageId));
|
||||
|
||||
// Copy each page.
|
||||
let promises = [];
|
||||
pagesToProcess.forEach((page, index) => {
|
||||
promises[index] = this.get('documentService').copyPage(documentId, page.pageId, targetDocumentId);
|
||||
});
|
||||
|
||||
// Do post-processing after all copying has completed.
|
||||
all(promises).then(() => {
|
||||
// For move operation we delete all copied pages.
|
||||
this.send('onPageDeleted', { id: pageId, children: true });
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -109,19 +132,9 @@ export default Controller.extend(Notifier, {
|
|||
let documentId = this.get('document.id');
|
||||
let deleteId = deletePage.id;
|
||||
let deleteChildren = deletePage.children;
|
||||
let pendingChanges = [];
|
||||
|
||||
let pages = this.get('pages');
|
||||
let pageIndex = _.findIndex(pages, function(i) { return i.get('page.id') === deleteId; });
|
||||
let item = pages[pageIndex];
|
||||
|
||||
// select affected pages
|
||||
for (var i = pageIndex + 1; i < pages.get('length'); i++) {
|
||||
if (i === pageIndex + 1 && pages[i].get('page.level') === item.get('page.level')) break;
|
||||
if (pages[i].get('page.level') <= item.get('page.level')) break;
|
||||
|
||||
pendingChanges.push({ pageId: pages[i].get('page.id'), level: pages[i].get('page.level') - 1 });
|
||||
}
|
||||
let pendingChanges = this.get('documentService').getChildren(pages, deleteId);
|
||||
|
||||
this.set('currentPageId', null);
|
||||
|
||||
|
|
|
@ -183,6 +183,22 @@ export default Service.extend({
|
|||
});
|
||||
},
|
||||
|
||||
// Given a page ID, return all children of the starting page.
|
||||
getChildren(pages, pageId) {
|
||||
let children = [];
|
||||
let pageIndex = _.findIndex(pages, function(i) { return i.get('page.id') === pageId; });
|
||||
let item = pages[pageIndex];
|
||||
|
||||
for (var i = pageIndex + 1; i < pages.get('length'); i++) {
|
||||
if (i === pageIndex + 1 && pages[i].get('page.level') === item.get('page.level')) break;
|
||||
if (pages[i].get('page.level') <= item.get('page.level')) break;
|
||||
|
||||
children.push({ pageId: pages[i].get('page.id'), level: pages[i].get('page.level') - 1 });
|
||||
}
|
||||
|
||||
return children;
|
||||
},
|
||||
|
||||
//**************************************************
|
||||
// Page Revisions
|
||||
//**************************************************
|
||||
|
|
|
@ -185,9 +185,8 @@
|
|||
|
||||
> .dates {
|
||||
margin-bottom: 3rem;
|
||||
font-size: 1rem;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
color: map-get($gray-shades, 700);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,10 +31,14 @@
|
|||
{{/if}}
|
||||
<li class="item" {{action "onShowPrintModal"}}>Print</li>
|
||||
<li class="item" {{action "onExport"}}>Download</li>
|
||||
{{#if permissions.documentAdd}}
|
||||
{{#if (or permissions.documentAdd permissions.documentCopy)}}
|
||||
<li class="divider"/>
|
||||
<li class="item" {{action "onShowTemplateModal"}}>Template</li>
|
||||
<li class="item" {{action "onShowDuplicateModal"}}>Duplicate</li>
|
||||
{{#if permissions.documentAdd}}
|
||||
<li class="item" {{action "onShowTemplateModal"}}>Template</li>
|
||||
{{/if}}
|
||||
{{#if permissions.documentCopy}}
|
||||
<li class="item" {{action "onShowDuplicateModal"}}>Copy</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{#if permissions.documentDelete}}
|
||||
<li class="divider"/>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue