@jetbrains/ring-ui-built 7.0.0-beta.1 → 7.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/_helpers/_rollupPluginBabelHelpers.js +1 -504
- package/components/_helpers/anchor.js +7 -5
- package/components/_helpers/button__classes.js +15 -13
- package/components/_helpers/caption.js +11 -17
- package/components/_helpers/card.js +92 -96
- package/components/_helpers/dialog__body-scroll-preventer.js +10 -17
- package/components/_helpers/header.js +1 -1
- package/components/_helpers/icon__svg.js +27 -23
- package/components/_helpers/input.js +150 -171
- package/components/_helpers/query-assist__suggestions.js +78 -93
- package/components/_helpers/select__filter.js +56 -67
- package/components/_helpers/services-link.js +23 -29
- package/components/_helpers/sidebar.js +91 -93
- package/components/_helpers/tab-link.js +8 -6
- package/components/_helpers/theme.js +55 -51
- package/components/_helpers/title.js +59 -69
- package/components/alert/alert.js +112 -156
- package/components/alert/container.js +32 -39
- package/components/alert-service/alert-service.js +104 -161
- package/components/analytics/analytics.js +12 -20
- package/components/analytics/analytics__custom-plugin.js +52 -68
- package/components/auth/auth.js +2 -27
- package/components/auth/auth__core.d.ts +1 -1
- package/components/auth/auth__core.js +742 -1428
- package/components/auth/background-flow.js +84 -121
- package/components/auth/down-notification.js +31 -69
- package/components/auth/iframe-flow.js +70 -123
- package/components/auth/request-builder.js +46 -77
- package/components/auth/response-parser.js +84 -112
- package/components/auth/storage.js +160 -318
- package/components/auth/token-validator.js +132 -227
- package/components/auth/window-flow.js +84 -121
- package/components/auth-dialog/auth-dialog.js +99 -150
- package/components/auth-dialog-service/auth-dialog-service.js +6 -26
- package/components/avatar/avatar-example-datauri.js +1 -1
- package/components/avatar/avatar.js +94 -123
- package/components/avatar/fallback-avatar.js +20 -34
- package/components/badge/badge.js +32 -38
- package/components/breadcrumbs/breadcrumbs.js +13 -17
- package/components/button/button.js +67 -80
- package/components/button-group/button-group.js +27 -36
- package/components/button-set/button-set.js +19 -27
- package/components/button-toolbar/button-toolbar.js +17 -25
- package/components/caret/caret.js +184 -211
- package/components/checkbox/checkbox.js +69 -86
- package/components/clipboard/clipboard-fallback.js +7 -7
- package/components/clipboard/clipboard.js +36 -128
- package/components/code/code.js +83 -151
- package/components/collapse/collapse-content.js +42 -60
- package/components/collapse/collapse-context.js +2 -2
- package/components/collapse/collapse-control.js +12 -12
- package/components/collapse/collapse.js +12 -17
- package/components/collapse/consts.js +4 -4
- package/components/collapse/utils.js +1 -3
- package/components/confirm/confirm.js +57 -87
- package/components/confirm-service/confirm-service.js +23 -44
- package/components/content-layout/content-layout.js +41 -56
- package/components/content-layout/sidebar.js +1 -1
- package/components/contenteditable/contenteditable.js +38 -46
- package/components/control-help/control-help.js +5 -3
- package/components/control-label/control-label.js +9 -8
- package/components/data-list/data-list.js +113 -156
- package/components/data-list/data-list.mock.js +3 -5
- package/components/data-list/item.js +120 -140
- package/components/data-list/selection.js +77 -135
- package/components/data-list/title.js +2 -10
- package/components/date-picker/consts.js +16 -22
- package/components/date-picker/date-input.js +99 -124
- package/components/date-picker/date-picker.js +140 -184
- package/components/date-picker/date-popup.js +280 -327
- package/components/date-picker/day.js +71 -94
- package/components/date-picker/month-names.js +41 -59
- package/components/date-picker/month-slider.js +42 -61
- package/components/date-picker/month.js +17 -24
- package/components/date-picker/months.js +44 -49
- package/components/date-picker/weekdays.js +12 -21
- package/components/date-picker/years.js +77 -98
- package/components/dialog/dialog.js +151 -187
- package/components/dialog/dialog__body-scroll-preventer.js +0 -3
- package/components/dropdown/anchor.js +0 -6
- package/components/dropdown/dropdown.js +134 -154
- package/components/dropdown-menu/dropdown-menu.js +59 -87
- package/components/editable-heading/editable-heading.js +69 -116
- package/components/error-bubble/error-bubble.js +29 -54
- package/components/error-message/error-message.js +34 -49
- package/components/footer/footer.js +27 -28
- package/components/global/compose.js +1 -8
- package/components/global/composeRefs.d.ts +0 -3
- package/components/global/composeRefs.js +8 -15
- package/components/global/controls-height.js +2 -2
- package/components/global/create-stateful-context.js +14 -13
- package/components/global/data-tests.js +7 -12
- package/components/global/dom.js +49 -82
- package/components/global/focus-sensor-hoc.js +99 -106
- package/components/global/fuzzy-highlight.js +23 -34
- package/components/global/get-event-key.js +8 -8
- package/components/global/get-uid.js +3 -7
- package/components/global/inject-styles.js +7 -14
- package/components/global/listeners.js +28 -47
- package/components/global/memoize.js +6 -10
- package/components/global/normalize-indent.js +19 -46
- package/components/global/promise-with-timeout.js +6 -8
- package/components/global/prop-types.js +3 -5
- package/components/global/react-dom-renderer.js +29 -40
- package/components/global/rerender-hoc.js +16 -32
- package/components/global/schedule-raf.js +4 -4
- package/components/global/sniffer.js +1 -1
- package/components/global/theme.d.ts +3 -0
- package/components/global/theme.js +2 -19
- package/components/global/trivial-template-tag.js +4 -9
- package/components/global/typescript-utils.js +2 -6
- package/components/global/url.js +20 -23
- package/components/global/use-event-callback.js +7 -4
- package/components/grid/col.js +27 -39
- package/components/grid/grid.js +18 -27
- package/components/grid/row.js +23 -30
- package/components/group/group.js +16 -22
- package/components/header/header-icon.js +19 -31
- package/components/header/header.d.ts +0 -1
- package/components/header/header.js +30 -64
- package/components/header/links.d.ts +2 -0
- package/components/header/links.js +20 -0
- package/components/header/logo.js +15 -26
- package/components/header/profile.js +124 -150
- package/components/header/services-link.js +1 -3
- package/components/header/services.js +64 -97
- package/components/header/smart-profile.js +101 -178
- package/components/header/smart-services.js +55 -90
- package/components/header/tray.js +21 -30
- package/components/heading/heading.js +21 -20
- package/components/http/http.js +162 -319
- package/components/http/http.mock.js +50 -98
- package/components/hub-source/hub-source.js +77 -182
- package/components/hub-source/hub-source__user.js +9 -37
- package/components/hub-source/hub-source__users-groups.js +34 -60
- package/components/i18n/i18n-context.js +7 -8
- package/components/i18n/i18n.js +3 -6
- package/components/icon/icon.js +60 -74
- package/components/icon/icon__svg.js +0 -5
- package/components/icon/index.js +0 -5
- package/components/input/input.js +1 -11
- package/components/island/adaptive-island-hoc.js +29 -37
- package/components/island/content.js +100 -110
- package/components/island/header.js +56 -66
- package/components/island/island.js +25 -33
- package/components/island-legacy/content-legacy.js +16 -22
- package/components/island-legacy/header-legacy.js +19 -25
- package/components/island-legacy/island-legacy.js +16 -22
- package/components/link/clickableLink.js +33 -42
- package/components/link/link.js +47 -55
- package/components/list/consts.js +2 -2
- package/components/list/list.js +399 -486
- package/components/list/list__custom.js +51 -61
- package/components/list/list__hint.js +9 -17
- package/components/list/list__item.js +147 -178
- package/components/list/list__link.js +38 -47
- package/components/list/list__separator.js +15 -24
- package/components/list/list__title.js +25 -34
- package/components/list/list__users-groups-source.js +55 -121
- package/components/loader/loader.js +38 -60
- package/components/loader/loader__core.js +123 -184
- package/components/loader-inline/loader-inline.js +24 -32
- package/components/loader-screen/loader-screen.js +24 -40
- package/components/login-dialog/login-dialog.js +81 -121
- package/components/login-dialog/service.js +6 -29
- package/components/markdown/markdown.js +16 -24
- package/components/message/message.js +170 -201
- package/components/old-browsers-message/old-browsers-message.js +11 -14
- package/components/old-browsers-message/old-browsers-message__stop.js +1 -4
- package/components/old-browsers-message/white-list.js +8 -13
- package/components/pager/pager.js +212 -257
- package/components/panel/panel.js +16 -22
- package/components/permissions/permissions.js +118 -161
- package/components/permissions/permissions__cache.js +191 -218
- package/components/popup/popup.consts.js +1 -1
- package/components/popup/popup.js +237 -288
- package/components/popup/popup.target.js +9 -7
- package/components/popup/position.js +94 -101
- package/components/popup-menu/popup-menu.js +33 -67
- package/components/progress-bar/progress-bar.js +57 -68
- package/components/query-assist/query-assist.js +583 -652
- package/components/query-assist/query-assist__suggestions.js +2 -26
- package/components/radio/radio.js +15 -27
- package/components/radio/radio__item.js +52 -62
- package/components/scrollable-section/scrollable-section.js +53 -0
- package/components/select/select.js +701 -796
- package/components/select/select__filter.js +1 -26
- package/components/select/select__popup.js +316 -413
- package/components/shortcuts/core.js +147 -195
- package/components/shortcuts/shortcut-title.js +6 -10
- package/components/shortcuts/shortcuts-hoc.js +23 -41
- package/components/shortcuts/shortcuts.js +41 -64
- package/components/slider/slider.js +93 -112
- package/components/slider/slider.utils.js +16 -23
- package/components/storage/storage.js +3 -27
- package/components/storage/storage__fallback.js +137 -210
- package/components/storage/storage__local.js +89 -147
- package/components/style.css +1 -1
- package/components/tab-trap/tab-trap.js +35 -53
- package/components/table/cell.js +11 -21
- package/components/table/disable-hover-hoc.js +27 -42
- package/components/table/header-cell.js +59 -75
- package/components/table/header.js +89 -110
- package/components/table/multitable.js +83 -89
- package/components/table/row-with-focus-sensor.js +25 -57
- package/components/table/row.js +169 -200
- package/components/table/selection-adapter.js +2 -2
- package/components/table/selection-shortcuts-hoc.js +108 -113
- package/components/table/selection.js +150 -217
- package/components/table/simple-table.js +19 -55
- package/components/table/smart-table.js +42 -76
- package/components/table/table.js +267 -327
- package/components/tabs/collapsible-more.js +47 -73
- package/components/tabs/collapsible-tab.js +32 -36
- package/components/tabs/collapsible-tabs.js +89 -148
- package/components/tabs/custom-item.js +4 -2
- package/components/tabs/dumb-tabs.js +60 -92
- package/components/tabs/smart-tabs.js +29 -61
- package/components/tabs/tab-link.js +1 -3
- package/components/tabs/tab.js +15 -24
- package/components/tabs/tabs.js +1 -26
- package/components/tag/tag.d.ts +0 -2
- package/components/tag/tag.js +120 -162
- package/components/tags-input/tags-input.js +222 -304
- package/components/tags-list/tags-list.js +45 -61
- package/components/text/text.js +28 -37
- package/components/toggle/toggle.js +51 -61
- package/components/tooltip/tooltip.js +109 -141
- package/components/user-agreement/service.js +259 -400
- package/components/user-agreement/user-agreement.js +80 -108
- package/components/user-card/card.js +1 -25
- package/components/user-card/smart-user-card-tooltip.js +52 -103
- package/components/user-card/tooltip.js +35 -65
- package/components/user-card/user-card.js +1 -25
- package/package.json +1 -1
- package/components/global/react-render-adapter.d.ts +0 -1
- package/components/global/react-render-adapter.js +0 -6
- package/components/header/scrollable-section.js +0 -47
- package/components/header/tray-icon.d.ts +0 -1
- package/components/header/tray-icon.js +0 -26
- /package/components/{header → scrollable-section}/scrollable-section.d.ts +0 -0
@@ -1,6 +1,5 @@
|
|
1
|
-
import { _ as _defineProperty
|
1
|
+
import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
|
2
2
|
import 'core-js/modules/es.array.reduce.js';
|
3
|
-
import 'core-js/modules/es.object.to-string.js';
|
4
3
|
|
5
4
|
/**
|
6
5
|
* Converts an array of cached permissions to a a map of a permission key
|
@@ -15,242 +14,216 @@ import 'core-js/modules/es.object.to-string.js';
|
|
15
14
|
* @return {object} permission cache
|
16
15
|
* @private
|
17
16
|
*/
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
class PermissionCache {
|
18
|
+
/**
|
19
|
+
* Convert an array of projects to a set of project ids.
|
20
|
+
*
|
21
|
+
* @param {object[]=} projects
|
22
|
+
* @return {object} a set of project ids
|
23
|
+
* @private
|
24
|
+
*/
|
25
|
+
static _toProjectIdSet(projects) {
|
26
|
+
let projectIdSet = null;
|
27
|
+
if (projects) {
|
28
|
+
projectIdSet = {};
|
29
|
+
for (let i = 0; i < projects.length; i++) {
|
30
|
+
projectIdSet[projects[i].id] = true;
|
31
|
+
}
|
32
|
+
}
|
33
|
+
return projectIdSet;
|
34
|
+
}
|
35
|
+
constructor(permissions, namesConverter) {
|
21
36
|
_defineProperty(this, "namesConverter", void 0);
|
22
37
|
_defineProperty(this, "_permissions", void 0);
|
23
38
|
_defineProperty(this, "permissionCache", void 0);
|
24
|
-
this.namesConverter = namesConverter ||
|
25
|
-
return key;
|
26
|
-
};
|
39
|
+
this.namesConverter = namesConverter || (key => key);
|
27
40
|
this.set(permissions);
|
28
41
|
}
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
global: permission.global,
|
38
|
-
projectIdSet: _this.constructor._toProjectIdSet(permission.projects)
|
39
|
-
};
|
40
|
-
}
|
41
|
-
return _permissionCache;
|
42
|
-
}, {});
|
43
|
-
this._permissions = permissions;
|
44
|
-
this.permissionCache = permissionCache;
|
45
|
-
return this;
|
46
|
-
}
|
47
|
-
}, {
|
48
|
-
key: "get",
|
49
|
-
value: function get() {
|
50
|
-
return this._permissions;
|
51
|
-
}
|
52
|
-
/**
|
53
|
-
* Checks if the current user has the given permissions in the project with the given id.
|
54
|
-
*
|
55
|
-
* @param {string} permissions space separated list of permissions
|
56
|
-
* @param {string=} projectId optional projectId. If absent the method checks
|
57
|
-
* if the given permission is granted in any project.
|
58
|
-
*
|
59
|
-
* @return {boolean}
|
60
|
-
*/
|
61
|
-
}, {
|
62
|
-
key: "has",
|
63
|
-
value: function has(permissions, projectId) {
|
64
|
-
var lexems = this.lex(permissions);
|
65
|
-
if (lexems.length === 0) {
|
66
|
-
return true;
|
67
|
-
}
|
68
|
-
try {
|
69
|
-
return this.or(lexems, projectId);
|
70
|
-
} catch (e) {
|
71
|
-
return false;
|
42
|
+
set(permissions) {
|
43
|
+
const permissionCache = (permissions || []).reduce((_permissionCache, permission) => {
|
44
|
+
const key = this.namesConverter(permission.permission.key);
|
45
|
+
if (key) {
|
46
|
+
_permissionCache[key] = {
|
47
|
+
global: permission.global,
|
48
|
+
projectIdSet: this.constructor._toProjectIdSet(permission.projects)
|
49
|
+
};
|
72
50
|
}
|
51
|
+
return _permissionCache;
|
52
|
+
}, {});
|
53
|
+
this._permissions = permissions;
|
54
|
+
this.permissionCache = permissionCache;
|
55
|
+
return this;
|
56
|
+
}
|
57
|
+
get() {
|
58
|
+
return this._permissions;
|
59
|
+
}
|
60
|
+
/**
|
61
|
+
* Checks if the current user has the given permissions in the project with the given id.
|
62
|
+
*
|
63
|
+
* @param {string} permissions space separated list of permissions
|
64
|
+
* @param {string=} projectId optional projectId. If absent the method checks
|
65
|
+
* if the given permission is granted in any project.
|
66
|
+
*
|
67
|
+
* @return {boolean}
|
68
|
+
*/
|
69
|
+
has(permissions, projectId) {
|
70
|
+
const lexems = this.lex(permissions);
|
71
|
+
if (lexems.length === 0) {
|
72
|
+
return true;
|
73
73
|
}
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
* @return {string[]}
|
79
|
-
*/
|
80
|
-
}, {
|
81
|
-
key: "lex",
|
82
|
-
value: function lex(query) {
|
83
|
-
var lexems = [];
|
84
|
-
if (query) {
|
85
|
-
var currentIdentifier = '';
|
86
|
-
for (var i = 0; i < query.length; i++) {
|
87
|
-
switch (query.charAt(i)) {
|
88
|
-
case ' ':
|
89
|
-
case '\t':
|
90
|
-
case '\n':
|
91
|
-
case '\r':
|
92
|
-
// Finish current token
|
93
|
-
if (currentIdentifier) {
|
94
|
-
lexems.push(currentIdentifier);
|
95
|
-
currentIdentifier = '';
|
96
|
-
}
|
97
|
-
// Skip space
|
98
|
-
break;
|
99
|
-
case '(':
|
100
|
-
case ')':
|
101
|
-
case '&':
|
102
|
-
case '|':
|
103
|
-
case '!':
|
104
|
-
// Finish current token
|
105
|
-
if (currentIdentifier) {
|
106
|
-
lexems.push(currentIdentifier);
|
107
|
-
currentIdentifier = '';
|
108
|
-
}
|
109
|
-
// Append operator
|
110
|
-
lexems.push(query.charAt(i));
|
111
|
-
break;
|
112
|
-
default:
|
113
|
-
currentIdentifier += query.charAt(i);
|
114
|
-
break;
|
115
|
-
}
|
116
|
-
}
|
117
|
-
if (currentIdentifier) {
|
118
|
-
lexems.push(currentIdentifier);
|
119
|
-
}
|
120
|
-
}
|
121
|
-
return lexems;
|
74
|
+
try {
|
75
|
+
return this.or(lexems, projectId);
|
76
|
+
} catch (e) {
|
77
|
+
return false;
|
122
78
|
}
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
79
|
+
}
|
80
|
+
/**
|
81
|
+
* Lexes permission query string to an array of lexems.
|
82
|
+
*
|
83
|
+
* @param {string} query
|
84
|
+
* @return {string[]}
|
85
|
+
*/
|
86
|
+
lex(query) {
|
87
|
+
const lexems = [];
|
88
|
+
if (query) {
|
89
|
+
let currentIdentifier = '';
|
90
|
+
for (let i = 0; i < query.length; i++) {
|
91
|
+
switch (query.charAt(i)) {
|
92
|
+
case ' ':
|
93
|
+
case '\t':
|
94
|
+
case '\n':
|
95
|
+
case '\r':
|
96
|
+
// Finish current token
|
97
|
+
if (currentIdentifier) {
|
98
|
+
lexems.push(currentIdentifier);
|
99
|
+
currentIdentifier = '';
|
100
|
+
}
|
101
|
+
// Skip space
|
102
|
+
break;
|
103
|
+
case '(':
|
104
|
+
case ')':
|
105
|
+
case '&':
|
106
|
+
case '|':
|
107
|
+
case '!':
|
108
|
+
// Finish current token
|
109
|
+
if (currentIdentifier) {
|
110
|
+
lexems.push(currentIdentifier);
|
111
|
+
currentIdentifier = '';
|
112
|
+
}
|
113
|
+
// Append operator
|
114
|
+
lexems.push(query.charAt(i));
|
115
|
+
break;
|
116
|
+
default:
|
117
|
+
currentIdentifier += query.charAt(i);
|
118
|
+
break;
|
142
119
|
}
|
143
|
-
result = this.and(lexems, projectId) || result;
|
144
120
|
}
|
145
|
-
|
121
|
+
if (currentIdentifier) {
|
122
|
+
lexems.push(currentIdentifier);
|
123
|
+
}
|
146
124
|
}
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
125
|
+
return lexems;
|
126
|
+
}
|
127
|
+
/*
|
128
|
+
or -> and ( '|' and )*
|
129
|
+
and -> not ( '&'? not )*
|
130
|
+
not -> '!'* term
|
131
|
+
term -> '(' or ')' | permission
|
132
|
+
permission -> [^()&|!\s]+
|
133
|
+
*/
|
134
|
+
/**
|
135
|
+
* @param {string[]} lexems
|
136
|
+
* @param {string=} projectId
|
137
|
+
* @return {boolean}
|
138
|
+
*/
|
139
|
+
or(lexems, projectId) {
|
140
|
+
let result = this.and(lexems, projectId);
|
141
|
+
while (lexems.length > 0 && lexems[0] !== ')') {
|
142
|
+
if (lexems.shift() !== '|') {
|
143
|
+
throw new Error('Operator \'|\' was expected');
|
162
144
|
}
|
163
|
-
|
145
|
+
result = this.and(lexems, projectId) || result;
|
164
146
|
}
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
147
|
+
return result;
|
148
|
+
}
|
149
|
+
/**
|
150
|
+
* @param {string[]} lexems
|
151
|
+
* @param {string=} projectId
|
152
|
+
* @return {boolean}
|
153
|
+
*/
|
154
|
+
and(lexems, projectId) {
|
155
|
+
let result = this.not(lexems, projectId);
|
156
|
+
while (lexems.length > 0 && lexems[0] !== ')' && lexems[0] !== '|') {
|
157
|
+
// Expect optional '&'
|
158
|
+
if (lexems[0] === '&') {
|
176
159
|
lexems.shift();
|
177
160
|
}
|
178
|
-
|
179
|
-
return notCounter % 2 === 0 ? result : !result;
|
161
|
+
result = this.not(lexems, projectId) && result;
|
180
162
|
}
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
var result;
|
194
|
-
// Nested parenthesized expression
|
195
|
-
if (t === '(') {
|
196
|
-
result = this.or(lexems, projectId);
|
197
|
-
// Expect ')'
|
198
|
-
if (lexems.shift() !== ')') {
|
199
|
-
throw new Error('Operator \')\' was expected');
|
200
|
-
}
|
201
|
-
} else {
|
202
|
-
result = t != null && this.testPermission(t, projectId);
|
203
|
-
}
|
204
|
-
return result;
|
163
|
+
return result;
|
164
|
+
}
|
165
|
+
/**
|
166
|
+
* @param {string[]} lexems
|
167
|
+
* @param {string=} projectId
|
168
|
+
* @return {boolean}
|
169
|
+
*/
|
170
|
+
not(lexems, projectId) {
|
171
|
+
let notCounter = 0;
|
172
|
+
while (lexems.length > 0 && lexems[0] === '!') {
|
173
|
+
++notCounter;
|
174
|
+
lexems.shift();
|
205
175
|
}
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
// Hasn't the permission in any project
|
218
|
-
if (!cachedPermission) {
|
219
|
-
return false;
|
220
|
-
}
|
221
|
-
// The permission is global or is given in the global project
|
222
|
-
if (cachedPermission.global) {
|
223
|
-
return true;
|
224
|
-
}
|
225
|
-
if (projectId) {
|
226
|
-
// if projectId is specified check that the permission is given in the project
|
227
|
-
return cachedPermission.projectIdSet != null && projectId in cachedPermission.projectIdSet;
|
228
|
-
} else {
|
229
|
-
return true;
|
230
|
-
}
|
176
|
+
const result = this.term(lexems, projectId);
|
177
|
+
return notCounter % 2 === 0 ? result : !result;
|
178
|
+
}
|
179
|
+
/**
|
180
|
+
* @param {string[]} lexems
|
181
|
+
* @param {string=} projectId
|
182
|
+
* @return {boolean}
|
183
|
+
*/
|
184
|
+
term(lexems, projectId) {
|
185
|
+
if (lexems.length === 0) {
|
186
|
+
throw new Error('Operand was expected');
|
231
187
|
}
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
* @private
|
241
|
-
*/
|
242
|
-
function _toProjectIdSet(projects) {
|
243
|
-
var projectIdSet = null;
|
244
|
-
if (projects) {
|
245
|
-
projectIdSet = {};
|
246
|
-
for (var i = 0; i < projects.length; i++) {
|
247
|
-
projectIdSet[projects[i].id] = true;
|
248
|
-
}
|
188
|
+
const t = lexems.shift();
|
189
|
+
let result;
|
190
|
+
// Nested parenthesized expression
|
191
|
+
if (t === '(') {
|
192
|
+
result = this.or(lexems, projectId);
|
193
|
+
// Expect ')'
|
194
|
+
if (lexems.shift() !== ')') {
|
195
|
+
throw new Error('Operator \')\' was expected');
|
249
196
|
}
|
250
|
-
|
197
|
+
} else {
|
198
|
+
result = t != null && this.testPermission(t, projectId);
|
199
|
+
}
|
200
|
+
return result;
|
201
|
+
}
|
202
|
+
/**
|
203
|
+
* @param {string} permissionName
|
204
|
+
* @param {string=} projectId
|
205
|
+
* @return {boolean}
|
206
|
+
*/
|
207
|
+
testPermission(permissionName, projectId) {
|
208
|
+
const permissionCache = this.permissionCache;
|
209
|
+
const convertedName = this.namesConverter(permissionName);
|
210
|
+
const cachedPermission = (permissionCache === null || permissionCache === void 0 ? void 0 : permissionCache[permissionName]) || convertedName && (permissionCache === null || permissionCache === void 0 ? void 0 : permissionCache[convertedName]);
|
211
|
+
// Hasn't the permission in any project
|
212
|
+
if (!cachedPermission) {
|
213
|
+
return false;
|
251
214
|
}
|
252
|
-
|
253
|
-
|
215
|
+
// The permission is global or is given in the global project
|
216
|
+
if (cachedPermission.global) {
|
217
|
+
return true;
|
218
|
+
}
|
219
|
+
if (projectId) {
|
220
|
+
// if projectId is specified check that the permission is given in the project
|
221
|
+
return cachedPermission.projectIdSet != null && projectId in cachedPermission.projectIdSet;
|
222
|
+
} else {
|
223
|
+
return true;
|
224
|
+
}
|
225
|
+
}
|
226
|
+
}
|
254
227
|
_defineProperty(PermissionCache, "GLOBAL_PROJECT_ID", 'global');
|
255
228
|
|
256
229
|
export { PermissionCache as default };
|
@@ -17,7 +17,7 @@ var Directions;
|
|
17
17
|
* When positioning a popup, directions will be tried in the listed order.
|
18
18
|
* @type {Array.<string>}
|
19
19
|
*/
|
20
|
-
|
20
|
+
const DEFAULT_DIRECTIONS = [Directions.BOTTOM_RIGHT, Directions.BOTTOM_LEFT, Directions.TOP_LEFT, Directions.TOP_RIGHT, Directions.RIGHT_TOP, Directions.RIGHT_BOTTOM, Directions.LEFT_TOP, Directions.LEFT_BOTTOM];
|
21
21
|
/**
|
22
22
|
* @enum {number}
|
23
23
|
*/
|