diff --git a/gui/app/components/document/document-toc.js b/gui/app/components/document/document-toc.js index 28debf23..ad7b9425 100644 --- a/gui/app/components/document/document-toc.js +++ b/gui/app/components/document/document-toc.js @@ -35,7 +35,6 @@ export default Component.extend({ didReceiveAttrs() { this._super(...arguments); - this.setState(this.get('currentPageId')); }, @@ -43,10 +42,8 @@ export default Component.extend({ this._super(...arguments); this.setSize(); - this.eventBus.subscribe('documentPageAdded', this, 'onDocumentPageAdded'); this.eventBus.subscribe('resized', this, 'onResize'); - this.attachResizer(); }, diff --git a/gui/app/components/folder/start-document.js b/gui/app/components/folder/start-document.js index d3a6969c..45290ad5 100644 --- a/gui/app/components/folder/start-document.js +++ b/gui/app/components/folder/start-document.js @@ -10,7 +10,6 @@ // https://documize.com import { empty } from '@ember/object/computed'; - import { schedule } from '@ember/runloop'; import Component from '@ember/component'; import { inject as service } from '@ember/service'; diff --git a/gui/app/components/toolbar/for-document.js b/gui/app/components/toolbar/for-document.js index 5eb981df..c170acdf 100644 --- a/gui/app/components/toolbar/for-document.js +++ b/gui/app/components/toolbar/for-document.js @@ -61,6 +61,8 @@ export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, { actions: { onDocumentDelete() { + this.modalClose('#document-delete-modal'); + this.attrs.onDocumentDelete(); }, diff --git a/gui/app/components/toolbar/for-space.js b/gui/app/components/toolbar/for-space.js index 96b9eb5c..0e5b07d0 100644 --- a/gui/app/components/toolbar/for-space.js +++ b/gui/app/components/toolbar/for-space.js @@ -11,14 +11,16 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; +import { schedule } from '@ember/runloop'; import { inject as service } from '@ember/service'; -import NotifierMixin from '../../mixins/notifier'; import TooltipMixin from '../../mixins/tooltip'; import ModalMixin from '../../mixins/modal'; import AuthMixin from '../../mixins/auth'; -export default Component.extend(NotifierMixin, ModalMixin, TooltipMixin, AuthMixin, { +export default Component.extend(ModalMixin, TooltipMixin, AuthMixin, { spaceService: service('folder'), + localStorage: service(), + templateService: service('template'), session: service(), appMeta: service(), pinned: service(), @@ -38,12 +40,24 @@ export default Component.extend(NotifierMixin, ModalMixin, TooltipMixin, AuthMix deleteSpaceName: '', inviteEmail: '', inviteMessage: '', + hasTemplates: computed('templates', function() { + return this.get('templates.length') > 0; + }), + emptyDocName: '', + emptyDocNameError: false, + templateDocName: '', + templateDocNameError: false, + selectedTemplate: '', + importedDocuments: [], + importStatus: [], + dropzone: null, didReceiveAttrs() { this._super(...arguments); let folder = this.get('space'); let targets = _.reject(this.get('spaces'), {id: folder.get('id')}); + this.set('movedFolderOptions', targets); this.get('pinned').isSpacePinned(folder.get('id')).then((pinId) => { this.set('pinState.pinId', pinId); @@ -52,8 +66,6 @@ export default Component.extend(NotifierMixin, ModalMixin, TooltipMixin, AuthMix this.renderTooltips(); }); - this.set('movedFolderOptions', targets); - if (this.get('inviteMessage').length === 0) { this.set('inviteMessage', this.getDefaultInvitationMessage()); } @@ -61,7 +73,6 @@ export default Component.extend(NotifierMixin, ModalMixin, TooltipMixin, AuthMix didInsertElement() { this._super(...arguments); - this.modalInputFocus('#space-delete-modal', '#delete-space-name'); this.modalInputFocus('#space-invite-modal', '#space-invite-email'); }, @@ -69,12 +80,66 @@ export default Component.extend(NotifierMixin, ModalMixin, TooltipMixin, AuthMix willDestroyElement() { this._super(...arguments); this.removeTooltips(); + + if (is.not.null(this.get('dropzone'))) { + this.get('dropzone').destroy(); + this.set('dropzone', null); + } }, getDefaultInvitationMessage() { return "Hey there, I am sharing the " + this.get('space.name') + " space (in " + this.get("appMeta.title") + ") with you so we can both collaborate on documents."; }, + setupImport() { + // already done init? + if (is.not.null(this.get('dropzone'))) { + this.get('dropzone').destroy(); + this.set('dropzone', null); + } + + let self = this; + let folderId = this.get('space.id'); + let url = this.get('appMeta.endpoint'); + let importUrl = `${url}/import/folder/${folderId}`; + + let dzone = new Dropzone("#import-document-button", { + headers: { 'Authorization': 'Bearer ' + self.get('session.session.content.authenticated.token') }, + url: importUrl, + method: "post", + paramName: 'attachment', + acceptedFiles: ".doc,.docx,.md,.markdown,.htm,.html", + clickable: true, + maxFilesize: 10, + parallelUploads: 3, + uploadMultiple: false, + addRemoveLinks: false, + autoProcessQueue: true, + + init: function () { + this.on("success", function (document) { + self.send('onDocumentImported', document.name, document); + }); + + this.on("error", function (x) { + console.log("Conversion failed for", x.name, x); // eslint-disable-line no-console + }); + + // this.on("queuecomplete", function () {}); + + this.on("addedfile", function (file) { + self.send('onDocumentImporting', file.name); + }); + } + }); + + dzone.on("complete", function (file) { + dzone.removeFile(file); + }); + + this.set('dropzone', dzone); + }, + actions: { onUnpin() { this.get('pinned').unpinItem(this.get('pinState.pinId')).then(() => { @@ -166,16 +231,107 @@ export default Component.extend(NotifierMixin, ModalMixin, TooltipMixin, AuthMix this.modalClose('#space-delete-modal'); }, - onAddSpace(e) { + onShowEmptyDocModal() { + this.modalOpen("#empty-doc-modal", {"show": true}, '#empty-doc-name'); + }, + + onAddEmptyDoc(e) { e.preventDefault(); + let docName = this.get('emptyDocName'); + + if (is.empty(docName)) { + this.set('emptyDocNameError', true); + $('#empty-doc-name').focus(); + return; + } else { + this.set('emptyDocNameError', false); + this.set('emptyDocName', ''); + } + + this.modalClose("#empty-doc-modal"); + + this.get('templateService').importSavedTemplate(this.get('space.id'), '0', docName).then((document) => { + this.get('router').transitionTo('document', this.get('space.id'), this.get('space.slug'), document.get('id'), document.get('slug')); + }); }, - onImport() { - this.attrs.onRefresh(); + onShowTemplateDocModal() { + let t = this.get('templates'); + if (t.length > 0) { + t[0].set('selected', true); + this.modalOpen("#template-doc-modal", {"show": true}, '#template-doc-name'); + } }, - onHideStartDocument() { - // this.set('showStartDocument', false); + onSelectTemplate(i) { + let t = this.get('templates'); + t.forEach((t) => { + t.set('selected', false); + }) + i.set('selected', true); + this.set('selectedTemplate', i.id); + }, + + onAddTemplateDoc(e) { + e.preventDefault(); + let docName = this.get('templateDocName'); + + if (is.empty(docName)) { + this.set('templateDocNameError', true); + $('#template-doc-name').focus(); + return; + } else { + this.set('templateDocNameError', false); + this.set('templateDocName', ''); + } + + let id = this.get('selectedTemplate'); + if (is.empty(id)) { + return; + } + + this.modalClose("#template-doc-modal"); + + this.get('templateService').importSavedTemplate(this.get('space.id'), id, docName).then((document) => { + this.get('router').transitionTo('document', this.get('space.id'), this.get('space.slug'), document.get('id'), document.get('slug')); + }); + }, + + onShowImportDocModal() { + this.modalOpen("#import-doc-modal", {"show": true}); + + this.setupImport(); + this.modalOnShown('#import-doc-modal', function() { + schedule('afterRender', ()=> { + }); + }); + }, + + onDocumentImporting(filename) { + let status = this.get('importStatus'); + let documents = this.get('importedDocuments'); + + status.pushObject(`Converting ${filename}...`); + documents.push(filename); + + this.set('importStatus', status); + this.set('importedDocuments', documents); + }, + + onDocumentImported(filename /*, document*/ ) { + let status = this.get('importStatus'); + let documents = this.get('importedDocuments'); + + status.pushObject(`Successfully converted ${filename}`); + documents.pop(filename); + + this.set('importStatus', status); + this.set('importedDocuments', documents); + + if (documents.length === 0) { + this.modalClose("#import-doc-modal"); + this.attrs.onRefresh(); + } } } }); diff --git a/gui/app/mixins/modal.js b/gui/app/mixins/modal.js index 3fbef5ba..315375fc 100644 --- a/gui/app/mixins/modal.js +++ b/gui/app/mixins/modal.js @@ -17,16 +17,18 @@ import { schedule } from '@ember/runloop'; // element: #new-template-name // See https://getbootstrap.com/docs/4.0/components/modal/#via-javascript export default Mixin.create({ - modalOpen(modalId, options) { + modalOpen(modalId, options, focusId) { $(modalId).modal('dispose'); $(modalId).modal(options); + + if (is.not.undefined(focusId)) { + $(focusId).trigger('focus'); + } }, modalInputFocus(modalId, inputId) { - $(modalId).on('show.bs.modal', function(event) { // eslint-disable-line no-unused-vars - schedule('afterRender', () => { - $(inputId).focus(); - }); + $(modalId).on('shown.bs.modal', function(event) { // eslint-disable-line no-unused-vars + $(inputId).trigger('focus'); }); }, diff --git a/gui/app/pods/customize/template.hbs b/gui/app/pods/customize/template.hbs index edf0bbf6..c9143e6e 100644 --- a/gui/app/pods/customize/template.hbs +++ b/gui/app/pods/customize/template.hbs @@ -1,14 +1,14 @@ {{toolbar/nav-bar}} -
- {{#toolbar/t-toolbar}} - {{#toolbar/t-links}} - {{#link-to "folders" class="link" tagName="li"}}Spaces{{/link-to}} - {{/toolbar/t-links}} - {{#toolbar/t-actions}} - {{/toolbar/t-actions}} - {{/toolbar/t-toolbar}} +{{#toolbar/t-toolbar}} + {{#toolbar/t-links}} + {{#link-to "folders" class="link" tagName="li"}}Spaces{{/link-to}} + {{/toolbar/t-links}} + {{#toolbar/t-actions}} + {{/toolbar/t-actions}} +{{/toolbar/t-toolbar}} +
    diff --git a/gui/app/pods/document/block/template.hbs b/gui/app/pods/document/block/template.hbs index 8bf37468..b2d59e74 100644 --- a/gui/app/pods/document/block/template.hbs +++ b/gui/app/pods/document/block/template.hbs @@ -1,7 +1,5 @@ {{toolbar/nav-bar}} -
    - {{toolbar/for-document document=model.document spaces=model.folders space=model.folder permissions=model.permissions showTools=false showDocumentLink=true}} +{{toolbar/for-document document=model.document spaces=model.folders space=model.folder permissions=model.permissions showTools=false showDocumentLink=true}} - {{document/block-editor document=model.document folder=model.folder block=model.block onCancel=(action 'onCancel') onAction=(action 'onAction')}} -
    +{{document/block-editor document=model.document folder=model.folder block=model.block onCancel=(action 'onCancel') onAction=(action 'onAction')}} diff --git a/gui/app/pods/document/index/template.hbs b/gui/app/pods/document/index/template.hbs index b56d1008..d4b4f1eb 100644 --- a/gui/app/pods/document/index/template.hbs +++ b/gui/app/pods/document/index/template.hbs @@ -1,14 +1,9 @@ {{toolbar/nav-bar}} +{{toolbar/for-document document=document spaces=folders space=folder permissions=permissions + onDocumentDelete=(action 'onDocumentDelete') onSaveTemplate=(action 'onSaveTemplate')}} +
    - -
    -
    - {{toolbar/for-document document=document spaces=folders space=folder permissions=permissions - onDocumentDelete=(action 'onDocumentDelete') onSaveTemplate=(action 'onSaveTemplate')}} -
    -
    -
    {{document/document-heading document=document permissions=permissions @@ -58,5 +53,4 @@ {{/if}}
    -
    diff --git a/gui/app/pods/document/section/template.hbs b/gui/app/pods/document/section/template.hbs index 08078535..78ee0ee3 100644 --- a/gui/app/pods/document/section/template.hbs +++ b/gui/app/pods/document/section/template.hbs @@ -1,9 +1,13 @@ {{toolbar/nav-bar}} -
    - {{toolbar/for-document document=model.document spaces=model.folders space=model.folder permissions=model.permissions showTools=false showDocumentLink=true}} +{{toolbar/for-document document=model.document spaces=model.folders space=model.folder permissions=model.permissions showTools=false showDocumentLink=true}} -
    - {{document/document-editor document=model.document folder=model.folder page=model.page meta=model.meta onCancel=(action 'onCancel') onAction=(action 'onAction')}} +
    +
    +
    +
    + {{document/document-editor document=model.document folder=model.folder page=model.page meta=model.meta onCancel=(action 'onCancel') onAction=(action 'onAction')}} +
    +
    diff --git a/gui/app/pods/folder/category/template.hbs b/gui/app/pods/folder/category/template.hbs index fddd707e..3d5398e6 100644 --- a/gui/app/pods/folder/category/template.hbs +++ b/gui/app/pods/folder/category/template.hbs @@ -1,12 +1,10 @@ {{toolbar/nav-bar}} -
    - {{#toolbar/t-toolbar}} - {{#toolbar/t-links}} - {{#link-to "folders" class="link" tagName="li"}}Spaces{{/link-to}} - {{#link-to "folder" model.folder.id model.folder.slug class="link" tagName="li"}}{{model.folder.name}}{{/link-to}} - {{/toolbar/t-links}} - {{/toolbar/t-toolbar}} +{{#toolbar/t-toolbar}} + {{#toolbar/t-links}} + {{#link-to "folders" class="link" tagName="li"}}Spaces{{/link-to}} + {{#link-to "folder" model.folder.id model.folder.slug class="link" tagName="li"}}{{model.folder.name}}{{/link-to}} + {{/toolbar/t-links}} +{{/toolbar/t-toolbar}} - {{folder/category-admin folders=model.folders folder=model.folder}} -
    +{{folder/category-admin folders=model.folders folder=model.folder}} diff --git a/gui/app/pods/folder/index/template.hbs b/gui/app/pods/folder/index/template.hbs index 41da93b3..8a4cf5ce 100644 --- a/gui/app/pods/folder/index/template.hbs +++ b/gui/app/pods/folder/index/template.hbs @@ -1,24 +1,22 @@ {{toolbar/nav-bar}} -
    - {{toolbar/for-space - spaces=model.folders - space=model.folder - permissions=model.permissions - templates=model.templates - onRefresh=(action 'onRefresh') - onDeleteSpace=(action 'onDeleteSpace')}} +{{toolbar/for-space + spaces=model.folders + space=model.folder + permissions=model.permissions + templates=model.templates + onRefresh=(action 'onRefresh') + onDeleteSpace=(action 'onDeleteSpace')}} - {{folder/space-view - spaces=model.folders - space=model.folder - templates=model.templates - permissions=model.permissions - documents=model.documents - categories=model.categories - categorySummary=model.categorySummary - categoryMembers=model.categoryMembers - rootDocCount=model.rootDocCount - categoryFilter=category - onRefresh=(action 'onRefresh')}} -
    \ No newline at end of file +{{folder/space-view + spaces=model.folders + space=model.folder + templates=model.templates + permissions=model.permissions + documents=model.documents + categories=model.categories + categorySummary=model.categorySummary + categoryMembers=model.categoryMembers + rootDocCount=model.rootDocCount + categoryFilter=category + onRefresh=(action 'onRefresh')}} diff --git a/gui/app/pods/folders/template.hbs b/gui/app/pods/folders/template.hbs index f00c7063..0e095d45 100644 --- a/gui/app/pods/folders/template.hbs +++ b/gui/app/pods/folders/template.hbs @@ -1,6 +1,5 @@ {{toolbar/nav-bar}} -
    - {{toolbar/for-spaces spaces=model onAddSpace=(action 'onAddSpace')}} - {{spaces/space-list spaces=model}} -
    +{{toolbar/for-spaces spaces=model onAddSpace=(action 'onAddSpace')}} + +{{spaces/space-list spaces=model}} diff --git a/gui/app/pods/profile/template.hbs b/gui/app/pods/profile/template.hbs index 16c4df3a..db3ccf63 100644 --- a/gui/app/pods/profile/template.hbs +++ b/gui/app/pods/profile/template.hbs @@ -1,13 +1,13 @@ {{toolbar/nav-bar}} -
    - {{#toolbar/t-toolbar}} - {{#toolbar/t-links}} - {{#link-to "folders" class="link" tagName="li"}}Spaces{{/link-to}} - {{/toolbar/t-links}} - {{#toolbar/t-actions}} - {{/toolbar/t-actions}} - {{/toolbar/t-toolbar}} +{{#toolbar/t-toolbar}} + {{#toolbar/t-links}} + {{#link-to "folders" class="link" tagName="li"}}Spaces{{/link-to}} + {{/toolbar/t-links}} + {{#toolbar/t-actions}} + {{/toolbar/t-actions}} +{{/toolbar/t-toolbar}} +
    {{user-profile model=model save=(action 'save')}}
    diff --git a/gui/app/pods/search/template.hbs b/gui/app/pods/search/template.hbs index bed5c218..8a537f81 100644 --- a/gui/app/pods/search/template.hbs +++ b/gui/app/pods/search/template.hbs @@ -1,14 +1,14 @@ {{toolbar/nav-bar}} -
    - {{#toolbar/t-toolbar}} - {{#toolbar/t-links}} - {{#link-to "folders" class="link" tagName="li"}}Spaces{{/link-to}} - {{/toolbar/t-links}} - {{#toolbar/t-actions}} - {{/toolbar/t-actions}} - {{/toolbar/t-toolbar}} +{{#toolbar/t-toolbar}} + {{#toolbar/t-links}} + {{#link-to "folders" class="link" tagName="li"}}Spaces{{/link-to}} + {{/toolbar/t-links}} + {{#toolbar/t-actions}} + {{/toolbar/t-actions}} +{{/toolbar/t-toolbar}} +