1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-21 14:19:43 +02:00

document category picker

This commit is contained in:
Harvey Kandola 2017-12-04 17:25:33 +00:00
parent 60fb4e5008
commit 8415f11303
9 changed files with 203 additions and 120 deletions

View file

@ -10,19 +10,17 @@
// https://documize.com // https://documize.com
import { computed } from '@ember/object'; import { computed } from '@ember/object';
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import Component from '@ember/component'; import Component from '@ember/component';
import { A } from "@ember/array" import { A } from "@ember/array"
import TooltipMixin from '../../mixins/tooltip';
import NotifierMixin from '../../mixins/notifier';
export default Component.extend(TooltipMixin, NotifierMixin, { export default Component.extend({
documentService: service('document'), documentService: service('document'),
categoryService: service('category'), categoryService: service('category'),
sessionService: service('session'), sessionService: service('session'),
newCategory: '', newCategory: '',
categories: A([]), categories: A([]),
showCategoryModal: false,
hasCategories: computed('categories', function() { hasCategories: computed('categories', function() {
return this.get('categories').length > 0; return this.get('categories').length > 0;
}), }),
@ -53,10 +51,26 @@ export default Component.extend(TooltipMixin, NotifierMixin, {
}); });
}); });
}); });
let tagz = [];
if (!_.isUndefined(this.get('document.tags')) && this.get('document.tags').length > 1) {
let tags = this.get('document.tags').split('#');
_.each(tags, function(tag) {
if (tag.length > 0) {
tagz.pushObject(tag);
}
});
}
this.set('tagz', A(tagz));
}, },
actions: { actions: {
onSave() { onShowCategoryModal() {
this.set('showCategoryModal', true);
},
onSaveCategory() {
let docId = this.get('document.id'); let docId = this.get('document.id');
let folderId = this.get('folder.id'); let folderId = this.get('folder.id');
let link = this.get('categories').filterBy('selected', true); let link = this.get('categories').filterBy('selected', true);
@ -86,6 +100,8 @@ export default Component.extend(TooltipMixin, NotifierMixin, {
toUnlink.pushObject(t); toUnlink.pushObject(t);
}); });
this.set('showCategoryModal', false);
this.get('categoryService').setCategoryMembership(toUnlink, 'unlink').then(() => { this.get('categoryService').setCategoryMembership(toUnlink, 'unlink').then(() => {
this.get('categoryService').setCategoryMembership(toLink, 'link').then(() => { this.get('categoryService').setCategoryMembership(toLink, 'link').then(() => {
this.load(); this.load();

View file

@ -9,35 +9,22 @@
{{/toolbar/t-toolbar}} {{/toolbar/t-toolbar}}
{{document/document-heading document=model.document permissions=model.permissions onSaveDocument=(action 'onSaveDocument')}} {{document/document-heading document=model.document permissions=model.permissions onSaveDocument=(action 'onSaveDocument')}}
{{document/document-meta document=model.document folder=model.folder folders=model.folders permissions=model.permissions}}
{{document/tag-editor documentTags=model.document.tags permissions=model.permissions onChange=(action 'onTagChange')}}
<div id="zone-document-content" class="zone-document-content"> <div id="zone-document-content" class="zone-document-content">
<div class="document-header-zone"> <div class="document-header-zone">
<div class="pull-left"> {{document/document-toolbar
{{document/space-category document=model.document folder=model.folder folders=model.folders permissions=model.permissions}} document=model.document folder=model.folder folders=model.folders permissions=model.permissions
</div> onDocumentDelete=(action 'onDocumentDelete') onSaveTemplate=(action 'onSaveTemplate')
onPageSequenceChange=(action 'onPageSequenceChange') onPageLevelChange=(action 'onPageLevelChange')
<div class="pull-right"> onGotoPage=(action 'onGotoPage')}}
{{document/document-toolbar
document=model.document folder=model.folder folders=model.folders permissions=model.permissions
onDocumentDelete=(action 'onDocumentDelete') onSaveTemplate=(action 'onSaveTemplate')
onPageSequenceChange=(action 'onPageSequenceChange') onPageLevelChange=(action 'onPageLevelChange')
onGotoPage=(action 'onGotoPage')}}
</div>
<div class="clearfix"/>
{{document/tag-editor documentTags=model.document.tags permissions=model.permissions onChange=(action 'onTagChange')}}
</div> </div>
{{document/document-sidebar tab=tab
{{document/document-sidebar tab=tab document=model.document folder=model.folder pages=model.pages page=model.page permissions=model.permissions
document=model.document folder=model.folder pages=model.pages page=model.page permissions=model.permissions onPageSequenceChange=(action 'onPageSequenceChange') onPageLevelChange=(action 'onPageLevelChange')
onPageSequenceChange=(action 'onPageSequenceChange') onPageLevelChange=(action 'onPageLevelChange') onGotoPage=(action 'onGotoPage')}}
onGotoPage=(action 'onGotoPage')}}
{{#if model.document.template}}
<div class="document-template-header">Template</div>
{{/if}}
{{document/document-view {{document/document-view
document=model.document links=model.links pages=model.pages document=model.document links=model.links pages=model.pages

View file

@ -23,18 +23,34 @@
> .document-customfields { > .document-customfields {
margin-bottom: 4rem; margin-bottom: 4rem;
.heading { .row {
font-size: 1.1rem; padding: 5px 0;
font-weight: bold; margin-bottom: 10px;
color: $color-gray;
text-align: left;
}
.value { &:hover {
font-size: 1.1rem; .action-button {
font-weight: normal; visibility: visible;
color: $color-black; }
text-align: left; }
.heading {
font-size: 1.1rem;
font-weight: bold;
color: $color-gray;
text-align: left;
}
.action-button {
visibility: hidden;
margin-left: 15px;
}
.value {
font-size: 1.1rem;
font-weight: normal;
color: $color-black;
text-align: left;
}
} }
} }
} }

View file

@ -354,9 +354,3 @@
} }
} }
} }
.document-template-header {
color: $color-goldy;
font-size: 1.5em;
margin-bottom: 20px;
}

View file

@ -1,7 +1,12 @@
{{#unless editMode}} {{#unless editMode}}
<div class="view-document"> <div class="view-document">
<div class="document-heading {{if permissions.documentEdit 'cursor-pointer'}}" onclick={{if permissions.documentEdit (action 'toggleEdit')}}> <div class="document-heading {{if permissions.documentEdit 'cursor-pointer'}}" onclick={{if permissions.documentEdit (action 'toggleEdit')}}>
<h1 class="doc-title">{{document.name}}</h1> <h1 class="doc-title">
{{#if document.template}}
<span class="bg-warning p-1 pr-2 pl-2">Template</span>&nbsp;&nbsp;
{{/if}}
{{document.name}}
</h1>
<div class="doc-excerpt">{{document.excerpt}}</div> <div class="doc-excerpt">{{document.excerpt}}</div>
</div> </div>
</div> </div>

View file

@ -0,0 +1,48 @@
<div class="view-document">
<div class="document-customfields">
<div class="row">
<div class="col-2 heading">Categories
{{#if canSelectCategory}}
<div class="action-button button-icon-green button-icon-small align-middle" {{action 'onShowCategoryModal'}}>
<i class="material-icons align-middle">edit</i>
</div>
{{/if}}
</div>
<div class="col-10 value">
{{#each selectedCategories as |cat|}}
{{#link-to 'folder' folder.id folder.slug (query-params category=cat.id)}}
{{cat.category}}
{{/link-to}}
&nbsp;
{{else}}
{{#if canAddCategory}}
{{#if canSelectCategory}}
<a href="#" {{action 'onShowCategoryModal'}}>&lt;select&gt;</a>
{{else}}
{{#link-to 'folder.category' folder.id folder.slug class='non-printable'}}Manage{{/link-to}}
{{/if}}
{{/if}}
{{/each}}
</div>
</div>
<div class="row">
<div class="col-2 heading">Tags</div>
<div class="col-10 value">
{{#each tagz as |t index|}}
<a href="/search?tag={{t}}">{{concat '#' t}}</a>&nbsp;&nbsp;
{{/each}}
</div>
</div>
</div>
</div>
{{#if permissions.documentEdit}}
{{#ui/ui-dialog title="Set Document Cateogories" confirmCaption="Select" buttonType="btn-outline-success" show=showCategoryModal onAction=(action 'onSaveCategory')}}
<p>Select who can view documents within category</p>
{{ui/ui-list-picker items=categories nameField='category' singleSelect=false}}
{{/ui/ui-dialog}}
{{/if}}

View file

@ -1,37 +0,0 @@
<div class="view-document">
<div class="document-customfields">
<div class="row">
<div class="col-2 heading">
Categories
</div>
<div class="col-10 value">
{{#each selectedCategories as |cat|}}
{{cat.category}}{{#unless cat.lastObject}}, {{/unless}}
{{/each}}
</div>
</div>
</div>
</div>
{{#if canAddCategory}}
{{#unless canSelectCategory}}
{{#link-to 'folder.category' folder.id folder.slug class='non-printable'}}Manage{{/link-to}}
{{/unless}}
{{else}}
<p>&nbsp;</p>
{{/if}}
{{#if canSelectCategory}}
<div class="regular-button button-white" id="document-category-button">
<i class="material-icons">add</i>
</div>
{{#dropdown-dialog target="document-category-button" position="bottom right" button="set" color="flat-green" onAction=(action 'onSave')}}
<p class="heading">Set document categories</p>
<div class="document-category-dialog">
{{ui/ui-list-picker items=categories nameField='category'}}
{{#if canAddCategory}}
{{#link-to 'folder.category' folder.id folder.slug}}Manage{{/link-to}}
{{/if}}
</div>
{{/dropdown-dialog}}
{{/if}}

View file

@ -5,48 +5,49 @@
"private": true, "private": true,
"repository": "", "repository": "",
"directories": { "directories": {
"doc": "doc", "doc": "doc",
"test": "tests" "test": "tests"
}, },
"scripts": { "scripts": {
"build": "ember build", "build": "ember build",
"start": "ember server", "start": "ember server",
"test": "ember test" "test": "ember test"
}, },
"engines": { "engines": {
"node": "^4.5 || 6.* || >= 7.*" "node": "^4.5 || 6.* || >= 7.*"
}, },
"author": "Documize Inc.", "author": "Documize Inc.",
"license": "AGPL", "license": "AGPL",
"devDependencies": { "devDependencies": {
"broccoli-asset-rev": "^2.4.5", "broccoli-asset-rev": "^2.4.5",
"ember-ajax": "^3.0.0", "ember-ajax": "^3.0.0",
"ember-cli": "^2.16.2", "ember-cli": "^2.16.2",
"ember-cli-app-version": "^3.0.0", "ember-cli-app-version": "^3.0.0",
"ember-cli-babel": "^6.3.0", "ember-cli-babel": "^6.3.0",
"ember-cli-dependency-checker": "^2.0.0", "ember-cli-dependency-checker": "^2.0.0",
"ember-cli-eslint": "^4.0.0", "ember-cli-eslint": "^4.0.0",
"ember-cli-htmlbars": "^2.0.1", "ember-cli-htmlbars": "^2.0.1",
"ember-cli-htmlbars-inline-precompile": "^1.0.0", "ember-cli-htmlbars-inline-precompile": "^1.0.0",
"ember-cli-inject-live-reload": "^1.4.1", "ember-cli-inject-live-reload": "^1.4.1",
"ember-cli-mirage": "^0.2.0", "ember-cli-mirage": "^0.2.0",
"ember-cli-qunit": "^4.0.0", "ember-cli-qunit": "^4.0.0",
"ember-cli-sass": "5.3.1", "ember-cli-sass": "5.3.1",
"ember-cli-shims": "^1.1.0", "ember-cli-shims": "^1.1.0",
"ember-cli-sri": "^2.1.0", "ember-cli-sri": "^2.1.0",
"ember-cli-test-loader": "^1.1.0", "ember-cli-test-loader": "^1.1.0",
"ember-cli-uglify": "^1.2.0", "ember-cli-uglify": "^1.2.0",
"ember-data": "2.16.3", "ember-concurrency": "^0.8.12",
"ember-export-application-global": "^2.0.0", "ember-data": "2.16.3",
"ember-load-initializers": "^1.0.0", "ember-export-application-global": "^2.0.0",
"ember-resolver": "^4.0.0", "ember-load-initializers": "^1.0.0",
"ember-simple-auth": "^1.4.0", "ember-resolver": "^4.0.0",
"ember-source": "^2.16.2", "ember-simple-auth": "^1.4.0",
"ember-truth-helpers": "^1.3.0", "ember-source": "^2.16.2",
"loader.js": "^4.2.3" "ember-truth-helpers": "^1.3.0",
"loader.js": "^4.2.3"
}, },
"dependencies": { "dependencies": {
"bootstrap": "^4.0.0-beta.2", "bootstrap": "^4.0.0-beta.2",
"popper.js": "^1.12.9" "popper.js": "^1.12.9"
} }
} }

View file

@ -364,7 +364,7 @@ babel-core@^5.0.0:
trim-right "^1.0.0" trim-right "^1.0.0"
try-resolve "^1.0.0" try-resolve "^1.0.0"
babel-core@^6.14.0, babel-core@^6.26.0: babel-core@^6.14.0, babel-core@^6.24.1, babel-core@^6.26.0:
version "6.26.0" version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
dependencies: dependencies:
@ -2126,6 +2126,24 @@ ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.3.0, e
clone "^2.0.0" clone "^2.0.0"
ember-cli-version-checker "^2.0.0" ember-cli-version-checker "^2.0.0"
ember-cli-babel@^6.0.0-beta.4:
version "6.10.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.10.0.tgz#81424acd1d97fb13658168121eeb2007d6edee84"
dependencies:
amd-name-resolver "0.0.7"
babel-plugin-debug-macros "^0.1.11"
babel-plugin-ember-modules-api-polyfill "^2.0.1"
babel-plugin-transform-es2015-modules-amd "^6.24.0"
babel-polyfill "^6.16.0"
babel-preset-env "^1.5.1"
broccoli-babel-transpiler "^6.1.2"
broccoli-debug "^0.6.2"
broccoli-funnel "^1.0.0"
broccoli-source "^1.1.0"
clone "^2.0.0"
ember-cli-version-checker "^2.1.0"
semver "^5.4.1"
ember-cli-babel@^6.8.2: ember-cli-babel@^6.8.2:
version "6.9.0" version "6.9.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.9.0.tgz#5147391389bdbb7091d15f81ae1dff1eb49d71aa" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.9.0.tgz#5147391389bdbb7091d15f81ae1dff1eb49d71aa"
@ -2468,6 +2486,15 @@ ember-cli@^2.16.2:
walk-sync "^0.3.0" walk-sync "^0.3.0"
yam "0.0.22" yam "0.0.22"
ember-concurrency@^0.8.12:
version "0.8.12"
resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-0.8.12.tgz#fb91180e5efeb1024cfa2cfb99d2fe6721930c91"
dependencies:
babel-core "^6.24.1"
ember-cli-babel "^6.8.2"
ember-getowner-polyfill "^2.0.0"
ember-maybe-import-regenerator "^0.1.5"
ember-cookies@^0.0.13: ember-cookies@^0.0.13:
version "0.0.13" version "0.0.13"
resolved "https://registry.yarnpkg.com/ember-cookies/-/ember-cookies-0.0.13.tgz#18350df766240793d46744e4ee5c9a55ae6b4e0a" resolved "https://registry.yarnpkg.com/ember-cookies/-/ember-cookies-0.0.13.tgz#18350df766240793d46744e4ee5c9a55ae6b4e0a"
@ -2520,6 +2547,12 @@ ember-factory-for-polyfill@^1.1.0:
dependencies: dependencies:
ember-cli-version-checker "^1.2.0" ember-cli-version-checker "^1.2.0"
ember-factory-for-polyfill@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/ember-factory-for-polyfill/-/ember-factory-for-polyfill-1.3.1.tgz#b446ed64916d293c847a4955240eb2c993b86eae"
dependencies:
ember-cli-version-checker "^2.1.0"
"ember-fetch@^2.1.0 || ^3.0.0": "ember-fetch@^2.1.0 || ^3.0.0":
version "3.4.3" version "3.4.3"
resolved "https://registry.yarnpkg.com/ember-fetch/-/ember-fetch-3.4.3.tgz#fb8ba73148bb2399a82b037e4fdf9a953cd496ba" resolved "https://registry.yarnpkg.com/ember-fetch/-/ember-fetch-3.4.3.tgz#fb8ba73148bb2399a82b037e4fdf9a953cd496ba"
@ -2539,6 +2572,13 @@ ember-getowner-polyfill@^1.1.0, ember-getowner-polyfill@^1.2.2:
ember-cli-version-checker "^1.2.0" ember-cli-version-checker "^1.2.0"
ember-factory-for-polyfill "^1.1.0" ember-factory-for-polyfill "^1.1.0"
ember-getowner-polyfill@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/ember-getowner-polyfill/-/ember-getowner-polyfill-2.2.0.tgz#38e7dccbcac69d5ec694000329ec0b2be651d2b2"
dependencies:
ember-cli-version-checker "^2.1.0"
ember-factory-for-polyfill "^1.3.1"
ember-inflector@^1.9.2: ember-inflector@^1.9.2:
version "1.12.1" version "1.12.1"
resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-1.12.1.tgz#d8bd2ca2f327b439720f89923fe614d46b5da1ca" resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-1.12.1.tgz#d8bd2ca2f327b439720f89923fe614d46b5da1ca"
@ -2568,6 +2608,15 @@ ember-lodash@^4.0:
ember-cli-babel "^6.4.1" ember-cli-babel "^6.4.1"
lodash-es "^4.17.4" lodash-es "^4.17.4"
ember-maybe-import-regenerator@^0.1.5:
version "0.1.6"
resolved "https://registry.yarnpkg.com/ember-maybe-import-regenerator/-/ember-maybe-import-regenerator-0.1.6.tgz#35d41828afa6d6a59bc0da3ce47f34c573d776ca"
dependencies:
broccoli-funnel "^1.0.1"
broccoli-merge-trees "^1.0.0"
ember-cli-babel "^6.0.0-beta.4"
regenerator-runtime "^0.9.5"
ember-qunit@^2.2.0: ember-qunit@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-2.2.0.tgz#3cdf400031c93a38de781a7304819738753b7f99" resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-2.2.0.tgz#3cdf400031c93a38de781a7304819738753b7f99"
@ -5324,6 +5373,10 @@ regenerator-runtime@^0.11.0:
version "0.11.0" version "0.11.0"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
regenerator-runtime@^0.9.5:
version "0.9.6"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029"
regenerator-transform@^0.10.0: regenerator-transform@^0.10.0:
version "0.10.1" version "0.10.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
@ -5582,7 +5635,7 @@ scss-tokenizer@^0.2.3:
js-base64 "^2.1.8" js-base64 "^2.1.8"
source-map "^0.4.2" source-map "^0.4.2"
"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.1.1, semver@^5.3.0: "semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.1.1, semver@^5.3.0, semver@^5.4.1:
version "5.4.1" version "5.4.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"