$(shell \
if git log -1 >/dev/null 2>/dev/null; then \
set -- $$(git log -1 --format="%ct %h" --abbrev=7 -- '$(if $(1),:(exclude))po'); \
- secs="$$(($$1 % 86400))"; \
- yday="$$(date --utc --date="@$$1" "+%y.%j")"; \
- printf 'git-%s.%05d-%s' "$$yday" "$$secs" "$$2"; \
+ if [ -n "$$1" ]; then
+ secs="$$(($$1 % 86400))"; \
+ yday="$$(date --utc --date="@$$1" "+%y.%j")"; \
+ printf 'git-%s.%05d-%s' "$$yday" "$$secs" "$$2"; \
+ else \
+ echo "unknown"; \
+ fi; \
else \
ts=$$(find . -type f $(if $(1),-not) -path './po/*' -printf '%T@\n' 2>/dev/null | sort -rn | head -n1 | cut -d. -f1); \
if [ -n "$$ts" ]; then \
* methods are overwritten with `null`.
*/
addFooter: function() {
- var footer = E([]);
+ var footer = E([]),
+ vp = document.getElementById('view'),
+ readonly = true;
+
+ vp.querySelectorAll('.cbi-map').forEach(function(map) {
+ var m = DOM.findClassInstance(map);
+ if (m && !m.readonly)
+ readonly = false;
+ });
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') ]) : ''
]));
}
});
},
+ /**
+ * Check whether the current session has been granted the given ACL
+ * group permissions.
+ *
+ * @param {string} aclGroupName
+ * The ACL group name to check.
+ *
+ * @return {boolean|null}
+ * Returns `null` if the session does not have the specified grant,
+ * returns `false` if the permissions are granted readonly or
+ * `true` if they're granted read/write.
+ */
+ hasAcl: function(aclGroupName) {
+ if (!this.isObject(this.env.accessgroups) ||
+ !this.env.accessgroups.hasOwnProperty(aclGroupName) ||
+ !Array.isArray(this.env.accessgroups[aclGroupName]))
+ return null;
+
+ for (var i = 0; i < this.env.accessgroups[aclGroupName].length; i++)
+ if (this.env.accessgroups[aclGroupName][i] == 'write')
+ return true;
+
+ for (var i = 0; i < this.env.accessgroups[aclGroupName].length; i++)
+ if (this.env.accessgroups[aclGroupName][i] == 'read')
+ return false;
+
+ return null;
+ },
+
/**
* Deprecated wrapper around {@link LuCI.poll.remove Poll.remove()}.
*