luci-app-opkg: disable action buttons on insufficient ACLs
Also flush menu cache after opkg actions. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
0306b14d20
commit
dc57e4bc6c
1 changed files with 19 additions and 10 deletions
|
@ -85,6 +85,8 @@ var css = ' \
|
||||||
} \
|
} \
|
||||||
';
|
';
|
||||||
|
|
||||||
|
var isReadonlyView = !L.hasViewPermission() || null;
|
||||||
|
|
||||||
var callMountPoints = rpc.declare({
|
var callMountPoints = rpc.declare({
|
||||||
object: 'luci',
|
object: 'luci',
|
||||||
method: 'getMountPoints',
|
method: 'getMountPoints',
|
||||||
|
@ -685,7 +687,7 @@ function handleInstall(ev)
|
||||||
errs || inst || '',
|
errs || inst || '',
|
||||||
E('div', { 'class': 'right' }, [
|
E('div', { 'class': 'right' }, [
|
||||||
E('label', { 'class': 'cbi-checkbox', 'style': 'float:left' }, [
|
E('label', { 'class': 'cbi-checkbox', 'style': 'float:left' }, [
|
||||||
E('input', { 'id': 'overwrite-cb', 'type': 'checkbox', 'name': 'overwrite' }), ' ',
|
E('input', { 'id': 'overwrite-cb', 'type': 'checkbox', 'name': 'overwrite', 'disabled': isReadonlyView }), ' ',
|
||||||
E('label', { 'for': 'overwrite-cb' }), ' ',
|
E('label', { 'for': 'overwrite-cb' }), ' ',
|
||||||
_('Overwrite files from other package(s)')
|
_('Overwrite files from other package(s)')
|
||||||
]),
|
]),
|
||||||
|
@ -698,7 +700,8 @@ function handleInstall(ev)
|
||||||
'data-command': 'install',
|
'data-command': 'install',
|
||||||
'data-package': name,
|
'data-package': name,
|
||||||
'class': 'btn cbi-button-action',
|
'class': 'btn cbi-button-action',
|
||||||
'click': handleOpkg
|
'click': handleOpkg,
|
||||||
|
'disabled': isReadonlyView
|
||||||
}, _('Install'))
|
}, _('Install'))
|
||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
|
@ -804,7 +807,8 @@ function handleConfig(ev)
|
||||||
ui.addNotification(null, E('p', {}, [ _('Unable to save %s: %s').format(file, err) ]));
|
ui.addNotification(null, E('p', {}, [ _('Unable to save %s: %s').format(file, err) ]));
|
||||||
});
|
});
|
||||||
})).then(ui.hideModal);
|
})).then(ui.hideModal);
|
||||||
}
|
},
|
||||||
|
'disabled': isReadonlyView
|
||||||
}, _('Save')),
|
}, _('Save')),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
@ -840,8 +844,9 @@ function handleRemove(ev)
|
||||||
]),
|
]),
|
||||||
desc || '',
|
desc || '',
|
||||||
E('div', { 'style': 'display:flex; justify-content:space-between; flex-wrap:wrap' }, [
|
E('div', { 'style': 'display:flex; justify-content:space-between; flex-wrap:wrap' }, [
|
||||||
E('label', {}, [
|
E('label', { 'class': 'cbi-checkbox', 'style': 'float:left' }, [
|
||||||
E('input', { type: 'checkbox', checked: 'checked', name: 'autoremove' }),
|
E('input', { 'id': 'autoremove-cb', 'type': 'checkbox', 'checked': 'checked', 'name': 'autoremove', 'disabled': isReadonlyView }), ' ',
|
||||||
|
E('label', { 'for': 'autoremove-cb' }), ' ',
|
||||||
_('Automatically remove unused dependencies')
|
_('Automatically remove unused dependencies')
|
||||||
]),
|
]),
|
||||||
E('div', { 'style': 'flex-grow:1', 'class': 'right' }, [
|
E('div', { 'style': 'flex-grow:1', 'class': 'right' }, [
|
||||||
|
@ -854,7 +859,8 @@ function handleRemove(ev)
|
||||||
'data-command': 'remove',
|
'data-command': 'remove',
|
||||||
'data-package': name,
|
'data-package': name,
|
||||||
'class': 'btn cbi-button-negative',
|
'class': 'btn cbi-button-negative',
|
||||||
'click': handleOpkg
|
'click': handleOpkg,
|
||||||
|
'disabled': isReadonlyView
|
||||||
}, _('Remove'))
|
}, _('Remove'))
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
@ -903,6 +909,9 @@ function handleOpkg(ev)
|
||||||
E('div', {
|
E('div', {
|
||||||
'class': 'btn',
|
'class': 'btn',
|
||||||
'click': L.bind(function(res) {
|
'click': L.bind(function(res) {
|
||||||
|
if (ui.menu && ui.menu.flushCache)
|
||||||
|
ui.menu.flushCache();
|
||||||
|
|
||||||
ui.hideModal();
|
ui.hideModal();
|
||||||
updateLists();
|
updateLists();
|
||||||
|
|
||||||
|
@ -1026,16 +1035,16 @@ return view.extend({
|
||||||
E('div', {}, [
|
E('div', {}, [
|
||||||
E('label', {}, _('Download and install package') + ':'),
|
E('label', {}, _('Download and install package') + ':'),
|
||||||
E('span', { 'class': 'control-group' }, [
|
E('span', { 'class': 'control-group' }, [
|
||||||
E('input', { 'type': 'text', 'name': 'install', 'placeholder': _('Package name or URL…'), 'keydown': function(ev) { if (ev.keyCode === 13) handleManualInstall(ev) } }),
|
E('input', { 'type': 'text', 'name': 'install', 'placeholder': _('Package name or URL…'), 'keydown': function(ev) { if (ev.keyCode === 13) handleManualInstall(ev) }, 'disabled': isReadonlyView }),
|
||||||
E('button', { 'class': 'btn cbi-button cbi-button-action', 'click': handleManualInstall }, [ _('OK') ])
|
E('button', { 'class': 'btn cbi-button cbi-button-action', 'click': handleManualInstall, 'disabled': isReadonlyView }, [ _('OK') ])
|
||||||
])
|
])
|
||||||
]),
|
]),
|
||||||
|
|
||||||
E('div', {}, [
|
E('div', {}, [
|
||||||
E('label', {}, _('Actions') + ':'), ' ',
|
E('label', {}, _('Actions') + ':'), ' ',
|
||||||
E('span', { 'class': 'control-group' }, [
|
E('span', { 'class': 'control-group' }, [
|
||||||
E('button', { 'class': 'btn cbi-button-positive', 'data-command': 'update', 'click': handleOpkg }, [ _('Update lists…') ]), ' ',
|
E('button', { 'class': 'btn cbi-button-positive', 'data-command': 'update', 'click': handleOpkg, 'disabled': isReadonlyView }, [ _('Update lists…') ]), ' ',
|
||||||
E('button', { 'class': 'btn cbi-button-action', 'click': handleUpload }, [ _('Upload Package…') ]), ' ',
|
E('button', { 'class': 'btn cbi-button-action', 'click': handleUpload, 'disabled': isReadonlyView }, [ _('Upload Package…') ]), ' ',
|
||||||
E('button', { 'class': 'btn cbi-button-neutral', 'click': handleConfig }, [ _('Configure opkg…') ])
|
E('button', { 'class': 'btn cbi-button-neutral', 'click': handleConfig }, [ _('Configure opkg…') ])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
Loading…
Reference in a new issue