luci-base: luci.js: disable page action buttons on readonly views
authorJo-Philipp Wich <jo@mein.io>
Wed, 15 Apr 2020 20:15:28 +0000 (22:15 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 16 Apr 2020 11:30:35 +0000 (13:30 +0200)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/htdocs/luci-static/resources/luci.js

index 519bf8fd6700b30dc37d2918a45fafefec55bce4..4af5f2944f6e5b2182301d789eec809e9d3a0c4c 100644 (file)
                 * methods are overwritten with `null`.
                 */
                addFooter: function() {
-                       var footer = E([]);
+                       var footer = E([]),
+                           vp = document.getElementById('view'),
+                           hasmap = false,
+                           readonly = true;
+
+                       vp.querySelectorAll('.cbi-map').forEach(function(map) {
+                               var m = DOM.findClassInstance(map);
+                               if (m) {
+                                       hasmap = true;
+
+                                       if (!m.readonly)
+                                               readonly = false;
+                               }
+                       });
+
+                       if (!hasmap)
+                               readonly = !L.hasViewPermission();
 
                        var saveApplyBtn = this.handleSaveApply ? new L.ui.ComboButton('0', {
                                0: [ _('Save & Apply') ],
                                        0: 'btn cbi-button cbi-button-apply important',
                                        1: 'btn cbi-button cbi-button-negative important'
                                },
-                               click: L.ui.createHandlerFn(this, 'handleSaveApply')
+                               click: L.ui.createHandlerFn(this, 'handleSaveApply'),
+                               disabled: readonly || null
                        }).render() : E([]);
 
                        if (this.handleSaveApply || this.handleSave || this.handleReset) {
                                        saveApplyBtn, ' ',
                                        this.handleSave ? E('button', {
                                                'class': 'cbi-button cbi-button-save',
-                                               'click': L.ui.createHandlerFn(this, 'handleSave')
+                                               'click': L.ui.createHandlerFn(this, 'handleSave'),
+                                               'disabled': readonly || null
                                        }, [ _('Save') ]) : '', ' ',
                                        this.handleReset ? E('button', {
                                                'class': 'cbi-button cbi-button-reset',
-                                               'click': L.ui.createHandlerFn(this, 'handleReset')
+                                               'click': L.ui.createHandlerFn(this, 'handleReset'),
+                                               'disabled': readonly || null
                                        }, [ _('Reset') ]) : ''
                                ]));
                        }