@jetbrains/ring-ui 4.1.1 → 4.1.2

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.
Files changed (314) hide show
  1. package/dist/_helpers/_rollupPluginBabelHelpers.js +34 -0
  2. package/dist/_helpers/anchor.js +32 -0
  3. package/dist/_helpers/badge.js +3 -0
  4. package/dist/_helpers/button-group.js +3 -0
  5. package/dist/_helpers/button-set.js +3 -0
  6. package/dist/_helpers/button-toolbar.js +3 -0
  7. package/dist/_helpers/button__classes.js +39 -0
  8. package/dist/_helpers/card.js +75 -0
  9. package/dist/_helpers/checkbox.js +3 -0
  10. package/dist/_helpers/date-picker.js +3 -0
  11. package/dist/_helpers/dialog__body-scroll-preventer.js +57 -0
  12. package/dist/_helpers/error-message.js +3 -0
  13. package/dist/_helpers/footer.js +121 -0
  14. package/dist/_helpers/grid.js +3 -0
  15. package/dist/_helpers/group.js +3 -0
  16. package/dist/_helpers/header.js +3 -0
  17. package/dist/_helpers/icon.js +3 -0
  18. package/dist/_helpers/inject-styles.js +22 -0
  19. package/dist/_helpers/input.js +3 -0
  20. package/dist/_helpers/island.js +3 -0
  21. package/dist/_helpers/link.js +3 -0
  22. package/dist/_helpers/list.js +3 -0
  23. package/dist/_helpers/loader-screen.js +3 -0
  24. package/dist/_helpers/panel.js +3 -0
  25. package/dist/_helpers/query-assist__suggestions.js +95 -0
  26. package/dist/_helpers/radio.js +3 -0
  27. package/dist/_helpers/select__filter.js +76 -0
  28. package/dist/_helpers/services-link.js +40 -0
  29. package/dist/_helpers/sidebar.js +125 -0
  30. package/dist/_helpers/table.js +3 -0
  31. package/dist/_helpers/tabs.js +3 -0
  32. package/dist/_helpers/title.js +99 -0
  33. package/dist/alert/alert.js +260 -0
  34. package/dist/alert/container.js +48 -0
  35. package/dist/alert-service/alert-service.js +170 -0
  36. package/dist/analytics/analytics.js +116 -0
  37. package/dist/analytics/analytics__custom-plugin.js +127 -0
  38. package/dist/analytics/analytics__fus-plugin.js +101 -0
  39. package/dist/analytics/analytics__ga-plugin.js +66 -0
  40. package/dist/analytics/analytics__plugin-utils.js +79 -0
  41. package/dist/analytics-ng/analytics-ng.js +94 -0
  42. package/dist/auth/auth.js +93 -0
  43. package/dist/auth/auth__core.js +1025 -0
  44. package/dist/auth/background-flow.js +122 -0
  45. package/dist/auth/down-notification.js +114 -0
  46. package/dist/auth/iframe-flow.js +150 -0
  47. package/dist/auth/landing-entry.js +5 -0
  48. package/dist/auth/landing.js +87 -0
  49. package/dist/auth/request-builder.js +75 -0
  50. package/dist/auth/response-parser.js +117 -0
  51. package/dist/auth/storage.js +280 -0
  52. package/dist/auth/token-validator.js +176 -0
  53. package/dist/auth/window-flow.js +133 -0
  54. package/dist/auth-dialog/auth-dialog.js +134 -0
  55. package/dist/auth-dialog-service/auth-dialog-service.js +68 -0
  56. package/dist/auth-ng/auth-ng.js +203 -0
  57. package/dist/auth-ng/auth-ng.mock.js +33 -0
  58. package/dist/autofocus-ng/autofocus-ng.js +50 -0
  59. package/dist/avatar/avatar-example-datauri.js +26 -0
  60. package/dist/avatar/avatar.js +161 -0
  61. package/dist/avatar/fallback-avatar.js +141 -0
  62. package/dist/avatar-editor-ng/avatar-editor-ng.js +164 -0
  63. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +30 -0
  64. package/dist/avatar-ng/avatar-ng.js +18 -0
  65. package/dist/badge/badge.js +50 -0
  66. package/dist/badge-ng/badge-ng.js +16 -0
  67. package/dist/breadcrumb-ng/breadcrumb-ng.js +61 -0
  68. package/dist/button/button.js +123 -0
  69. package/dist/button/button__classes.js +5 -0
  70. package/dist/button-group/button-group.js +30 -0
  71. package/dist/button-group/caption.js +24 -0
  72. package/dist/button-group-ng/button-group-ng.js +38 -0
  73. package/dist/button-ng/button-ng.js +223 -0
  74. package/dist/button-set/button-set.js +26 -0
  75. package/dist/button-set-ng/button-set-ng.js +19 -0
  76. package/dist/button-toolbar/button-toolbar.js +29 -0
  77. package/dist/button-toolbar-ng/button-toolbar-ng.js +23 -0
  78. package/dist/caret/caret.js +264 -0
  79. package/dist/checkbox/checkbox.js +108 -0
  80. package/dist/checkbox-ng/checkbox-ng.js +55 -0
  81. package/dist/code/code.js +136 -0
  82. package/dist/compiler-ng/compiler-ng.js +53 -0
  83. package/dist/confirm/confirm.js +125 -0
  84. package/dist/confirm-ng/confirm-ng.js +66 -0
  85. package/dist/confirm-service/confirm-service.js +114 -0
  86. package/dist/content-layout/content-layout.js +65 -0
  87. package/dist/content-layout/sidebar.js +6 -0
  88. package/dist/contenteditable/contenteditable.js +78 -0
  89. package/dist/data-list/data-list.js +206 -0
  90. package/dist/data-list/data-list.mock.js +190 -0
  91. package/dist/data-list/item.js +227 -0
  92. package/dist/data-list/selection.js +101 -0
  93. package/dist/data-list/title.js +18 -0
  94. package/dist/data-list-ng/data-list-ng.js +59 -0
  95. package/dist/date-picker/consts.js +69 -0
  96. package/dist/date-picker/date-input.js +173 -0
  97. package/dist/date-picker/date-picker.js +365 -0
  98. package/dist/date-picker/date-popup.js +482 -0
  99. package/dist/date-picker/day.js +119 -0
  100. package/dist/date-picker/formats.js +3 -0
  101. package/dist/date-picker/month-names.js +99 -0
  102. package/dist/date-picker/month-slider.js +83 -0
  103. package/dist/date-picker/month.js +54 -0
  104. package/dist/date-picker/months.js +121 -0
  105. package/dist/date-picker/weekdays.js +32 -0
  106. package/dist/date-picker/years.js +109 -0
  107. package/dist/dialog/dialog.js +200 -0
  108. package/dist/dialog/dialog__body-scroll-preventer.js +2 -0
  109. package/dist/dialog-ng/dialog-ng.js +601 -0
  110. package/dist/dialog-ng/dialog-ng__template.js +71 -0
  111. package/dist/docked-panel-ng/docked-panel-ng.js +170 -0
  112. package/dist/dropdown/anchor.js +17 -0
  113. package/dist/dropdown/dropdown.js +234 -0
  114. package/dist/dropdown-menu/dropdown-menu.js +175 -0
  115. package/dist/error-bubble/error-bubble.js +57 -0
  116. package/dist/error-message/error-message.js +55 -0
  117. package/dist/error-message-ng/error-message-ng.js +53 -0
  118. package/dist/footer/footer.js +11 -0
  119. package/dist/footer-ng/footer-ng.js +75 -0
  120. package/dist/form-ng/form-ng.js +169 -0
  121. package/dist/global/angular-component-factory.js +82 -0
  122. package/dist/global/compose.js +9 -0
  123. package/dist/global/composeRefs.js +15 -0
  124. package/dist/global/conic-gradient.js +35 -0
  125. package/dist/global/create-stateful-context.js +54 -0
  126. package/dist/global/data-tests.js +22 -0
  127. package/dist/global/dom.js +124 -0
  128. package/dist/global/focus-sensor-hoc.js +145 -0
  129. package/dist/global/fuzzy-highlight.js +67 -0
  130. package/dist/global/get-event-key.js +111 -0
  131. package/dist/global/get-uid.js +15 -0
  132. package/dist/global/inject-styles.js +17 -0
  133. package/dist/global/linear-function.js +17 -0
  134. package/dist/global/listeners.js +42 -0
  135. package/dist/global/memoize.js +18 -0
  136. package/dist/global/normalize-indent.js +28 -0
  137. package/dist/global/promise-with-timeout.js +13 -0
  138. package/dist/global/radial-gradient-mask.js +49 -0
  139. package/dist/global/react-dom-renderer.js +45 -0
  140. package/dist/global/rerender-hoc.js +51 -0
  141. package/dist/global/ring-angular-component.js +24 -0
  142. package/dist/global/schedule-raf.js +31 -0
  143. package/dist/global/sniffer.js +6 -0
  144. package/dist/global/supports-css.js +20 -0
  145. package/dist/global/theme.js +54 -0
  146. package/dist/global/trivial-template-tag.js +15 -0
  147. package/dist/global/url.js +163 -0
  148. package/dist/global/variables_dark.js +57 -0
  149. package/dist/grid/col.js +60 -0
  150. package/dist/grid/grid.js +33 -0
  151. package/dist/grid/row.js +64 -0
  152. package/dist/group/group.js +31 -0
  153. package/dist/group-ng/group-ng.js +11 -0
  154. package/dist/header/header.js +147 -0
  155. package/dist/header/logo.js +38 -0
  156. package/dist/header/profile.js +217 -0
  157. package/dist/header/services-link.js +11 -0
  158. package/dist/header/services.js +136 -0
  159. package/dist/header/smart-profile.js +230 -0
  160. package/dist/header/smart-services.js +160 -0
  161. package/dist/header/tray-icon.js +45 -0
  162. package/dist/header/tray.js +31 -0
  163. package/dist/heading/heading.js +73 -0
  164. package/dist/http/http.js +216 -0
  165. package/dist/http/http.mock.js +65 -0
  166. package/dist/hub-source/hub-source.js +130 -0
  167. package/dist/hub-source/hub-source__user.js +28 -0
  168. package/dist/hub-source/hub-source__users-groups.js +62 -0
  169. package/dist/icon/icon.js +105 -0
  170. package/dist/icon/icon__constants.js +33 -0
  171. package/dist/icon/icon__svg.js +81 -0
  172. package/dist/icon/index.js +10 -0
  173. package/dist/icon-ng/icon-ng.js +89 -0
  174. package/dist/input/input.js +228 -0
  175. package/dist/input-ng/input-ng.js +166 -0
  176. package/dist/island/adaptive-island-hoc.js +47 -0
  177. package/dist/island/content.js +156 -0
  178. package/dist/island/header.js +83 -0
  179. package/dist/island/island.js +50 -0
  180. package/dist/island-legacy/content-legacy.js +26 -0
  181. package/dist/island-legacy/header-legacy.js +28 -0
  182. package/dist/island-legacy/island-legacy.js +28 -0
  183. package/dist/island-ng/island-content-ng.js +56 -0
  184. package/dist/island-ng/island-header-ng.js +32 -0
  185. package/dist/island-ng/island-ng-class-fixer.js +9 -0
  186. package/dist/island-ng/island-ng.js +31 -0
  187. package/dist/link/clickableLink.js +63 -0
  188. package/dist/link/link.js +114 -0
  189. package/dist/link-ng/link-ng.js +25 -0
  190. package/dist/list/consts.js +26 -0
  191. package/dist/list/list.js +812 -0
  192. package/dist/list/list__custom.js +85 -0
  193. package/dist/list/list__hint.js +26 -0
  194. package/dist/list/list__item.js +204 -0
  195. package/dist/list/list__link.js +64 -0
  196. package/dist/list/list__separator.js +30 -0
  197. package/dist/list/list__title.js +39 -0
  198. package/dist/list/list__users-groups-source.js +128 -0
  199. package/dist/loader/loader.js +70 -0
  200. package/dist/loader/loader__core.js +272 -0
  201. package/dist/loader-inline/inject-styles.js +11 -0
  202. package/dist/loader-inline/loader-inline.js +56 -0
  203. package/dist/loader-inline-ng/loader-inline-ng.js +42 -0
  204. package/dist/loader-ng/loader-ng.js +43 -0
  205. package/dist/loader-screen/loader-screen.js +43 -0
  206. package/dist/loader-screen-ng/loader-screen-ng.js +99 -0
  207. package/dist/login-dialog/login-dialog.js +186 -0
  208. package/dist/login-dialog/service.js +69 -0
  209. package/dist/markdown/code.js +30 -0
  210. package/dist/markdown/heading.js +23 -0
  211. package/dist/markdown/link.js +30 -0
  212. package/dist/markdown/markdown.js +73 -0
  213. package/dist/message/message.js +233 -0
  214. package/dist/message-bundle-ng/message-bundle-ng.js +111 -0
  215. package/dist/old-browsers-message/old-browsers-message.js +100 -0
  216. package/dist/old-browsers-message/old-browsers-message__stop.js +4 -0
  217. package/dist/old-browsers-message/white-list.js +33 -0
  218. package/dist/pager/pager.js +361 -0
  219. package/dist/pager-ng/pager-ng.js +96 -0
  220. package/dist/panel/panel.js +31 -0
  221. package/dist/panel-ng/panel-ng.js +16 -0
  222. package/dist/permissions/permissions.js +200 -0
  223. package/dist/permissions/permissions__cache.js +272 -0
  224. package/dist/permissions-ng/permissions-ng.js +274 -0
  225. package/dist/place-under-ng/place-under-ng.js +157 -0
  226. package/dist/popup/popup.consts.js +41 -0
  227. package/dist/popup/popup.js +389 -0
  228. package/dist/popup/popup.target.js +26 -0
  229. package/dist/popup/position.js +279 -0
  230. package/dist/popup-menu/popup-menu.js +115 -0
  231. package/dist/progress-bar/progress-bar.js +113 -0
  232. package/dist/progress-bar-ng/progress-bar-ng.js +15 -0
  233. package/dist/promised-click-ng/promised-click-ng.js +126 -0
  234. package/dist/proxy-attrs/proxy-attrs.js +19 -0
  235. package/dist/query-assist/query-assist.js +1092 -0
  236. package/dist/query-assist/query-assist__suggestions.js +47 -0
  237. package/dist/query-assist-ng/query-assist-ng.js +82 -0
  238. package/dist/radio/radio.js +41 -0
  239. package/dist/radio/radio__item.js +77 -0
  240. package/dist/radio-ng/radio-ng.js +63 -0
  241. package/dist/save-field-ng/save-field-ng.js +335 -0
  242. package/dist/save-field-ng/save-field-ng__template.js +34 -0
  243. package/dist/select/select.js +1336 -0
  244. package/dist/select/select__filter.js +54 -0
  245. package/dist/select/select__popup.js +546 -0
  246. package/dist/select-ng/select-ng.js +621 -0
  247. package/dist/select-ng/select-ng__lazy.js +150 -0
  248. package/dist/select-ng/select-ng__options.js +145 -0
  249. package/dist/shortcuts/core.js +245 -0
  250. package/dist/shortcuts/shortcut-title.js +51 -0
  251. package/dist/shortcuts/shortcuts-hoc.js +41 -0
  252. package/dist/shortcuts/shortcuts.js +72 -0
  253. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +120 -0
  254. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +50 -0
  255. package/dist/shortcuts-ng/shortcuts-ng.js +261 -0
  256. package/dist/sidebar-ng/sidebar-ng.js +111 -0
  257. package/dist/sidebar-ng/sidebar-ng__button-template.js +20 -0
  258. package/dist/sidebar-ng/sidebar-ng__template.js +12 -0
  259. package/dist/storage/storage.js +56 -0
  260. package/dist/storage/storage__fallback.js +214 -0
  261. package/dist/storage/storage__local.js +151 -0
  262. package/dist/style.css +1 -0
  263. package/dist/tab-trap/tab-trap.js +176 -0
  264. package/dist/table/cell.js +25 -0
  265. package/dist/table/disable-hover-hoc.js +53 -0
  266. package/dist/table/header-cell.js +90 -0
  267. package/dist/table/header.js +191 -0
  268. package/dist/table/multitable.js +140 -0
  269. package/dist/table/row-with-focus-sensor.js +81 -0
  270. package/dist/table/row.js +271 -0
  271. package/dist/table/selection-adapter.js +14 -0
  272. package/dist/table/selection-shortcuts-hoc.js +214 -0
  273. package/dist/table/selection.js +221 -0
  274. package/dist/table/smart-table.js +119 -0
  275. package/dist/table/table.js +404 -0
  276. package/dist/table-legacy-ng/table-legacy-ng.js +501 -0
  277. package/dist/table-legacy-ng/table-legacy-ng__pager.js +122 -0
  278. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +123 -0
  279. package/dist/table-legacy-ng/table-legacy-ng__selection.js +179 -0
  280. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +56 -0
  281. package/dist/table-ng/smart-table-ng.js +65 -0
  282. package/dist/table-ng/table-ng.js +64 -0
  283. package/dist/tabs/collapsible-more.js +196 -0
  284. package/dist/tabs/collapsible-tab.js +90 -0
  285. package/dist/tabs/collapsible-tabs.js +360 -0
  286. package/dist/tabs/custom-item.js +13 -0
  287. package/dist/tabs/dumb-tabs.js +161 -0
  288. package/dist/tabs/smart-tabs.js +104 -0
  289. package/dist/tabs/tab-link.js +41 -0
  290. package/dist/tabs/tab.js +32 -0
  291. package/dist/tabs/tabs.js +69 -0
  292. package/dist/tabs-ng/tabs-ng.js +193 -0
  293. package/dist/tabs-ng/tabs-ng__template.js +40 -0
  294. package/dist/tag/tag.js +196 -0
  295. package/dist/tags-input/tags-input.js +478 -0
  296. package/dist/tags-input-ng/tags-input-ng.js +89 -0
  297. package/dist/tags-list/tags-list.js +93 -0
  298. package/dist/template-ng/template-ng.js +70 -0
  299. package/dist/text/text.js +36 -0
  300. package/dist/theme-ng/theme-ng.js +44 -0
  301. package/dist/title-ng/title-ng.js +114 -0
  302. package/dist/toggle/toggle.js +77 -0
  303. package/dist/toggle-ng/toggle-ng.js +16 -0
  304. package/dist/tooltip/tooltip.js +207 -0
  305. package/dist/tooltip-ng/tooltip-ng.js +98 -0
  306. package/dist/user-agreement/service.js +409 -0
  307. package/dist/user-agreement/toolbox.eula.js +162 -0
  308. package/dist/user-agreement/user-agreement.js +167 -0
  309. package/dist/user-card/card.js +17 -0
  310. package/dist/user-card/smart-user-card-tooltip.js +112 -0
  311. package/dist/user-card/tooltip.js +93 -0
  312. package/dist/user-card/user-card.js +49 -0
  313. package/dist/user-card-ng/user-card-ng.js +59 -0
  314. package/package.json +2 -2
@@ -0,0 +1,274 @@
1
+ import angular from 'angular';
2
+ import '../auth-ng/auth-ng.js';
3
+ import Permissions from '../permissions/permissions.js';
4
+ import PermissionCache from '../permissions/permissions__cache.js';
5
+ import '../auth/auth.js';
6
+ import '../auth/window-flow.js';
7
+ import '../_helpers/_rollupPluginBabelHelpers.js';
8
+ import '../auth/response-parser.js';
9
+ import 'es6-error';
10
+ import '../global/url.js';
11
+ import '../auth/down-notification.js';
12
+ import 'react';
13
+ import 'prop-types';
14
+ import '../alert-service/alert-service.js';
15
+ import 'react-dom';
16
+ import '../global/get-uid.js';
17
+ import '../alert/alert.js';
18
+ import 'classnames';
19
+ import '@jetbrains/icons/exception';
20
+ import '@jetbrains/icons/checkmark';
21
+ import '@jetbrains/icons/warning';
22
+ import '@jetbrains/icons/close';
23
+ import '../icon/icon.js';
24
+ import 'util-deprecate';
25
+ import '../icon/icon__constants.js';
26
+ import '../_helpers/icon.js';
27
+ import '../icon/icon__svg.js';
28
+ import '../global/memoize.js';
29
+ import '../loader-inline/loader-inline.js';
30
+ import '../global/theme.js';
31
+ import '../global/data-tests.js';
32
+ import '../_helpers/inject-styles.js';
33
+ import '../global/conic-gradient.js';
34
+ import 'conic-gradient';
35
+ import '../global/supports-css.js';
36
+ import '../global/inject-styles.js';
37
+ import '../global/radial-gradient-mask.js';
38
+ import '../global/dom.js';
39
+ import '../alert/container.js';
40
+ import '../link/link.js';
41
+ import 'focus-visible';
42
+ import '../link/clickableLink.js';
43
+ import '../_helpers/link.js';
44
+ import '../group/group.js';
45
+ import '../_helpers/group.js';
46
+ import '../auth/auth__core.js';
47
+ import '../global/listeners.js';
48
+ import '../http/http.js';
49
+ import '../global/promise-with-timeout.js';
50
+ import '../auth/storage.js';
51
+ import '../storage/storage.js';
52
+ import '../storage/storage__local.js';
53
+ import '../storage/storage__fallback.js';
54
+ import 'deep-equal';
55
+ import '../auth/request-builder.js';
56
+ import 'simply-uuid';
57
+ import '../auth/background-flow.js';
58
+ import '../auth/token-validator.js';
59
+
60
+ function registerPermission(element) {
61
+ const somePermissionsCtrl = element.controller('rgSomePermissions');
62
+ return somePermissionsCtrl && somePermissionsCtrl.registerPermission() || angular.noop;
63
+ }
64
+
65
+ const angularModule = angular.module('Ring.permissions', ['Ring.auth']);
66
+ /**
67
+ * @ngdoc object
68
+ * @name userPermissions
69
+ *
70
+ * @description
71
+ * Configured instance of Permissions object.
72
+ */
73
+
74
+ /**
75
+ * @typedef {Object} permissionsNgConfig
76
+ * @property {?string} serviceId
77
+ * @property {?string} prefix
78
+ */
79
+
80
+ angularModule.provider('userPermissions', function provider() {
81
+ /**
82
+ * @type {permissionsNgConfig}
83
+ */
84
+ let _config = {};
85
+ /**
86
+ * @param {permissionsNgConfig} config
87
+ */
88
+
89
+ this.config = config => {
90
+ _config = config;
91
+ };
92
+
93
+ this.$get = ["auth", "$q", "$http", (auth, $q, $http) => {
94
+ const apiUri = auth.auth.getAPIPath() + Permissions.API_PERMISSION_CACHE_PATH;
95
+
96
+ async function datasource(query) {
97
+ const {
98
+ data
99
+ } = await $http.get(apiUri, {
100
+ params: {
101
+ fields: 'permission/key,global,projects(id)',
102
+ query
103
+ }
104
+ });
105
+ return data;
106
+ }
107
+
108
+ _config.datasource = _config.datasource || datasource;
109
+ const permissions = new Permissions(auth.auth, _config); // Override load to execute in $digest
110
+
111
+ permissions.load = function load() {
112
+ return $q.when(Permissions.prototype.load.call(this));
113
+ };
114
+
115
+ return permissions;
116
+ }];
117
+ });
118
+ /**
119
+ * @ngdoc directive
120
+ * @name permission
121
+ *
122
+ * @description
123
+ * The `permission` directive show or hide a portion of the DOM tree (HTML) depending
124
+ * on the logged in user permissions. If the user has listed permissions then the DOM tree
125
+ * is shown, otherwise it is hidden.
126
+ *
127
+ * @restrict A
128
+ * @element ANY
129
+ * @requires userPermissions
130
+ */
131
+
132
+ angularModule.directive('rgPermission', ["userPermissions", "$interpolate", function rgPermissionDirective(userPermissions, $interpolate) {
133
+ return {
134
+ controller: ["$scope", "$element", "$attrs", function controller($scope, $element, $attrs) {
135
+ const element = $element[0]; //noinspection JSPotentiallyInvalidUsageOfThis
136
+
137
+ this.permitted = false;
138
+ element.classList.add('ring-permission-hide');
139
+ const permission = $interpolate($attrs.rgPermission)($scope);
140
+ const projectId = $attrs.hasOwnProperty('inGlobal') ? PermissionCache.GLOBAL_PROJECT_ID : $scope.$eval($attrs.inProject);
141
+ userPermissions.check(permission, projectId).then(permitted => {
142
+ this.permitted = permitted;
143
+
144
+ if (permitted) {
145
+ element.classList.remove('ring-permission-hide');
146
+ }
147
+
148
+ return permitted;
149
+ }).then(registerPermission($element));
150
+ }]
151
+ };
152
+ }]);
153
+ /**
154
+ * @ngdoc directive
155
+ * @name permissionIf
156
+ *
157
+ * @description
158
+ * The `permission` directive transcludes or not a portion of the DOM tree (HTML) depending
159
+ * on the logged in user permissions. If the user has listed permissions then the DOM tree
160
+ * is transcluded, otherwise it is not.
161
+ * @example
162
+ <example name="rgPermissionIf directive">
163
+ <file name="index.html">
164
+ <div rg-permission-if="project-read" in-project="0-0-0-0-0">
165
+ Is transcluded if user has permission 'read-project' in project 0-0-0-0-0.
166
+ </div>
167
+ <div rg-permission-if="project-read">
168
+ Is transcluded if user has permission 'read-project' at least in one project.
169
+ </div>
170
+ <div rg-permission-if="project-read" in-global>
171
+ Is transcluded if user has permission 'read-project' at project "global".
172
+ </div>
173
+ </file>
174
+ </example>
175
+ *
176
+ * @restrict A
177
+ * @element ANY
178
+ * @requires $animate
179
+ * @requires userPermissions
180
+ */
181
+
182
+ angularModule.directive('rgPermissionIf', ["$animate", "userPermissions", "$interpolate", function rgPermissionIfDirective($animate, userPermissions, $interpolate) {
183
+ return {
184
+ transclude: 'element',
185
+ priority: 600,
186
+ terminal: true,
187
+ restrict: 'A',
188
+ // disable error about multiple transclude like in ngIf
189
+ $$tlb: true,
190
+ // eslint-disable-line angular/no-private-call
191
+ require: '^?rgSomePermissions',
192
+ link: function link(scope, iElement, iAttrs, somePermittedCtrl, $transclude) {
193
+ let block;
194
+ let childScope;
195
+ const projectId = iAttrs.hasOwnProperty('inGlobal') ? PermissionCache.GLOBAL_PROJECT_ID : scope.$eval(iAttrs.inProject);
196
+ const permission = $interpolate(iAttrs.rgPermissionIf)(scope);
197
+ userPermissions.check(permission, projectId).then(permitted => {
198
+ if (permitted) {
199
+ if (!childScope) {
200
+ childScope = scope.$new();
201
+ $transclude(childScope, clone => {
202
+ block = {
203
+ startNode: clone[0],
204
+ endNode: clone[clone.length++] = document.createComment(` end rgPermissionIf: ${iAttrs.rgPermissionIf} `)
205
+ };
206
+ $animate.enter(clone, iElement.parent(), iElement);
207
+ });
208
+ }
209
+ } else {
210
+ if (childScope) {
211
+ childScope.$destroy();
212
+ childScope = null;
213
+ }
214
+
215
+ if (block) {
216
+ /* global getBlockElements: false */
217
+ $animate.leave(getBlockElements(block));
218
+ block = null;
219
+ }
220
+ }
221
+ }).then(registerPermission(iElement));
222
+ }
223
+ };
224
+ }]);
225
+ /**
226
+ * @ngdoc directive
227
+ * @name rgSomePermissions
228
+ *
229
+ * @description
230
+ * Binds left-value expression with a boolean value that is true when at least one permission of
231
+ * nested {@link permission} or {@link rgPermissionIf} directive is obtained by the logged in user.
232
+ *
233
+ * @scope
234
+ * @restrict A
235
+ * @element ANY
236
+ */
237
+
238
+ angularModule.directive('rgSomePermissions', function rgSomePermissionsDirective() {
239
+ return {
240
+ scope: {
241
+ rgSomePermissions: '='
242
+ },
243
+ controller: ["$scope", function controller($scope) {
244
+ const permissions = [];
245
+ $scope.rgSomePermissions = false;
246
+
247
+ function checkPermissions() {
248
+ for (let i = permissions.length - 1; i >= 0; i--) {
249
+ if (permissions[i].permitted) {
250
+ $scope.rgSomePermissions = true;
251
+ return;
252
+ }
253
+ }
254
+
255
+ $scope.rgSomePermissions = false;
256
+ } //noinspection JSPotentiallyInvalidUsageOfThis
257
+
258
+
259
+ this.registerPermission = () => {
260
+ const permission = {
261
+ permitted: false
262
+ };
263
+ permissions.push(permission);
264
+ return permitted => {
265
+ permission.permitted = permitted;
266
+ checkPermissions();
267
+ };
268
+ };
269
+ }]
270
+ };
271
+ });
272
+ var permissionsNg = angularModule.name;
273
+
274
+ export { permissionsNg as default };
@@ -0,0 +1,157 @@
1
+ import angular from 'angular';
2
+ import debounce from 'just-debounce-it';
3
+ import createResizeDetector from 'element-resize-detector';
4
+ import { getDocumentScrollTop } from '../global/dom.js';
5
+ import '../_helpers/_rollupPluginBabelHelpers.js';
6
+
7
+ const resizeDetector = createResizeDetector();
8
+ const angularModule = angular.module('Ring.place-under', []);
9
+ angularModule.directive('rgPlaceUnder', // eslint-disable-next-line angular/di-unused
10
+ ["$window", "getClosestElementWithCommonParent", "rgPlaceUnderHelper", function rgPlaceUnderDirective($window, getClosestElementWithCommonParent, rgPlaceUnderHelper) {
11
+ return {
12
+ restrict: 'A',
13
+ link: function link(scope, iElement, iAttrs) {
14
+ const element = iElement[0];
15
+ const synchronizer = rgPlaceUnderHelper.createPositionSynchronizer(element, iAttrs, scope);
16
+
17
+ function startSyncing(placeUnderSelector) {
18
+ if (placeUnderSelector) {
19
+ scope.$evalAsync(() => {
20
+ const syncWith = getClosestElementWithCommonParent(element, placeUnderSelector);
21
+
22
+ if (syncWith) {
23
+ synchronizer.syncPositionWith(syncWith);
24
+ } else {
25
+ throw new Error('rgPlaceUnder cannot find element to sync with.');
26
+ }
27
+ });
28
+ }
29
+ }
30
+
31
+ iAttrs.$observe('rgPlaceUnder', startSyncing);
32
+ }
33
+ };
34
+ }]);
35
+ angularModule.factory('getClosestElementWithCommonParent', function getClosestElementWithCommonParentFactory() {
36
+ return function getClosestElementWithCommonParent(currentElement, selector) {
37
+ const parent = currentElement.parentNode;
38
+
39
+ if (parent) {
40
+ return parent.querySelector(selector) || getClosestElementWithCommonParent(parent, selector);
41
+ } else {
42
+ return null;
43
+ }
44
+ };
45
+ });
46
+ angularModule.factory('rgPlaceUnderHelper', ["$window", $window => {
47
+ const DEBOUNCE_INTERVAL = 10;
48
+ const AFTER_SCROLL_RECHECK_INTERVAL = 50;
49
+ const HEIGHT_CHECK_INTERVAL = 50;
50
+ return {
51
+ DEBOUNCE_INTERVAL,
52
+ AFTER_SCROLL_RECHECK_INTERVAL,
53
+ HEIGHT_CHECK_INTERVAL,
54
+ createPositionSynchronizer: (element, iAttrs, scope) => {
55
+ const topOffset = parseInt(iAttrs.placeTopOffset, 10) || 0;
56
+ const syncHeight = iAttrs.syncHeight;
57
+ let syncBottom = [];
58
+ let removeScrollListener = [];
59
+
60
+ if (iAttrs.syncBottom) {
61
+ syncBottom = iAttrs.syncBottom.split(',');
62
+ }
63
+
64
+ function waitForNonZeroHeight(elementToCheck) {
65
+ return new Promise(resolve => {
66
+ function checkElementHeight() {
67
+ if (elementToCheck.offsetHeight === 0) {
68
+ $window.setTimeout(checkElementHeight, HEIGHT_CHECK_INTERVAL);
69
+ } else {
70
+ resolve();
71
+ }
72
+ }
73
+
74
+ checkElementHeight();
75
+ });
76
+ }
77
+
78
+ function onScroll(syncElement) {
79
+ const documentScrollTop = getDocumentScrollTop();
80
+ const documentOffsetHeight = $window.document.documentElement && $window.document.documentElement.offsetHeight || $window.document.body.offsetHeight;
81
+ const syncedElementHeight = syncElement.offsetHeight;
82
+ const syncedElementOffsetTop = syncElement.getBoundingClientRect().top + documentScrollTop;
83
+ const bottom = syncedElementOffsetTop + syncedElementHeight;
84
+ const margin = Math.max(bottom - documentScrollTop, syncedElementHeight);
85
+ element.style.marginTop = `${margin + topOffset}px`;
86
+
87
+ if (syncHeight) {
88
+ /**
89
+ * Decrease height by margin value to make scroll work properly
90
+ */
91
+ let bottomOffset = 0;
92
+
93
+ if (syncBottom.length) {
94
+ for (let i = 0; i < syncBottom.length; i++) {
95
+ const syncBottomParams = syncBottom[i].split(';');
96
+ const elem = $window.document.querySelector(syncBottomParams[0]);
97
+ const extraMargin = syncBottomParams[1] ? parseInt(syncBottomParams[1], 10) : 0;
98
+
99
+ if (elem) {
100
+ const boundingRect = elem.getBoundingClientRect();
101
+
102
+ if (boundingRect.top === 0) {
103
+ continue;
104
+ }
105
+
106
+ const marginTop = parseInt($window.getComputedStyle(elem).getPropertyValue('margin-top'), 10);
107
+ bottomOffset = documentOffsetHeight - boundingRect.top + marginTop + extraMargin;
108
+
109
+ if (bottomOffset < 0) {
110
+ bottomOffset = 0;
111
+ }
112
+
113
+ break;
114
+ }
115
+ }
116
+ }
117
+
118
+ element.style.height = `calc(100% - ${parseInt(element.style.marginTop, 10) + bottomOffset}px)`;
119
+ }
120
+ }
121
+
122
+ function removeScrollListeners() {
123
+ removeScrollListener.map(cb => cb());
124
+ removeScrollListener = [];
125
+ }
126
+
127
+ function syncPositionWith(syncElement) {
128
+ removeScrollListeners();
129
+ const afterScrollFinishRecheck = debounce(() => this.onScroll(syncElement), AFTER_SCROLL_RECHECK_INTERVAL);
130
+ const sidebarScrollListener = debounce(() => {
131
+ this.onScroll(syncElement);
132
+ afterScrollFinishRecheck();
133
+ }, DEBOUNCE_INTERVAL);
134
+ this.waitForNonZeroHeight(syncElement).then(sidebarScrollListener);
135
+ $window.addEventListener('scroll', sidebarScrollListener);
136
+ removeScrollListener.push(() => {
137
+ $window.removeEventListener('scroll', sidebarScrollListener);
138
+ });
139
+ removeScrollListener.push(scope.$watch('show', sidebarScrollListener));
140
+ removeScrollListener.push(scope.$on('rgPlaceUnder:sync', sidebarScrollListener));
141
+ const elementToHeightListening = iAttrs.listenToHeightChange ? $window.document.querySelector(iAttrs.listenToHeightChange) : $window.document.body;
142
+ resizeDetector.listenTo(elementToHeightListening, sidebarScrollListener);
143
+ removeScrollListener.push(() => resizeDetector.removeAllListeners(elementToHeightListening));
144
+ }
145
+
146
+ scope.$on('$destroy', removeScrollListeners);
147
+ return {
148
+ waitForNonZeroHeight,
149
+ onScroll,
150
+ syncPositionWith
151
+ };
152
+ }
153
+ };
154
+ }]);
155
+ var PlaceUnder = angularModule.name;
156
+
157
+ export { PlaceUnder as default };
@@ -0,0 +1,41 @@
1
+ const Directions = {
2
+ BOTTOM_RIGHT: 'BOTTOM_RIGHT',
3
+ BOTTOM_LEFT: 'BOTTOM_LEFT',
4
+ BOTTOM_CENTER: 'BOTTOM_CENTER',
5
+ TOP_LEFT: 'TOP_LEFT',
6
+ TOP_RIGHT: 'TOP_RIGHT',
7
+ TOP_CENTER: 'TOP_CENTER',
8
+ RIGHT_TOP: 'RIGHT_TOP',
9
+ RIGHT_BOTTOM: 'RIGHT_BOTTOM',
10
+ RIGHT_CENTER: 'RIGHT_CENTER',
11
+ LEFT_TOP: 'LEFT_TOP',
12
+ LEFT_BOTTOM: 'LEFT_BOTTOM',
13
+ LEFT_CENTER: 'LEFT_CENTER'
14
+ };
15
+ /**
16
+ * When positioning a popup, directions will be tried in the listed order.
17
+ * @type {Array.<string>}
18
+ */
19
+
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
+ /**
22
+ * @enum {number}
23
+ */
24
+
25
+ const Dimension = {
26
+ MARGIN: 16,
27
+ BORDER_WIDTH: 1
28
+ };
29
+ const MinWidth = {
30
+ TARGET: -1
31
+ };
32
+ const MaxHeight = {
33
+ SCREEN: -1
34
+ };
35
+ const Display = {
36
+ HIDDEN: 0,
37
+ SHOWING: 1,
38
+ SHOWN: 2
39
+ };
40
+
41
+ export { DEFAULT_DIRECTIONS, Dimension, Directions, Display, MaxHeight, MinWidth };