Skip to content

Commit 9d099d1

Browse files
committed
Add support for other functions selection
1 parent f39714b commit 9d099d1

File tree

5 files changed

+43
-22
lines changed

5 files changed

+43
-22
lines changed

src/components/blocks/ContextMenu.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
<script>
2323
/* eslint-disable no-param-reassign */
24+
import { mapState } from 'vuex';
2425
import EventBus from './../../eventBus';
2526
import translate from '../../mixins/translate';
2627
import contextMenu from './mixins/contextMenu';
@@ -47,6 +48,9 @@ export default {
4748
EventBus.$on('contextMenu', event => this.showMenu(event));
4849
},
4950
computed: {
51+
...mapState('fm', {
52+
extConfig: state => state.settings.extConfig,
53+
}),
5054
/**
5155
* Context menu items
5256
* @returns {*}

src/components/blocks/Navbar.vue

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,49 +22,49 @@
2222
</button>
2323
</div>
2424
<div class="btn-group" role="group">
25-
<button type="button" class="btn btn-secondary"
25+
<button v-if="extConfig.canNewFile === true" type="button" class="btn btn-secondary"
2626
v-on:click="showModal('NewFile')"
2727
v-bind:title="lang.btn.file">
2828
<i class="far fa-file"></i>
2929
</button>
30-
<button type="button" class="btn btn-secondary"
30+
<button v-if="extConfig.canNewFolder === true" type="button" class="btn btn-secondary"
3131
v-on:click="showModal('NewFolder')"
3232
v-bind:title="lang.btn.folder">
3333
<i class="far fa-folder"></i>
3434
</button>
35-
<button type="button" class="btn btn-secondary"
36-
disabled
37-
v-if="uploading"
35+
<button v-if="extConfig.canUpload === true && uploading === false"
36+
type="button" class="btn btn-secondary"
37+
v-on:click="showModal('Upload')"
3838
v-bind:title="lang.btn.upload">
3939
<i class="fas fa-upload"></i>
4040
</button>
4141
<button type="button" class="btn btn-secondary"
42-
v-else
43-
v-on:click="showModal('Upload')"
42+
disabled
43+
v-if="extConfig.canUpload === true && uploading === true"
4444
v-bind:title="lang.btn.upload">
4545
<i class="fas fa-upload"></i>
4646
</button>
47-
<button type="button" class="btn btn-secondary"
47+
<button v-if="extConfig.canDelete === true" type="button" class="btn btn-secondary"
4848
v-bind:disabled="!isAnyItemSelected"
4949
v-on:click="showModal('Delete')"
5050
v-bind:title="lang.btn.delete">
5151
<i class="fas fa-trash-alt"></i>
5252
</button>
5353
</div>
5454
<div class="btn-group" role="group">
55-
<button type="button" class="btn btn-secondary"
55+
<button v-if="extConfig.canCopy === true" type="button" class="btn btn-secondary"
5656
v-bind:disabled="!isAnyItemSelected"
5757
v-bind:title="lang.btn.copy"
5858
v-on:click="toClipboard('copy')">
5959
<i class="fas fa-copy"></i>
6060
</button>
61-
<button type="button" class="btn btn-secondary"
61+
<button v-if="extConfig.canCut === true" type="button" class="btn btn-secondary"
6262
v-bind:disabled="!isAnyItemSelected"
6363
v-bind:title="lang.btn.cut"
6464
v-on:click="toClipboard('cut')">
6565
<i class="fas fa-cut"></i>
6666
</button>
67-
<button type="button" class="btn btn-secondary"
67+
<button v-if="extConfig.canPaste === true" type="button" class="btn btn-secondary"
6868
v-bind:disabled="!clipboardType"
6969
v-bind:title="lang.btn.paste"
7070
v-on:click="paste">
@@ -96,7 +96,7 @@
9696
</button>
9797
</div>
9898
<div class="btn-group" role="group">
99-
<button type="button" class="btn btn-secondary"
99+
<button v-if="extConfig.showAbout === true" type="button" class="btn btn-secondary"
100100
v-bind:title="lang.btn.about"
101101
v-on:click="showModal('About')">
102102
<i class="fas fa-question"></i>
@@ -108,12 +108,16 @@
108108
</template>
109109

110110
<script>
111+
import { mapState } from 'vuex';
111112
import translate from './../../mixins/translate';
112113
import EventBus from './../../eventBus';
113114
114115
export default {
115116
mixins: [translate],
116117
computed: {
118+
...mapState('fm', {
119+
extConfig: state => state.settings.extConfig,
120+
}),
117121
/**
118122
* Active manager name
119123
* @returns {default.computed.activeManager|(function())|string|activeManager}

src/components/blocks/mixins/contextMenuRules.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,39 +71,42 @@ export default {
7171
* @returns {boolean}
7272
*/
7373
copyRule() {
74-
return true;
74+
return this.$store.state.fm.settings.extConfig.canCopy;
7575
},
7676

7777
/**
7878
* Cut - menu item status - show or hide
7979
* @returns {boolean}
8080
*/
8181
cutRule() {
82-
return true;
82+
return this.$store.state.fm.settings.extConfig.canCut;
8383
},
8484

8585
/**
8686
* Rename - menu item status - show or hide
8787
* @returns {boolean}
8888
*/
8989
renameRule() {
90-
return !this.multiSelect;
90+
return !this.multiSelect &&
91+
this.$store.state.fm.settings.extConfig.canRename;
9192
},
9293

9394
/**
9495
* Paste - menu item status - show or hide
9596
* @returns {boolean}
9697
*/
9798
pasteRule() {
98-
return !!this.$store.state.fm.clipboard.type;
99+
return !!this.$store.state.fm.clipboard.type &&
100+
this.$store.state.fm.settings.extConfig.canPaste;
99101
},
100102

101103
/**
102104
* Zip - menu item status - show or hide
103105
* @returns {boolean}
104106
*/
105107
zipRule() {
106-
return this.selectedDiskDriver === 'local';
108+
return this.selectedDiskDriver === 'local' &&
109+
this.$store.state.fm.settings.extConfig.canZip;
107110
},
108111

109112
/**
@@ -114,15 +117,16 @@ export default {
114117
return this.selectedDiskDriver === 'local' &&
115118
!this.multiSelect &&
116119
this.firstItemType === 'file' &&
117-
this.isZip(this.selectedItems[0].extension);
120+
this.isZip(this.selectedItems[0].extension) &&
121+
this.$store.state.fm.settings.extConfig.canUnzip;
118122
},
119123

120124
/**
121125
* Delete - menu item status - show or hide
122126
* @returns {boolean}
123127
*/
124128
deleteRule() {
125-
return true;
129+
return this.$store.state.fm.settings.extConfig.canDelete;
126130
},
127131

128132
/**

src/store/settings/mutations.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export default {
2828
Vue.set(state.translations, data.translation.name, Object.freeze(data.translation.content));
2929
}
3030
// extra configurations
31-
if (Object.prototype.hasOwnProperty.call(data, 'ext_config')) {
31+
if (Object.prototype.hasOwnProperty.call(data, 'extConfig')) {
3232
state.ext_config = data.ext_config;
3333
}
3434
},

src/store/settings/store.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,19 @@ export default {
4040
ar: Object.freeze(ar),
4141
},
4242
extConfig: {
43-
canUpload: false,
43+
canUpload: true,
44+
canCopy: true,
45+
canCut: true,
46+
canPaste: true,
47+
canDelete: true,
4448
canNewFile: true,
4549
canNewFolder: true,
46-
showSize: false,
50+
canZip: true,
51+
canUnzip: true,
52+
canRename: true,
53+
54+
showSize: true,
55+
showAbout: true,
4756
},
4857
// Context menu items
4958
contextMenu: [

0 commit comments

Comments
 (0)