diff --git a/gui/app/components/folder/category-admin-sidebar.js b/gui/app/components/folder/category-admin-sidebar.js new file mode 100644 index 00000000..e071cb90 --- /dev/null +++ b/gui/app/components/folder/category-admin-sidebar.js @@ -0,0 +1,45 @@ +// Copyright 2016 Documize Inc. . All rights reserved. +// +// 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 . +// +// https://documize.com + +import $ from 'jquery'; +import Component from '@ember/component'; + +export default Component.extend({ + newCategory: '', + + actions: { + didInsertElement() { + this._super(...arguments); + $('#new-category-name').focus(); + }, + + onAdd(e) { + e.preventDefault(); + + let cat = this.get('newCategory'); + + if (cat === '') { + $('#new-category-name').addClass('is-invalid').focus(); + return; + } + + $('#new-category-name').removeClass('is-invalid').focus(); + this.set('newCategory', ''); + + let c = { + category: cat, + folderId: this.get('space.id') + }; + + this.get('onAdd')(c); + } + } +}); diff --git a/gui/app/components/folder/category-admin.js b/gui/app/components/folder/category-admin.js index 71c86e8a..452e5e39 100644 --- a/gui/app/components/folder/category-admin.js +++ b/gui/app/components/folder/category-admin.js @@ -22,7 +22,6 @@ export default Component.extend(ModalMixin, TooltipMixin, { categorySvc: service('category'), appMeta: service(), store: service(), - newCategory: '', deleteId: '', dropdown: null, @@ -92,29 +91,6 @@ export default Component.extend(ModalMixin, TooltipMixin, { }, actions: { - onAdd(e) { - e.preventDefault(); - - let cat = this.get('newCategory'); - - if (cat === '') { - $('#new-category-name').addClass('is-invalid').focus(); - return; - } - - $('#new-category-name').removeClass('is-invalid').focus(); - this.set('newCategory', ''); - - let c = { - category: cat, - folderId: this.get('folder.id') - }; - - this.get('categorySvc').add(c).then(() => { - this.load(); - }); - }, - onShowDelete(id) { let cat = this.get('category').findBy('id', id); this.set('deleteId', cat.get('id')); diff --git a/gui/app/components/folder/space-view.js b/gui/app/components/folder/space-view.js index 91983e45..76c76b38 100644 --- a/gui/app/components/folder/space-view.js +++ b/gui/app/components/folder/space-view.js @@ -9,13 +9,12 @@ // // https://documize.com -import Component from '@ember/component'; import { inject as service } from '@ember/service'; -import { all } from 'rsvp'; import { schedule } from '@ember/runloop'; import { gt } from '@ember/object/computed'; import { computed } from '@ember/object'; import AuthMixin from '../../mixins/auth'; +import Component from '@ember/component'; export default Component.extend(AuthMixin, { router: service(), @@ -30,7 +29,7 @@ export default Component.extend(AuthMixin, { init() { this._super(...arguments); - this.filteredDocs = []; + // this.filteredDocs = []; this.setup(); }, @@ -39,11 +38,6 @@ export default Component.extend(AuthMixin, { this.setup(); }, - didUpdateAttrs() { - this._super(...arguments); - // this.setup(); - }, - setup() { let categories = this.get('categories'); let categorySummary = this.get('categorySummary'); @@ -59,7 +53,7 @@ export default Component.extend(AuthMixin, { }); this.set('categories', categories); - this.set('categoryLinkName', categories.length > 0 ? 'manage' : 'add'); + this.set('categoryLinkName', categories.length > 0 ? 'Manage' : 'Add'); schedule('afterRender', () => { if (this.get('categoryFilter') !== '') { @@ -75,50 +69,6 @@ export default Component.extend(AuthMixin, { }, actions: { - onMoveDocument(documents, targetSpaceId) { - let self = this; - let promises1 = []; - let promises2 = []; - - documents.forEach(function(documentId, index) { - promises1[index] = self.get('documentService').getDocument(documentId); - }); - - all(promises1).then(() => { - promises1.forEach(function(doc, index) { - doc.then((d) => { - d.set('folderId', targetSpaceId); - d.set('selected', false); - promises2[index] = self.get('documentService').save(d); - }); - }); - - all(promises2).then(() => { - self.attrs.onRefresh(); - }); - }); - }, - - onDeleteDocument(documents) { - let self = this; - let promises = []; - - documents.forEach(function (document, index) { - promises[index] = self.get('documentService').deleteDocument(document); - }); - - all(promises).then(() => { - let documents = this.get('documents'); - documents.forEach(function (document) { - document.set('selected', false); - }); - - this.set('documents', documents); - let cb = this.get('onRefresh'); - cb(); - }); - }, - onDocumentFilter(filter, id) { let docs = this.get('documents'); let categories = this.get('categories'); @@ -170,7 +120,7 @@ export default Component.extend(AuthMixin, { }); this.set('categories', categories); - this.set('filteredDocs', filtered); + this.get('onFiltered')(filtered); } } }); diff --git a/gui/app/pods/folder/category/controller.js b/gui/app/pods/folder/category/controller.js index fe1fb43c..8f733fbc 100644 --- a/gui/app/pods/folder/category/controller.js +++ b/gui/app/pods/folder/category/controller.js @@ -9,7 +9,18 @@ // // https://documize.com +import { inject as service } from '@ember/service'; import Controller from '@ember/controller'; export default Controller.extend({ + categorySvc: service('category'), + refresh: 0, + + actions: { + onAdd(c) { + this.get('categorySvc').add(c).then(() => { + this.set('refresh', this.get('refresh')+1); + }); + } + } }); diff --git a/gui/app/pods/folder/category/route.js b/gui/app/pods/folder/category/route.js index fb199d5d..b819abb6 100644 --- a/gui/app/pods/folder/category/route.js +++ b/gui/app/pods/folder/category/route.js @@ -10,9 +10,8 @@ // https://documize.com import { hash } from 'rsvp'; - -import Route from '@ember/routing/route'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; +import Route from '@ember/routing/route'; export default Route.extend(AuthenticatedRouteMixin, { model() { diff --git a/gui/app/pods/folder/category/template.hbs b/gui/app/pods/folder/category/template.hbs index 288561b5..c12a08d5 100644 --- a/gui/app/pods/folder/category/template.hbs +++ b/gui/app/pods/folder/category/template.hbs @@ -1,9 +1,22 @@ -{{toolbar/nav-bar}} +{{#layout/top-bar}} +
  • + {{#link-to "folder.index" model.folder.id model.folder.slug class='link selected'}} + {{model.folder.name}} + {{/link-to}} +
  • +{{/layout/top-bar}} -{{#toolbar/t-toolbar}} - {{#toolbar/t-links}} - {{#link-to "folder" model.folder.id model.folder.slug class="link selected" tagName="li"}}{{model.folder.name}}{{/link-to}} - {{/toolbar/t-links}} -{{/toolbar/t-toolbar}} +{{#layout/middle-zone}} + {{#layout/middle-zone-content}} + {{folder/category-admin folders=model.folders folder=model.folder refresh=refresh}} + {{/layout/middle-zone-content}} -{{folder/category-admin folders=model.folders folder=model.folder}} + {{#layout/middle-zone-sidebar}} + + {{/layout/middle-zone-sidebar}} +{{/layout/middle-zone}} + +{{#layout/bottom-bar}} +{{/layout/bottom-bar}} \ No newline at end of file diff --git a/gui/app/pods/folder/index/controller.js b/gui/app/pods/folder/index/controller.js index eb674307..23beb5e4 100644 --- a/gui/app/pods/folder/index/controller.js +++ b/gui/app/pods/folder/index/controller.js @@ -9,9 +9,10 @@ // // https://documize.com -import Controller from '@ember/controller'; +import { all } from 'rsvp'; import { inject as service } from '@ember/service'; import NotifierMixin from '../../../mixins/notifier'; +import Controller from '@ember/controller'; export default Controller.extend(NotifierMixin, { documentService: service('document'), @@ -19,6 +20,7 @@ export default Controller.extend(NotifierMixin, { localStorage: service('localStorage'), queryParams: ['category'], category: '', + filteredDocs: null, actions: { onAddSpace(payload) { @@ -38,6 +40,53 @@ export default Controller.extend(NotifierMixin, { onRefresh() { this.get('target._routerMicrolib').refresh(); + }, + + onMoveDocument(documents, targetSpaceId) { + let self = this; + let promises1 = []; + let promises2 = []; + + documents.forEach(function(documentId, index) { + promises1[index] = self.get('documentService').getDocument(documentId); + }); + + all(promises1).then(() => { + promises1.forEach(function(doc, index) { + doc.then((d) => { + d.set('folderId', targetSpaceId); + d.set('selected', false); + promises2[index] = self.get('documentService').save(d); + }); + }); + + all(promises2).then(() => { + self.send('onRefresh'); + }); + }); + }, + + onDeleteDocument(documents) { + let self = this; + let promises = []; + + documents.forEach(function (document, index) { + promises[index] = self.get('documentService').deleteDocument(document); + }); + + all(promises).then(() => { + let documents = this.get('documents'); + documents.forEach(function (document) { + document.set('selected', false); + }); + + this.set('documents', documents); + this.send('onRefresh'); + }); + }, + + 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 8a4cf5ce..e236a2ff 100644 --- a/gui/app/pods/folder/index/template.hbs +++ b/gui/app/pods/folder/index/template.hbs @@ -1,22 +1,53 @@ -{{toolbar/nav-bar}} +{{#layout/top-bar}} +
  • + {{#link-to "folder.index" model.folder.id model.folder.slug class='link selected'}} + {{model.folder.name}} + {{/link-to}} +
  • +{{/layout/top-bar}} + +{{#layout/middle-zone}} + {{#layout/middle-zone-content}} + {{toolbar/for-space + spaces=model.folders + space=model.folder + permissions=model.permissions + templates=model.templates + onRefresh=(action 'onRefresh') + onDeleteSpace=(action 'onDeleteSpace')}} + + {{folder/documents-list + documents=filteredDocs + spaces=model.folders + space=model.folder + templates=model.templates + permissions=model.permissions + onDeleteDocument=(action 'onDeleteDocument') + onMoveDocument=(action 'onMoveDocument')}} + {{/layout/middle-zone-content}} + + {{#layout/middle-zone-sidebar}} + + {{/layout/middle-zone-sidebar}} +{{/layout/middle-zone}} + +{{#layout/bottom-bar}} +{{/layout/bottom-bar}} -{{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')}} diff --git a/gui/app/pods/folders/template.hbs b/gui/app/pods/folders/template.hbs index 44cbd927..129da15b 100644 --- a/gui/app/pods/folders/template.hbs +++ b/gui/app/pods/folders/template.hbs @@ -1,4 +1,4 @@ -{{#layout/top-bar}} +{{#layout/top-bar selectItem="spaces"}} {{/layout/top-bar}} {{#layout/middle-zone}} diff --git a/gui/app/styles/layout/layout-master.scss b/gui/app/styles/layout/layout-master.scss index e0a426aa..0729874e 100644 --- a/gui/app/styles/layout/layout-master.scss +++ b/gui/app/styles/layout/layout-master.scss @@ -23,8 +23,13 @@ footer { margin: auto auto 0 auto; - position: sticky; bottom: 0; + position: -webkit-sticky; + position: -moz-sticky; + position: -ms-sticky; + position: -o-sticky; + position: -webkit-sticky; + position: sticky; } @media (min-width: 720px) { diff --git a/gui/app/styles/view/space.scss b/gui/app/styles/view/space.scss index 137a2096..6d705502 100644 --- a/gui/app/styles/view/space.scss +++ b/gui/app/styles/view/space.scss @@ -1,18 +1,10 @@ .view-space { - > .heading { - height: 10px; - - > .view-heading { - font-size: 1.5rem; - font-weight: bold; - color: $color-dark; - } - } - > .filter-caption { + margin: 10px 0; color: $color-gray; - font-size: 1.0rem; - margin: 0 0 10px 0; + font-size: 1.1rem; + font-weight: 500; + text-align: center; } > .documents { @@ -27,7 +19,6 @@ position: relative; margin: 0 0 30px 0; width: 100%; - // height: 150px; &:hover { > .checkbox { @@ -55,14 +46,6 @@ &:hover { color: $color-gray; - - > .title { - color: $color-link; - } - - > .snippet { - color: $color-link; - } } } diff --git a/gui/app/styles/widget/widget-tabnav.scss b/gui/app/styles/widget/widget-tabnav.scss index fc767c07..00bd9ab1 100644 --- a/gui/app/styles/widget/widget-tabnav.scss +++ b/gui/app/styles/widget/widget-tabnav.scss @@ -11,7 +11,7 @@ background-color: $color-white; color: $color-primary; border: 1px solid $color-border; - font-weight: bold; + font-weight: 500; font-size: 1.1rem; text-align: center; cursor: pointer; @@ -48,6 +48,7 @@ > .selected { background-color: $color-primary-light; + font-weight: 700; } } diff --git a/gui/app/templates/components/folder/category-admin-sidebar.hbs b/gui/app/templates/components/folder/category-admin-sidebar.hbs new file mode 100644 index 00000000..956a8f0d --- /dev/null +++ b/gui/app/templates/components/folder/category-admin-sidebar.hbs @@ -0,0 +1,10 @@ +
    +

    Categories

    +

    Sub-divide spaces into categories which can contain documents with restricted access.

    +
    +
    + {{focus-input id="new-category-name" type='text' class="form-control mousetrap" placeholder="Category name" value=newCategory}} +
    + +
    +
    diff --git a/gui/app/templates/components/folder/category-admin.hbs b/gui/app/templates/components/folder/category-admin.hbs index a055dd67..51728132 100644 --- a/gui/app/templates/components/folder/category-admin.hbs +++ b/gui/app/templates/components/folder/category-admin.hbs @@ -1,111 +1,90 @@ -
    -
    -
    -
    -

    Categories

    -

    Sub-divide spaces into categories which can contain documents with restricted access.

    -
    -
    - {{focus-input id="new-category-name" type='text' class="form-control mousetrap" placeholder="Category name" value=newCategory}} +
    +
    + {{#each category as |cat|}} +
    + {{#if cat.editMode}} + + {{focus-input id=(concat 'edit-category-' cat.id) type="text" value=cat.category class="form-control"}} + + {{else}} +
    +
    {{cat.category}}
    +
    {{cat.documents}} {{if (eq cat.documents 1) 'document' 'documents' }} · {{cat.users}} users/groups
    - - -
    -
    -
    - -
    -
    -
    -
    - {{#each category as |cat|}} -
    - {{#if cat.editMode}} -
    - {{focus-input id=(concat 'edit-category-' cat.id) type="text" value=cat.category class="form-control"}} -
    - {{else}} -
    -
    {{cat.category}}
    -
    {{cat.documents}} {{if (eq cat.documents 1) 'document' 'documents' }} · {{cat.users}} users/groups
    -
    - {{/if}} -
    - {{#if cat.editMode}} - - - {{else}} -
    - security -
    -
    -
    - edit -
    -
    -
    - delete -
    - {{/if}} -
    -
    + {{/if}} +
    + {{#if cat.editMode}} + + {{else}} -
    No categories
    - {{/each}} +
    + security +
    +
    +
    + edit +
    +
    +
    + delete +
    + {{/if}}
    + {{else}} +
    No categories
    + {{/each}} +
    +
    + + - +{{#ui/ui-dialog title="Set Category Access" confirmCaption="Save" buttonType="btn-success" show=showCategoryAccess onAction=(action 'onGrantAccess')}} +

    Select who can view documents within category

    - {{#ui/ui-dialog title="Set Category Access" confirmCaption="Save" buttonType="btn-success" show=showCategoryAccess onAction=(action 'onGrantAccess')}} -

    Select who can view documents within category

    - -
    -
      - {{#each categoryPermissions as |permission|}} -
    • -
      - {{#if (eq permission.who "role")}} +
      +
        + {{#each categoryPermissions as |permission|}} +
      • +
        + {{#if (eq permission.who "role")}} + + people + + {{else}} + {{#if (eq permission.whoId constants.EveryoneUserId)}} - people + language {{else}} - {{#if (eq permission.whoId constants.EveryoneUserId)}} - - language - - {{else}} - - person - - {{/if}} + + person + {{/if}} -  {{permission.name}} - {{#if (eq permission.whoId session.user.id)}} - (you) - {{/if}} -
        - {{#if permission.selected}} - check {{/if}} -
      • - {{/each}} -
      -
      - {{/ui/ui-dialog}} -
      +  {{permission.name}} + {{#if (eq permission.whoId session.user.id)}} + (you) + {{/if}} +
    + {{#if permission.selected}} + check + {{/if}} + + {{/each}} + +
    +{{/ui/ui-dialog}} diff --git a/gui/app/templates/components/folder/space-heading.hbs b/gui/app/templates/components/folder/space-heading.hbs index b0e874b1..71e543c2 100644 --- a/gui/app/templates/components/folder/space-heading.hbs +++ b/gui/app/templates/components/folder/space-heading.hbs @@ -1,28 +1,20 @@ -
    -
    -
    -
    - {{#unless editMode}} -
    -
    -

    - {{space.name}} -

    -
    -
    - {{else}} -
    -
    -
    -
    - {{focus-input id="space-name" type="text" value=spaceName class=(if hasNameError 'form-control is-invalid' 'form-control') placeholder="Space name" autocomplete="off"}} - Press Enter to save or Escape to cancel -
    -
    -
    -
    - {{/unless}} -
    +{{#unless editMode}} +
    +
    +

    + {{space.name}} +

    -
    +{{else}} +
    +
    +
    +
    + {{focus-input id="space-name" type="text" value=spaceName class=(if hasNameError 'form-control is-invalid' 'form-control') placeholder="Space name" autocomplete="off"}} + Press Enter to save or Escape to cancel +
    +
    +
    +
    +{{/unless}} diff --git a/gui/app/templates/components/folder/space-view.hbs b/gui/app/templates/components/folder/space-view.hbs index ea601d1c..132e4e79 100644 --- a/gui/app/templates/components/folder/space-view.hbs +++ b/gui/app/templates/components/folder/space-view.hbs @@ -1,52 +1,35 @@ -{{folder/space-heading space=space permissions=permissions }} - -
    -
    -
    -
    -
    -
    {{documents.length}} documents
    -
      -
    • All ({{documents.length}})
    • - {{#if hasCategories}} - {{#if (gt rootDocCount 0)}} -
    • Uncategorized ({{rootDocCount}})
    • - {{/if}} - {{/if}} -
    -
    -
    -
    -
    -
    - {{categories.length}} categories - {{#if hasCategories}} - {{#if spaceSettings}} -   {{#link-to 'folder.category' space.id space.slug class="admin-link margin-top-5"}}{{categoryLinkName}} →{{/link-to}} - {{/if}} - {{/if}} -
    -
      - {{#each categories as |cat index|}} -
    • {{cat.category}} ({{cat.docCount}})
    • - {{/each}} -
    - - {{#unless hasCategories}} - {{#if spaceSettings}} - {{#link-to 'folder.category' space.id space.slug class="admin-link margin-top-5"}}{{categoryLinkName}} →{{/link-to}} - {{/if}} - {{/unless}} -
    -
    -
    -
    -
    -
    - {{folder/documents-list documents=filteredDocs spaces=spaces space=space - templates=templates permissions=permissions - onDeleteDocument=(action 'onDeleteDocument') onMoveDocument=(action 'onMoveDocument')}} -
    -
    +
    +
    {{documents.length}} documents
    +
      +
    • All ({{documents.length}})
    • + {{#if hasCategories}} + {{#if (gt rootDocCount 0)}} +
    • Uncategorized ({{rootDocCount}})
    • + {{/if}} + {{/if}} +
    +
    +
    + {{categories.length}} + {{#if (gt categories.length 1) }} + categories + {{else if (eq categories.length 0) }} + categories + {{else}} + category + {{/if}} +
    +
      + {{#each categories as |cat index|}} +
    • {{cat.category}} ({{cat.docCount}})
    • + {{/each}} +
    + + {{#if spaceSettings}} +
    + {{#link-to 'folder.category' space.id space.slug class="btn btn-secondary font-weight-bold"}}{{categoryLinkName}}{{/link-to}} +
    + {{/if}} +
    \ No newline at end of file diff --git a/gui/app/templates/components/toolbar/for-space.hbs b/gui/app/templates/components/toolbar/for-space.hbs index df44e1b7..14e138c2 100644 --- a/gui/app/templates/components/toolbar/for-space.hbs +++ b/gui/app/templates/components/toolbar/for-space.hbs @@ -1,11 +1,101 @@ -{{#toolbar/t-toolbar}} +
    - {{#toolbar/t-links selectItem="spaces"}} - {{/toolbar/t-links}} +
    + {{#if permissions.documentAdd}} +
    + + +
    + + + + {{/if}} +
    - {{#toolbar/t-actions}} +
    {{#if spaceSettings}} -
    +
    security
    @@ -77,34 +167,6 @@
    {{/if}} - {{#if permissions.spaceOwner}} -
    - delete -
    -
    - - {{/if}} - {{#if (or permissions.spaceOwner permissions.spaceManage)}}
    settings @@ -158,98 +220,35 @@
    {{/if}} - {{#if permissions.documentAdd}} -
    - - + {{#if permissions.spaceOwner}} +
    + delete
    - {{folder/permission-admin folders=spaces folder=space onRefresh=onRefresh}}