From 8baad7e2f078d05d1ba2c2a3ad6001eb17c8b163 Mon Sep 17 00:00:00 2001 From: HarveyKandola Date: Wed, 5 Jun 2019 11:09:24 +0100 Subject: [PATCH] Enable doc section expand/collapse Closes #170 --- gui/app/components/document/document-page.js | 8 +- gui/app/components/document/view-content.js | 1 + .../layout/grid/sidebar-custom-action.js | 17 ++++ gui/app/constants/constants.js | 2 + gui/app/pods/document/index/controller.js | 31 ++++++ gui/app/pods/document/index/route.js | 4 + gui/app/pods/document/index/template.hbs | 7 ++ gui/app/services/local-storage.js | 21 +++- gui/app/styles/core/icon-ui.scss | 8 ++ gui/app/styles/core/layout/sidebar.scss | 15 +++ .../styles/core/view/document/section.scss | 8 ++ .../components/document/document-page.hbs | 6 +- .../components/document/page-heading.hbs | 8 +- .../components/document/view-content.hbs | 4 +- .../components/folder/documents-list.hbs | 96 +++++++++--------- .../layout/grid/sidebar-custom-action.hbs | 1 + .../components/search/search-results.hbs | 88 ++++++++-------- gui/public/assets/font/dmzui.eot | Bin 17312 -> 17672 bytes gui/public/assets/font/dmzui.svg | 6 ++ gui/public/assets/font/dmzui.ttf | Bin 17156 -> 17516 bytes gui/public/assets/font/dmzui.woff | Bin 8968 -> 9176 bytes gui/public/assets/font/dmzui.woff2 | Bin 7400 -> 7556 bytes 22 files changed, 229 insertions(+), 102 deletions(-) create mode 100644 gui/app/components/layout/grid/sidebar-custom-action.js create mode 100644 gui/app/templates/components/layout/grid/sidebar-custom-action.hbs diff --git a/gui/app/components/document/document-page.js b/gui/app/components/document/document-page.js index f8d65d72..fee95178 100644 --- a/gui/app/components/document/document-page.js +++ b/gui/app/components/document/document-page.js @@ -18,17 +18,23 @@ export default Component.extend({ editMode: false, editPage: null, editMeta: null, + expanded: true, didReceiveAttrs() { this._super(...arguments); if (this.get('isDestroyed') || this.get('isDestroying')) return; + let pageId = this.get('page.id'); + if (this.get('session.authenticated')) { this.workflow(); } - if (this.get('toEdit') === this.get('page.id') && this.get('permissions.documentEdit')) this.send('onEdit'); + if (this.get('toEdit') === pageId && this.get('permissions.documentEdit')) this.send('onEdit'); + + // Work out if this section is expanded by default (state stored in browser local storage). + this.set('expanded', !_.includes(this.get('expandState'), pageId)); }, workflow() { diff --git a/gui/app/components/document/view-content.js b/gui/app/components/document/view-content.js index 00d3d49c..bf943120 100644 --- a/gui/app/components/document/view-content.js +++ b/gui/app/components/document/view-content.js @@ -38,6 +38,7 @@ export default Component.extend(Notifier, { didReceiveAttrs() { this._super(...arguments); + // Show/allow liking if space allows it and document is published. this.set('showLikes', this.get('folder.allowLikes') && this.get('document.isLive')); }, diff --git a/gui/app/components/layout/grid/sidebar-custom-action.js b/gui/app/components/layout/grid/sidebar-custom-action.js new file mode 100644 index 00000000..1d3fcca1 --- /dev/null +++ b/gui/app/components/layout/grid/sidebar-custom-action.js @@ -0,0 +1,17 @@ +// 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 Component from '@ember/component'; + +export default Component.extend({ + tagName: 'div', + classNames: ['custom-action'], +}); diff --git a/gui/app/constants/constants.js b/gui/app/constants/constants.js index 0695241d..14b09bf7 100644 --- a/gui/app/constants/constants.js +++ b/gui/app/constants/constants.js @@ -228,6 +228,7 @@ let constants = EmberObject.extend({ Delete: 'dicon-bin', Edit: 'dicon-pen-2', Email: 'dicon-email', + Expand: 'dicon-enlarge', Export: 'dicon-data-upload', Export2: 'dicon-upload', Filter: 'dicon-sort-tool', @@ -254,6 +255,7 @@ let constants = EmberObject.extend({ Send: 'dicon-send', Settings: 'dicon-settings-gear', Share: 'dicon-network-connection', + Sort: 'dicon-alpha-order', Split: 'dicon-split-37', Tag: 'dicon-delete-key', Tick: 'dicon-check', diff --git a/gui/app/pods/document/index/controller.js b/gui/app/pods/document/index/controller.js index f526c749..4777c3f9 100644 --- a/gui/app/pods/document/index/controller.js +++ b/gui/app/pods/document/index/controller.js @@ -19,6 +19,7 @@ export default Controller.extend(Notifier, { templateService: service('template'), sectionService: service('section'), linkService: service('link'), + localStore: service('local-storage'), appMeta: service(), router: service(), sidebarTab: 'toc', @@ -263,6 +264,36 @@ export default Controller.extend(Notifier, { }); }); }); + }, + + // Expand all if nothing is expanded at the moment. + // Collapse all if something is expanded at the moment. + onExpandAll() { + let expandState = this.get('localStore').getDocSectionHide(this.get('document.id')); + + if (expandState.length === 0) { + let pages = this.get('pages'); + pages.forEach((item) => { + expandState.push(item.get('page.id')); + }) + } else { + expandState = []; + } + + this.get('localStore').setDocSectionHide(this.get('document.id'), expandState); + this.set('expandState', expandState); + }, + + onExpand(pageId, show) { + let expandState = this.get('localStore').getDocSectionHide(this.get('document.id')); + + if (show) { + expandState = _.without(expandState, pageId) + } else { + expandState.push(pageId); + } + + this.get('localStore').setDocSectionHide(this.get('document.id'), expandState); } } }); diff --git a/gui/app/pods/document/index/route.js b/gui/app/pods/document/index/route.js index 4f9f10ce..51d46731 100644 --- a/gui/app/pods/document/index/route.js +++ b/gui/app/pods/document/index/route.js @@ -19,6 +19,7 @@ export default Route.extend(AuthenticatedRouteMixin, { linkService: service('link'), folderService: service('folder'), userService: service('user'), + localStore: service('local-storage'), contributionStatus: '', approvalStatus: '', @@ -69,6 +70,9 @@ export default Route.extend(AuthenticatedRouteMixin, { controller.set('blocks', model.blocks); controller.set('versions', model.versions); controller.set('attachments', model.attachments); + + // For persistence of section expand/collapse state. + controller.set('expandState', this.get('localStore').getDocSectionHide(model.document.id)); }, activate: function () { diff --git a/gui/app/pods/document/index/template.hbs b/gui/app/pods/document/index/template.hbs index 46fc1255..5a00c085 100644 --- a/gui/app/pods/document/index/template.hbs +++ b/gui/app/pods/document/index/template.hbs @@ -25,6 +25,11 @@ {{document/view-content + expandState=expandState roles=roles links=links pages=pages @@ -84,6 +90,7 @@ attachments=attachments currentPageId=currentPageId refresh=(action "refresh") + onExpand=(action "onExpand") onSavePage=(action "onSavePage") onCopyPage=(action "onCopyPage") onMovePage=(action "onMovePage") diff --git a/gui/app/services/local-storage.js b/gui/app/services/local-storage.js index 15f6dfdf..70b07736 100644 --- a/gui/app/services/local-storage.js +++ b/gui/app/services/local-storage.js @@ -26,5 +26,24 @@ export default Service.extend({ clearAll() { localStorage.clear(); - } + }, + + getDocSectionHide(docId) { + let state = localStorage[`doc-hide-${docId}`]; + if (_.isUndefined(state) || _.isEmpty(state)) { + return []; + } + + return _.split(state, '|'); + }, + + setDocSectionHide(docId, state) { + let key = `doc-hide-${docId}`; + + if (state.length === 0) { + delete localStorage[key]; + } else { + localStorage[key] = _.join(state, '|'); + } + }, }); diff --git a/gui/app/styles/core/icon-ui.scss b/gui/app/styles/core/icon-ui.scss index d82178ff..1aff655a 100644 --- a/gui/app/styles/core/icon-ui.scss +++ b/gui/app/styles/core/icon-ui.scss @@ -438,3 +438,11 @@ icons .dicon-move-layer-up::before { content: "\ea5d"; } + +.dicon-alpha-order::before { + content: "\ea5e"; +} + +.dicon-enlarge::before { + content: "\ea5f"; +} diff --git a/gui/app/styles/core/layout/sidebar.scss b/gui/app/styles/core/layout/sidebar.scss index f461e937..af5095c6 100644 --- a/gui/app/styles/core/layout/sidebar.scss +++ b/gui/app/styles/core/layout/sidebar.scss @@ -20,6 +20,21 @@ } } + // Allows for icon to be placed top right corner of sidebar zone. + // Expects icon to be placed in the zone. + > .custom-action { + position: absolute; + top: 10px; + right: 10px; + cursor: pointer; + color: map-get($gray-shades, 500); + font-size: 1rem; + + &:hover { + color: map-get($gray-shades, 800); + } + } + > .section { margin: 0; padding: 0 7px; diff --git a/gui/app/styles/core/view/document/section.scss b/gui/app/styles/core/view/document/section.scss index cd8d66fb..8b76e643 100644 --- a/gui/app/styles/core/view/document/section.scss +++ b/gui/app/styles/core/view/document/section.scss @@ -55,6 +55,14 @@ color: map-get($yellow-shades, 700); } } + + > i.expand { + color: map-get($green-shades, 500); + + &:hover { + color: map-get($green-shades, 700); + } + } } } diff --git a/gui/app/templates/components/document/document-page.hbs b/gui/app/templates/components/document/document-page.hbs index 5c7db2af..0195af8a 100644 --- a/gui/app/templates/components/document/document-page.hbs +++ b/gui/app/templates/components/document/document-page.hbs @@ -12,6 +12,7 @@ {{else}} {{document/page-heading + expanded=expanded page=page meta=meta pages=pages @@ -24,6 +25,7 @@ permissions=permissions onEdit=(action "onEdit") refresh=(action refresh) + onExpand=(action onExpand) onCopyPage=(action "onCopyPage") onMovePage=(action "onMovePage") onDeletePage=(action "onDeletePage") @@ -32,12 +34,14 @@ onPageSequenceChange=(action onPageSequenceChange) onShowSectionWizard=(action onShowSectionWizard)}} + {{#if expanded}}
{{section/base-renderer page=page}}
{{/if}} + {{/if}} - {{document/section-attachment uploadLabel="Upload Attachments" + {{document/section-attachment uploadLabel="Upload Attachments" editMode=editMode page=page document=document files=attachments onAttachmentUpload=(action onAttachmentUpload) onAttachmentDelete=(action onAttachmentDelete)}} diff --git a/gui/app/templates/components/document/page-heading.hbs b/gui/app/templates/components/document/page-heading.hbs index c925c052..4d59f4e9 100644 --- a/gui/app/templates/components/document/page-heading.hbs +++ b/gui/app/templates/components/document/page-heading.hbs @@ -8,10 +8,14 @@
- {{#unless (eq document.protection constants.ProtectionType.Lock)}}
+ + {{#attach-tooltip showDelay=1000}}Show/hide{{/attach-tooltip}} + + {{#unless (eq document.protection constants.ProtectionType.Lock)}} {{#if canEdit}} +
{{#attach-tooltip showDelay=1000}}Insert section above{{/attach-tooltip}} @@ -57,9 +61,9 @@ {{/attach-popover}} {{/if}} + {{/unless}}
- {{/unless}}
diff --git a/gui/app/templates/components/document/view-content.hbs b/gui/app/templates/components/document/view-content.hbs index 118360b6..1a53c3fb 100644 --- a/gui/app/templates/components/document/view-content.hbs +++ b/gui/app/templates/components/document/view-content.hbs @@ -1,7 +1,8 @@ {{#if hasPages}} {{#each pages key="id" as |item|}} - + {{document/document-page + expandState=expandState roles=roles pages=pages folder=folder @@ -14,6 +15,7 @@ permissions=permissions attachments=attachments refresh=(action refresh) + onExpand=(action onExpand) onAttachmentUpload=(action onAttachmentUpload) onAttachmentDelete=(action onAttachmentDelete) onSavePage=(action "onSavePage") diff --git a/gui/app/templates/components/folder/documents-list.hbs b/gui/app/templates/components/folder/documents-list.hbs index 8202d26c..b5d6e52e 100644 --- a/gui/app/templates/components/folder/documents-list.hbs +++ b/gui/app/templates/components/folder/documents-list.hbs @@ -4,61 +4,57 @@ {{#ui/ui-toolbar dark=false light=false raised=false large=false bordered=false}} {{ui/ui-toolbar-icon icon=constants.Icon.Blocks color=constants.Color.Gray tooltip="Complete" selected=(eq viewDensity "1") onClick=(action "onSwitchView" "1")}} + {{ui/ui-toolbar-icon icon=constants.Icon.All color=constants.Color.Gray tooltip="Comfort" selected=(eq viewDensity "2") onClick=(action "onSwitchView" "2")}} + {{ui/ui-toolbar-label label="—" color=constants.Color.Gray tooltip="Compact" selected=(eq viewDensity "3") onClick=(action "onSwitchView" "3")}} + + {{#ui/ui-toolbar-icon icon=constants.Icon.Sort color=constants.Color.Gray tooltip="Sort"}} + {{#attach-popover class="ember-attacher-popper" hideOn="click" showOn="click" isShown=false placement="bottom-end" as |attacher|}} + +
+ + +
+
    +
  • +
    Name
    +
  • +
  • +
    Created date
    +
  • +
  • +
    Last updated
    +
  • +
+
+ + + +
+
    +
  • +
    Ascending
    +
  • +
  • +
    Descending
    +
  • +
+
+ + + + {{ui/ui-button + light=true + color=constants.Color.Yellow + label=constants.Label.Sort + onClick=(action "onSortBy" attacher)}} +
+ {{/attach-popover}} + {{/ui/ui-toolbar-icon}} {{/ui/ui-toolbar}} - - {{#ui/ui-button - light=false - outline=true - uppercase=false - color=constants.Color.Gray - label=constants.Label.Sort}} - - {{#attach-popover class="ember-attacher-popper" hideOn="click" showOn="click" isShown=false placement="bottom-end" as |attacher|}} - -
- - -
-
    -
  • -
    Name
    -
  • -
  • -
    Created date
    -
  • -
  • -
    Last updated
    -
  • -
-
- - - -
-
    -
  • -
    Ascending
    -
  • -
  • -
    Descending
    -
  • -
-
- - - - {{ui/ui-button - light=true - color=constants.Color.Yellow - label=constants.Label.Sort - onClick=(action "onSortBy" attacher)}} -
- {{/attach-popover}} - {{/ui/ui-button}} diff --git a/gui/app/templates/components/layout/grid/sidebar-custom-action.hbs b/gui/app/templates/components/layout/grid/sidebar-custom-action.hbs new file mode 100644 index 00000000..889d9eea --- /dev/null +++ b/gui/app/templates/components/layout/grid/sidebar-custom-action.hbs @@ -0,0 +1 @@ +{{yield}} diff --git a/gui/app/templates/components/search/search-results.hbs b/gui/app/templates/components/search/search-results.hbs index dc010a96..2d6d2505 100644 --- a/gui/app/templates/components/search/search-results.hbs +++ b/gui/app/templates/components/search/search-results.hbs @@ -2,55 +2,51 @@ {{#if documents}}
- {{#ui/ui-button - light=false - outline=true - uppercase=false - color=constants.Color.Gray - label=constants.Label.Sort}} + {{#ui/ui-toolbar dark=false light=false raised=false large=false bordered=false}} + {{#ui/ui-toolbar-icon icon=constants.Icon.Sort color=constants.Color.Gray tooltip="Sort"}} + {{#attach-popover class="ember-attacher-popper" hideOn="click" showOn="click" isShown=false placement="bottom-end" as |attacher|}} + +
+ - {{#attach-popover class="ember-attacher-popper" hideOn="click" showOn="click" isShown=false placement="bottom-end" as |attacher|}} - -
- +
+
    +
  • +
    Name
    +
  • +
  • +
    Created date
    +
  • +
  • +
    Last updated
    +
  • +
+
-
-
    -
  • -
    Name
    -
  • -
  • -
    Created date
    -
  • -
  • -
    Last updated
    -
  • -
+ + +
+
    +
  • +
    Ascending
    +
  • +
  • +
    Descending
    +
  • +
+
+ + + + {{ui/ui-button + light=true + color=constants.Color.Yellow + label=constants.Label.Sort + onClick=(action "onSortBy" attacher)}}
- - - -
-
    -
  • -
    Ascending
    -
  • -
  • -
    Descending
    -
  • -
-
- - - - {{ui/ui-button - light=true - color=constants.Color.Yellow - label=constants.Label.Sort - onClick=(action "onSortBy" attacher)}} -
- {{/attach-popover}} - {{/ui/ui-button}} + {{/attach-popover}} + {{/ui/ui-toolbar-icon}} + {{/ui/ui-toolbar}}
diff --git a/gui/public/assets/font/dmzui.eot b/gui/public/assets/font/dmzui.eot index 262d10014f5c95360f07fde002e4c9b35ddf56b5..20de93c48e7e0c744b654af2404ceeadea5c5ed1 100644 GIT binary patch delta 682 zcmXw0Ur1A76hG(t?%&P4Q+KDEsWo+*S}^YZ_!4fx(z&QdsfQXDx7@?#F6M(3w1=P~ zD$v_Q4?T$V7(q<}qbKRH7hetU1K;vJy#D|tBV! znP8|%%f`MF`OT_dpI4t=tOH~}(Ghp-OV~d+2}okXp_SV#YG;0c*C7D5d(M75iuN)F zangQ^udvvxvN$er#eT*+dJMN4@Dy-2bD{@;86Y6oA9x=Y?Js;=o`5_pk?alOm%S&b zT8lH8TaG8oH+RGW4}87~-~c8l7XJhCc352!LeE1x%~kbLvQ2P1e$tIW7y<(__HWFBhv`(bKit`iBRHB)24p>9=;Tt-(NzCyHYAb-b+6#ngHAfcxO5xaJ5u5ZmI+gNA|F-HnLlL7g@Heo0+W z@O+Dgg=2IfbFW;3eel6afYE3qtfAx&7#Zvg80n;j#7O==beME95`Gis5|1-c;={vS z5?fu*j>wmB=Hwz986n99*OS`iXp^s*8*5|qK~ves0#0I~d5~RWonEtQRm{`%xl(yf NF3(oYxtTJl{{hq2hDHDY delta 357 zcmeC^VqDP9$hN?lfq}(&BAXdY#x{jL6CLX7qZt?&dl(oP!jf|n3(V%paWOD31G%hi z={c2Yl5gdwF)(mSFff?(WTYmh2)Qza03{y)u~`OCfQgCG1<2k5#3~uNB^7S$|33oF zdjiBVIr+(nE3a=m!N9=L0hFJRn^;l6n8a`wC}LQSkv%zrQCZcUff1+}i1#RL%ZTT<`O3fz5@2AsDfDm+jGnxJQIgSp z@-D`WjIo<@m<$*vFJTt8)dOo~VAKG52&6{`NCSPxq{qO*@CV43U=RR`aJ*u9#rBHh z70)Y$SEjG5UOB#UeiimAcJdeIo0~7P@Gx>lfNTK*x6RL3y_hF^a8B5KhqKpY^F(_Q SCZMIu9Q!s~IPGKt1sVXc)Lr2K diff --git a/gui/public/assets/font/dmzui.svg b/gui/public/assets/font/dmzui.svg index 6a2e7171..8764f669 100644 --- a/gui/public/assets/font/dmzui.svg +++ b/gui/public/assets/font/dmzui.svg @@ -217,6 +217,12 @@ + + diff --git a/gui/public/assets/font/dmzui.ttf b/gui/public/assets/font/dmzui.ttf index 778514ff00ec12d610b877c35be42e505482b0bd..224db835ae0aa2e054d60293b79e7af7cdd057cb 100644 GIT binary patch delta 699 zcmXw#&ubG=5XWcU?%N-UcGH?olT=epYLYe;U!{8Ja`a6BSNJIDgFWWR4ND-J&1Tw6oi)4*^~}^XXbt0_q{i~JB#@9E@0Jtz)H=CPEpbQ`=0DNh#cKzzW;*EI#H3yJ-Q>~cgp^K}lN~uUD6?)CaIfYMmicZ~Ux8qEZZsE`Y zRdGZeE)1)xOGZtTWijmYCW@)VbWd21ikwS+T~&3z#JLz<7nlPL194;o5i3V^)^WQf zwXNWpeHs?`(|o(XxD1=%f+GN#NI0mWQ47`Br`!0|Tc71A|FV zMrvY;kSkLNQ1Sr~n`Hn6n3xz{fb2a$tdfyiQsKt_|0B@6CqOKdlb@Wp^7^(D3=A9{ zK=}!|i4_HmNep*^azOJK6!H>tQ|%?CHghmA*e(GIek#Z>E_w3LFNlG`eg@DH*%S9D z+q*L`0@VWX9{E`Z;`wd9GH`E(0Z5tqWI4u- zjIo<9Fd8sU=3o|<)dLGNFlqq(2vVQ}q=6o0(qmv@_%qppS)MU=as=~Dpd{O5N0wic z16Vluc|fKyM}SBmaNF#~>cu>H4abDd4xGIvo4?wLFfqDM=5p-YJjZb-6Da5a(N|G6 diff --git a/gui/public/assets/font/dmzui.woff b/gui/public/assets/font/dmzui.woff index b31d3de8667d645c99536ecc9ed2018241aaff62..4a9690925a8f5241203ca46150d05f0e60c5e026 100644 GIT binary patch delta 8611 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 delta 8443 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 diff --git a/gui/public/assets/font/dmzui.woff2 b/gui/public/assets/font/dmzui.woff2 index da545caf5ffa7816c50c2323d2797297b29dbd93..abfb58fa01dcfd289245863f6d9b48afb5a6f73e 100644 GIT binary patch literal 7556 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