diff --git a/domain/document/export.go b/domain/document/export.go index 7368f3bb..4da050f7 100644 --- a/domain/document/export.go +++ b/domain/document/export.go @@ -45,7 +45,6 @@ func BuildExport(ctx domain.RequestContext, s domain.Store, spec exportSpec) (ht switch spec.FilterType { case "space": - for _, spaceID := range spec.Data { t, c, e := exportSpace(ctx, s, spaceID) if e == nil { @@ -55,7 +54,6 @@ func BuildExport(ctx domain.RequestContext, s domain.Store, spec exportSpec) (ht } case "category": - t, c, e := exportCategory(ctx, s, spec.SpaceID, spec.Data) if e == nil { content.WriteString(c) @@ -63,7 +61,6 @@ func BuildExport(ctx domain.RequestContext, s domain.Store, spec exportSpec) (ht } case "document": - t, c, e := exportDocument(ctx, s, spec.SpaceID, spec.Data) if e == nil { content.WriteString(c) @@ -233,14 +230,17 @@ func exportDocument(ctx domain.RequestContext, s domain.Store, spaceID string, d // Turn each document into TOC entry and HTML content export b := strings.Builder{} for _, documentID := range document { + fmt.Println(documentID) for _, d := range docs { - if d.RefID == documentID && d.Lifecycle == workflow.LifecycleLive { - docHTML, e := processDocument(ctx, s, d.RefID) - if e == nil && len(docHTML) > 0 { - toc = append(toc, exportTOC{ID: d.RefID, Entry: d.Title}) - b.WriteString(docHTML) - } else { - return toc, b.String(), err + if d.RefID == documentID { + if permission.CanViewDocument(ctx, s, d.RefID) { + docHTML, e := processDocument(ctx, s, d.RefID) + if e == nil && len(docHTML) > 0 { + toc = append(toc, exportTOC{ID: d.RefID, Entry: d.Title}) + b.WriteString(docHTML) + } else { + return toc, b.String(), err + } } } } diff --git a/gui/app/components/folder/documents-list.js b/gui/app/components/folder/documents-list.js index a5f7cff0..40467845 100644 --- a/gui/app/components/folder/documents-list.js +++ b/gui/app/components/folder/documents-list.js @@ -81,6 +81,16 @@ export default Component.extend(TooltipMixin, { return true; }, + onExport() { + let list = this.get('selectedDocuments'); + this.set('selectedDocuments', A([])); + + let cb = this.get('onExportDocument'); + cb(list); + + return true; + }, + selectDocument(documentId) { let doc = this.get('documents').findBy('id', documentId); let list = this.get('selectedDocuments'); diff --git a/gui/app/components/toolbar/for-document.js b/gui/app/components/toolbar/for-document.js index fb88bb6d..4899586a 100644 --- a/gui/app/components/toolbar/for-document.js +++ b/gui/app/components/toolbar/for-document.js @@ -14,14 +14,17 @@ import { inject as service } from '@ember/service'; import AuthMixin from '../../mixins/auth'; import TooltipMixin from '../../mixins/tooltip'; import ModalMixin from '../../mixins/modal'; +import Notifier from '../../mixins/notifier'; import Component from '@ember/component'; -export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, { +export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, Notifier, { store: service(), spaceSvc: service('folder'), session: service(), appMeta: service(), pinned: service(), + browserSvc: service('browser'), + documentSvc: service('document'), init() { this._super(...arguments); @@ -130,5 +133,22 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, { return true; }, + + onExport() { + this.showWait(); + + let spec = { + spaceId: this.get('document.folderId'), + data: [], + filterType: 'document', + }; + + spec.data.push(this.get('document.id')); + + this.get('documentSvc').export(spec).then((htmlExport) => { + this.get('browserSvc').downloadFile(htmlExport, this.get('document.slug') + '.html'); + this.showDone(); + }); + } } }); diff --git a/gui/app/components/toolbar/for-space.js b/gui/app/components/toolbar/for-space.js index cac13978..76c470fc 100644 --- a/gui/app/components/toolbar/for-space.js +++ b/gui/app/components/toolbar/for-space.js @@ -16,9 +16,10 @@ import { inject as service } from '@ember/service'; import TooltipMixin from '../../mixins/tooltip'; import ModalMixin from '../../mixins/modal'; import AuthMixin from '../../mixins/auth'; +import Notifier from '../../mixins/notifier'; import Component from '@ember/component'; -export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, { +export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, Notifier, { spaceService: service('folder'), localStorage: service(), templateService: service('template'), @@ -307,11 +308,13 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, { }, onExport() { + this.showWait(); + let spec = { spaceId: this.get('space.id'), data: [], filterType: '', - } + }; let cats = this.get('categories'); cats.forEach((cat) => { @@ -327,6 +330,7 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, { this.get('documentSvc').export(spec).then((htmlExport) => { this.get('browserSvc').downloadFile(htmlExport, this.get('space.slug') + '.html'); + this.showDone(); }); this.modalClose("#space-export-modal"); diff --git a/gui/app/pods/folder/index/controller.js b/gui/app/pods/folder/index/controller.js index 5beb2035..3269ff96 100644 --- a/gui/app/pods/folder/index/controller.js +++ b/gui/app/pods/folder/index/controller.js @@ -18,6 +18,8 @@ export default Controller.extend(NotifierMixin, { documentService: service('document'), folderService: service('folder'), localStorage: service('localStorage'), + browserSvc: service('browser'), + documentSvc: service('document'), queryParams: ['category'], category: '', filteredDocs: null, @@ -71,6 +73,21 @@ export default Controller.extend(NotifierMixin, { }); }, + onExportDocument(documents) { + this.showWait(); + + let spec = { + spaceId: this.get('model.folder.id'), + data: documents, + filterType: 'document', + }; + + this.get('documentSvc').export(spec).then((htmlExport) => { + this.get('browserSvc').downloadFile(htmlExport, this.get('model.folder.slug') + '.html'); + this.showDone(); + }); + }, + onFiltered(docs) { this.set('filteredDocs', docs); } diff --git a/gui/app/pods/folder/index/template.hbs b/gui/app/pods/folder/index/template.hbs index fbe0c24e..d9dcdc09 100644 --- a/gui/app/pods/folder/index/template.hbs +++ b/gui/app/pods/folder/index/template.hbs @@ -25,6 +25,7 @@ space=model.folder templates=model.templates permissions=model.permissions + onExportDocument=(action 'onExportDocument') onDeleteDocument=(action 'onDeleteDocument') onMoveDocument=(action 'onMoveDocument')}} {{/layout/middle-zone-content}} diff --git a/gui/app/templates/components/folder/documents-list.hbs b/gui/app/templates/components/folder/documents-list.hbs index a0209838..36674b0c 100644 --- a/gui/app/templates/components/folder/documents-list.hbs +++ b/gui/app/templates/components/folder/documents-list.hbs @@ -22,6 +22,10 @@ {{#if document.selected}}
+
+ import_export +
+
{{#if permissions.documentMove}}
compare_arrows diff --git a/gui/app/templates/components/toolbar/for-document.hbs b/gui/app/templates/components/toolbar/for-document.hbs index 20808270..7abf9f95 100644 --- a/gui/app/templates/components/toolbar/for-document.hbs +++ b/gui/app/templates/components/toolbar/for-document.hbs @@ -19,6 +19,11 @@
+
+ import_export +
+
+ {{#if pinState.isPinned}}
star