@jetbrains/ring-ui 4.2.7 → 4.2.10

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 (318) hide show
  1. package/components/auth/auth__core.js +5 -0
  2. package/components/auth/token-validator.js +4 -1
  3. package/components/pager/pager.js +14 -14
  4. package/dist/_helpers/_rollupPluginBabelHelpers.js +34 -0
  5. package/dist/_helpers/anchor.js +33 -0
  6. package/dist/_helpers/badge.js +3 -0
  7. package/dist/_helpers/button-group.js +3 -0
  8. package/dist/_helpers/button-set.js +3 -0
  9. package/dist/_helpers/button-toolbar.js +3 -0
  10. package/dist/_helpers/button__classes.js +39 -0
  11. package/dist/_helpers/card.js +75 -0
  12. package/dist/_helpers/checkbox.js +3 -0
  13. package/dist/_helpers/date-picker.js +3 -0
  14. package/dist/_helpers/dialog__body-scroll-preventer.js +58 -0
  15. package/dist/_helpers/error-message.js +3 -0
  16. package/dist/_helpers/footer.js +121 -0
  17. package/dist/_helpers/grid.js +3 -0
  18. package/dist/_helpers/group.js +3 -0
  19. package/dist/_helpers/header.js +3 -0
  20. package/dist/_helpers/icon.js +3 -0
  21. package/dist/_helpers/inject-styles.js +22 -0
  22. package/dist/_helpers/input.js +3 -0
  23. package/dist/_helpers/island.js +3 -0
  24. package/dist/_helpers/link.js +3 -0
  25. package/dist/_helpers/list.js +3 -0
  26. package/dist/_helpers/loader-screen.js +3 -0
  27. package/dist/_helpers/panel.js +3 -0
  28. package/dist/_helpers/query-assist__suggestions.js +95 -0
  29. package/dist/_helpers/radio.js +3 -0
  30. package/dist/_helpers/select__filter.js +77 -0
  31. package/dist/_helpers/services-link.js +40 -0
  32. package/dist/_helpers/sidebar.js +126 -0
  33. package/dist/_helpers/table.js +3 -0
  34. package/dist/_helpers/tabs.js +3 -0
  35. package/dist/_helpers/title.js +100 -0
  36. package/dist/alert/alert.js +262 -0
  37. package/dist/alert/container.js +48 -0
  38. package/dist/alert-service/alert-service.js +173 -0
  39. package/dist/analytics/analytics.js +118 -0
  40. package/dist/analytics/analytics__custom-plugin.js +128 -0
  41. package/dist/analytics/analytics__fus-plugin.js +102 -0
  42. package/dist/analytics/analytics__ga-plugin.js +75 -0
  43. package/dist/analytics/analytics__plugin-utils.js +80 -0
  44. package/dist/analytics-ng/analytics-ng.js +95 -0
  45. package/dist/auth/auth.js +96 -0
  46. package/dist/auth/auth__core.js +1065 -0
  47. package/dist/auth/background-flow.js +123 -0
  48. package/dist/auth/down-notification.js +117 -0
  49. package/dist/auth/iframe-flow.js +153 -0
  50. package/dist/auth/landing-entry.js +5 -0
  51. package/dist/auth/landing.js +90 -0
  52. package/dist/auth/request-builder.js +76 -0
  53. package/dist/auth/response-parser.js +118 -0
  54. package/dist/auth/storage.js +283 -0
  55. package/dist/auth/token-validator.js +180 -0
  56. package/dist/auth/window-flow.js +134 -0
  57. package/dist/auth-dialog/auth-dialog.js +180 -0
  58. package/dist/auth-dialog-service/auth-dialog-service.js +71 -0
  59. package/dist/auth-ng/auth-ng.js +206 -0
  60. package/dist/auth-ng/auth-ng.mock.js +33 -0
  61. package/dist/autofocus-ng/autofocus-ng.js +51 -0
  62. package/dist/avatar/avatar-example-datauri.js +4 -0
  63. package/dist/avatar/avatar.js +163 -0
  64. package/dist/avatar/fallback-avatar.js +142 -0
  65. package/dist/avatar-editor-ng/avatar-editor-ng.js +167 -0
  66. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +3 -0
  67. package/dist/avatar-ng/avatar-ng.js +21 -0
  68. package/dist/badge/badge.js +51 -0
  69. package/dist/badge-ng/badge-ng.js +18 -0
  70. package/dist/breadcrumb-ng/breadcrumb-ng.js +37 -0
  71. package/dist/button/button.js +125 -0
  72. package/dist/button/button__classes.js +5 -0
  73. package/dist/button-group/button-group.js +30 -0
  74. package/dist/button-group/caption.js +24 -0
  75. package/dist/button-group-ng/button-group-ng.js +39 -0
  76. package/dist/button-ng/button-ng.js +217 -0
  77. package/dist/button-set/button-set.js +26 -0
  78. package/dist/button-set-ng/button-set-ng.js +19 -0
  79. package/dist/button-toolbar/button-toolbar.js +29 -0
  80. package/dist/button-toolbar-ng/button-toolbar-ng.js +24 -0
  81. package/dist/caret/caret.js +266 -0
  82. package/dist/checkbox/checkbox.js +110 -0
  83. package/dist/checkbox-ng/checkbox-ng.js +38 -0
  84. package/dist/code/code.js +137 -0
  85. package/dist/compiler-ng/compiler-ng.js +53 -0
  86. package/dist/confirm/confirm.js +127 -0
  87. package/dist/confirm-ng/confirm-ng.js +69 -0
  88. package/dist/confirm-service/confirm-service.js +117 -0
  89. package/dist/content-layout/content-layout.js +66 -0
  90. package/dist/content-layout/sidebar.js +7 -0
  91. package/dist/contenteditable/contenteditable.js +78 -0
  92. package/dist/data-list/data-list.js +208 -0
  93. package/dist/data-list/data-list.mock.js +191 -0
  94. package/dist/data-list/item.js +229 -0
  95. package/dist/data-list/selection.js +102 -0
  96. package/dist/data-list/title.js +20 -0
  97. package/dist/data-list-ng/data-list-ng.js +62 -0
  98. package/dist/date-picker/consts.js +69 -0
  99. package/dist/date-picker/date-input.js +175 -0
  100. package/dist/date-picker/date-picker.js +367 -0
  101. package/dist/date-picker/date-popup.js +483 -0
  102. package/dist/date-picker/day.js +120 -0
  103. package/dist/date-picker/formats.js +3 -0
  104. package/dist/date-picker/month-names.js +100 -0
  105. package/dist/date-picker/month-slider.js +84 -0
  106. package/dist/date-picker/month.js +55 -0
  107. package/dist/date-picker/months.js +122 -0
  108. package/dist/date-picker/weekdays.js +32 -0
  109. package/dist/date-picker/years.js +110 -0
  110. package/dist/dialog/dialog.js +205 -0
  111. package/dist/dialog/dialog__body-scroll-preventer.js +3 -0
  112. package/dist/dialog-ng/dialog-ng.js +604 -0
  113. package/dist/dialog-ng/dialog-ng__template.js +3 -0
  114. package/dist/docked-panel-ng/docked-panel-ng.js +171 -0
  115. package/dist/dropdown/anchor.js +19 -0
  116. package/dist/dropdown/dropdown.js +236 -0
  117. package/dist/dropdown-menu/dropdown-menu.js +177 -0
  118. package/dist/error-bubble/error-bubble.js +59 -0
  119. package/dist/error-message/error-message.js +57 -0
  120. package/dist/error-message-ng/error-message-ng.js +35 -0
  121. package/dist/footer/footer.js +12 -0
  122. package/dist/footer-ng/footer-ng.js +64 -0
  123. package/dist/form-ng/form-ng.js +167 -0
  124. package/dist/global/angular-component-factory.js +84 -0
  125. package/dist/global/compose.js +9 -0
  126. package/dist/global/composeRefs.js +15 -0
  127. package/dist/global/conic-gradient.js +35 -0
  128. package/dist/global/create-stateful-context.js +55 -0
  129. package/dist/global/data-tests.js +24 -0
  130. package/dist/global/dom.js +125 -0
  131. package/dist/global/focus-sensor-hoc.js +146 -0
  132. package/dist/global/fuzzy-highlight.js +67 -0
  133. package/dist/global/get-event-key.js +111 -0
  134. package/dist/global/get-uid.js +15 -0
  135. package/dist/global/inject-styles.js +15 -0
  136. package/dist/global/linear-function.js +17 -0
  137. package/dist/global/listeners.js +44 -0
  138. package/dist/global/memoize.js +20 -0
  139. package/dist/global/normalize-indent.js +30 -0
  140. package/dist/global/promise-with-timeout.js +17 -0
  141. package/dist/global/radial-gradient-mask.js +38 -0
  142. package/dist/global/react-dom-renderer.js +46 -0
  143. package/dist/global/react-render-adapter.js +41 -0
  144. package/dist/global/rerender-hoc.js +55 -0
  145. package/dist/global/ring-angular-component.js +24 -0
  146. package/dist/global/schedule-raf.js +31 -0
  147. package/dist/global/sniffer.js +6 -0
  148. package/dist/global/supports-css.js +22 -0
  149. package/dist/global/theme.js +54 -0
  150. package/dist/global/trivial-template-tag.js +17 -0
  151. package/dist/global/url.js +165 -0
  152. package/dist/global/variables_dark.js +57 -0
  153. package/dist/grid/col.js +60 -0
  154. package/dist/grid/grid.js +33 -0
  155. package/dist/grid/row.js +64 -0
  156. package/dist/group/group.js +31 -0
  157. package/dist/group-ng/group-ng.js +11 -0
  158. package/dist/header/header.js +150 -0
  159. package/dist/header/logo.js +40 -0
  160. package/dist/header/profile.js +219 -0
  161. package/dist/header/services-link.js +12 -0
  162. package/dist/header/services.js +138 -0
  163. package/dist/header/smart-profile.js +233 -0
  164. package/dist/header/smart-services.js +163 -0
  165. package/dist/header/tray-icon.js +47 -0
  166. package/dist/header/tray.js +31 -0
  167. package/dist/heading/heading.js +73 -0
  168. package/dist/http/http.js +218 -0
  169. package/dist/http/http.mock.js +67 -0
  170. package/dist/hub-source/hub-source.js +130 -0
  171. package/dist/hub-source/hub-source__user.js +30 -0
  172. package/dist/hub-source/hub-source__users-groups.js +63 -0
  173. package/dist/icon/icon.js +105 -0
  174. package/dist/icon/icon__constants.js +33 -0
  175. package/dist/icon/icon__svg.js +83 -0
  176. package/dist/icon/index.js +12 -0
  177. package/dist/icon-ng/icon-ng.js +91 -0
  178. package/dist/input/input.js +230 -0
  179. package/dist/input-ng/input-ng.js +111 -0
  180. package/dist/island/adaptive-island-hoc.js +48 -0
  181. package/dist/island/content.js +160 -0
  182. package/dist/island/header.js +84 -0
  183. package/dist/island/island.js +51 -0
  184. package/dist/island-legacy/content-legacy.js +26 -0
  185. package/dist/island-legacy/header-legacy.js +28 -0
  186. package/dist/island-legacy/island-legacy.js +28 -0
  187. package/dist/island-ng/island-content-ng.js +42 -0
  188. package/dist/island-ng/island-header-ng.js +26 -0
  189. package/dist/island-ng/island-ng-class-fixer.js +11 -0
  190. package/dist/island-ng/island-ng.js +25 -0
  191. package/dist/link/clickableLink.js +64 -0
  192. package/dist/link/link.js +115 -0
  193. package/dist/link-ng/link-ng.js +22 -0
  194. package/dist/list/consts.js +26 -0
  195. package/dist/list/list.js +822 -0
  196. package/dist/list/list__custom.js +86 -0
  197. package/dist/list/list__hint.js +26 -0
  198. package/dist/list/list__item.js +206 -0
  199. package/dist/list/list__link.js +65 -0
  200. package/dist/list/list__separator.js +30 -0
  201. package/dist/list/list__title.js +39 -0
  202. package/dist/list/list__users-groups-source.js +130 -0
  203. package/dist/loader/loader.js +71 -0
  204. package/dist/loader/loader__core.js +273 -0
  205. package/dist/loader-inline/inject-styles.js +13 -0
  206. package/dist/loader-inline/loader-inline.js +58 -0
  207. package/dist/loader-inline-ng/loader-inline-ng.js +44 -0
  208. package/dist/loader-ng/loader-ng.js +44 -0
  209. package/dist/loader-screen/loader-screen.js +44 -0
  210. package/dist/loader-screen-ng/loader-screen-ng.js +95 -0
  211. package/dist/login-dialog/login-dialog.js +188 -0
  212. package/dist/login-dialog/service.js +72 -0
  213. package/dist/markdown/code.js +31 -0
  214. package/dist/markdown/heading.js +23 -0
  215. package/dist/markdown/link.js +31 -0
  216. package/dist/markdown/markdown.js +74 -0
  217. package/dist/message/message.js +235 -0
  218. package/dist/message-bundle-ng/message-bundle-ng.js +111 -0
  219. package/dist/old-browsers-message/old-browsers-message.js +101 -0
  220. package/dist/old-browsers-message/old-browsers-message__stop.js +5 -0
  221. package/dist/old-browsers-message/white-list.js +34 -0
  222. package/dist/pager/pager.js +365 -0
  223. package/dist/pager-ng/pager-ng.js +100 -0
  224. package/dist/panel/panel.js +31 -0
  225. package/dist/panel-ng/panel-ng.js +17 -0
  226. package/dist/permissions/permissions.js +200 -0
  227. package/dist/permissions/permissions__cache.js +272 -0
  228. package/dist/permissions-ng/permissions-ng.js +277 -0
  229. package/dist/place-under-ng/place-under-ng.js +158 -0
  230. package/dist/popup/popup.consts.js +41 -0
  231. package/dist/popup/popup.js +396 -0
  232. package/dist/popup/popup.target.js +26 -0
  233. package/dist/popup/position.js +280 -0
  234. package/dist/popup-menu/popup-menu.js +117 -0
  235. package/dist/progress-bar/progress-bar.js +114 -0
  236. package/dist/progress-bar-ng/progress-bar-ng.js +17 -0
  237. package/dist/promised-click-ng/promised-click-ng.js +128 -0
  238. package/dist/proxy-attrs/proxy-attrs.js +21 -0
  239. package/dist/query-assist/query-assist.js +1096 -0
  240. package/dist/query-assist/query-assist__suggestions.js +49 -0
  241. package/dist/query-assist-ng/query-assist-ng.js +86 -0
  242. package/dist/radio/radio.js +42 -0
  243. package/dist/radio/radio__item.js +78 -0
  244. package/dist/radio-ng/radio-ng.js +47 -0
  245. package/dist/save-field-ng/save-field-ng.js +337 -0
  246. package/dist/save-field-ng/save-field-ng__template.js +3 -0
  247. package/dist/select/select.js +1357 -0
  248. package/dist/select/select__filter.js +56 -0
  249. package/dist/select/select__popup.js +553 -0
  250. package/dist/select-ng/select-ng.js +637 -0
  251. package/dist/select-ng/select-ng__lazy.js +169 -0
  252. package/dist/select-ng/select-ng__options.js +145 -0
  253. package/dist/shortcuts/core.js +245 -0
  254. package/dist/shortcuts/shortcut-title.js +51 -0
  255. package/dist/shortcuts/shortcuts-hoc.js +42 -0
  256. package/dist/shortcuts/shortcuts.js +72 -0
  257. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +123 -0
  258. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +3 -0
  259. package/dist/shortcuts-ng/shortcuts-ng.js +262 -0
  260. package/dist/sidebar-ng/sidebar-ng.js +113 -0
  261. package/dist/sidebar-ng/sidebar-ng__button-template.js +3 -0
  262. package/dist/sidebar-ng/sidebar-ng__template.js +3 -0
  263. package/dist/storage/storage.js +59 -0
  264. package/dist/storage/storage__fallback.js +215 -0
  265. package/dist/storage/storage__local.js +154 -0
  266. package/dist/style.css +1 -0
  267. package/dist/tab-trap/tab-trap.js +177 -0
  268. package/dist/table/cell.js +26 -0
  269. package/dist/table/disable-hover-hoc.js +54 -0
  270. package/dist/table/header-cell.js +92 -0
  271. package/dist/table/header.js +193 -0
  272. package/dist/table/multitable.js +141 -0
  273. package/dist/table/row-with-focus-sensor.js +83 -0
  274. package/dist/table/row.js +278 -0
  275. package/dist/table/selection-adapter.js +16 -0
  276. package/dist/table/selection-shortcuts-hoc.js +215 -0
  277. package/dist/table/selection.js +223 -0
  278. package/dist/table/smart-table.js +125 -0
  279. package/dist/table/table.js +409 -0
  280. package/dist/table-legacy-ng/table-legacy-ng.js +468 -0
  281. package/dist/table-legacy-ng/table-legacy-ng__pager.js +120 -0
  282. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +123 -0
  283. package/dist/table-legacy-ng/table-legacy-ng__selection.js +179 -0
  284. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +57 -0
  285. package/dist/table-ng/smart-table-ng.js +68 -0
  286. package/dist/table-ng/table-ng.js +67 -0
  287. package/dist/tabs/collapsible-more.js +198 -0
  288. package/dist/tabs/collapsible-tab.js +91 -0
  289. package/dist/tabs/collapsible-tabs.js +362 -0
  290. package/dist/tabs/custom-item.js +13 -0
  291. package/dist/tabs/dumb-tabs.js +164 -0
  292. package/dist/tabs/smart-tabs.js +106 -0
  293. package/dist/tabs/tab-link.js +42 -0
  294. package/dist/tabs/tab.js +33 -0
  295. package/dist/tabs/tabs.js +71 -0
  296. package/dist/tabs-ng/tabs-ng.js +194 -0
  297. package/dist/tabs-ng/tabs-ng__template.js +3 -0
  298. package/dist/tag/tag.js +197 -0
  299. package/dist/tags-input/tags-input.js +482 -0
  300. package/dist/tags-input-ng/tags-input-ng.js +93 -0
  301. package/dist/tags-list/tags-list.js +95 -0
  302. package/dist/template-ng/template-ng.js +71 -0
  303. package/dist/text/text.js +36 -0
  304. package/dist/theme-ng/theme-ng.js +45 -0
  305. package/dist/title-ng/title-ng.js +114 -0
  306. package/dist/toggle/toggle.js +78 -0
  307. package/dist/toggle-ng/toggle-ng.js +18 -0
  308. package/dist/tooltip/tooltip.js +209 -0
  309. package/dist/tooltip-ng/tooltip-ng.js +104 -0
  310. package/dist/user-agreement/service.js +412 -0
  311. package/dist/user-agreement/toolbox.eula.js +3 -0
  312. package/dist/user-agreement/user-agreement.js +169 -0
  313. package/dist/user-card/card.js +19 -0
  314. package/dist/user-card/smart-user-card-tooltip.js +114 -0
  315. package/dist/user-card/tooltip.js +95 -0
  316. package/dist/user-card/user-card.js +51 -0
  317. package/dist/user-card-ng/user-card-ng.js +62 -0
  318. package/package.json +2 -2
@@ -0,0 +1,128 @@
1
+ import AnalyticsPluginUtils from './analytics__plugin-utils.js';
2
+ import 'core-js/modules/es.string.replace.js';
3
+ import '../global/sniffer.js';
4
+ import 'sniffr';
5
+
6
+ const DEFAULT_FLUSH_INTERVAL = 10000;
7
+ const DEFAULT_FLUSH_MAX_PACK_SIZE = 100;
8
+ class AnalyticsCustomPlugin {
9
+ constructor(send, isDevelopment, flushInterval, flushingAllowedChecker) {
10
+ this._data = [];
11
+ this.config({
12
+ send,
13
+ isDevelopment,
14
+ flushInterval,
15
+ flushingAllowedChecker
16
+ });
17
+ }
18
+ /**
19
+ * @param config
20
+ * @property {function} config.send
21
+ * @property {boolean} config.isDevelopment
22
+ * @property {number} config.flushInterval
23
+ * @property {function} config.flushingAllowedChecker
24
+ * @property {number} config.flushMaxPackSize
25
+ */
26
+
27
+
28
+ config(config) {
29
+ let checkFlushingAllowed = config.flushingAllowedChecker;
30
+
31
+ if (typeof checkFlushingAllowed !== 'function') {
32
+ checkFlushingAllowed = () => true;
33
+ }
34
+
35
+ this._flush = () => {
36
+ if (this._data.length > 0 && checkFlushingAllowed()) {
37
+ config.send(this._data);
38
+ this._data = [];
39
+ }
40
+ };
41
+
42
+ this._isDevelopment = config.isDevelopment;
43
+ this._flushInterval = config.flushInterval || DEFAULT_FLUSH_INTERVAL;
44
+ this._flushMaxPackSize = config.flushMaxPackSize || DEFAULT_FLUSH_MAX_PACK_SIZE;
45
+ }
46
+
47
+ trackEvent(category, action) {
48
+ this._processEvent(category, action);
49
+ }
50
+
51
+ trackPageView(path) {
52
+ if (this._lastPagePath === path) {
53
+ return;
54
+ }
55
+
56
+ this._trackPageViewAdditionalInfo(path);
57
+
58
+ this._processEvent('ring-page', path);
59
+
60
+ this._processEvent('ring-navigator_user-agent', AnalyticsPluginUtils.getUserAgentPresentation());
61
+
62
+ this._processEvent('ring-navigator_platform', AnalyticsPluginUtils.npeSaveLowerCase(navigator.platform));
63
+
64
+ this._processEvent('ring-navigator_lang', AnalyticsPluginUtils.npeSaveLowerCase(navigator.language));
65
+
66
+ this._processEvent('ring-device-pixel-ratio', AnalyticsPluginUtils.getDevicePixelRatioPresentation());
67
+
68
+ this._processEvent('ring-screen-width', AnalyticsPluginUtils.getScreenWidthPresentation());
69
+ }
70
+
71
+ _initSendSchedule() {
72
+ window.addEventListener('beforeunload', () => {
73
+ this._trackPageViewAdditionalInfo();
74
+
75
+ return this._flush();
76
+ });
77
+ setInterval(this._flush, this._flushInterval);
78
+ this._hasSendSchedule = true;
79
+ }
80
+
81
+ _processEvent(rawCategory, rawAction) {
82
+ if (!this._hasSendSchedule && this._flush) {
83
+ this._initSendSchedule();
84
+ }
85
+
86
+ const category = AnalyticsPluginUtils.reformatString(rawCategory, true);
87
+ const action = AnalyticsPluginUtils.reformatString(rawAction);
88
+
89
+ if (this._isDevelopment) {
90
+ console.log('TRACKING DATA = ', category, action); // eslint-disable-line no-console
91
+ }
92
+
93
+ this._addDataToFlushingPack({
94
+ category,
95
+ action
96
+ });
97
+ }
98
+
99
+ _trackPageViewAdditionalInfo(newPagePath) {
100
+ const currentTime = new Date().getTime();
101
+
102
+ if (this._lastPagePath) {
103
+ if (this._lastPageViewTime) {
104
+ const duration = AnalyticsPluginUtils.getPageViewDurationPresentation(currentTime - this._lastPageViewTime);
105
+
106
+ this._processEvent("ring-pageview-duration_".concat(this._lastPagePath), duration);
107
+ }
108
+ }
109
+
110
+ this._lastPageViewTime = currentTime;
111
+ this._lastPagePath = newPagePath;
112
+ }
113
+
114
+ _addDataToFlushingPack(sendingData) {
115
+ this._data.push(sendingData);
116
+
117
+ if (this._data.length >= this._flushMaxPackSize) {
118
+ this._flush();
119
+ }
120
+ }
121
+
122
+ get serializeAdditionalInfo() {
123
+ return true;
124
+ }
125
+
126
+ }
127
+
128
+ export { AnalyticsCustomPlugin as default };
@@ -0,0 +1,102 @@
1
+ import 'core-js/modules/es.string.replace.js';
2
+ import AnalyticsPluginUtils from './analytics__plugin-utils.js';
3
+ import '../global/sniffer.js';
4
+ import 'sniffr';
5
+
6
+ /**
7
+ * @name AnalyticsFUSPlugin
8
+ *
9
+ * @param * @param {{
10
+ * productId: string,
11
+ * productBuild: string,
12
+ * recorderVersion: string?,
13
+ * isDevelopment: boolean?,
14
+ * groups: object[]?
15
+ * }} config
16
+ * @constructor
17
+ */
18
+
19
+ class AnalyticsFUSPlugin {
20
+ constructor(_ref) {
21
+ let {
22
+ productId,
23
+ productBuild,
24
+ recorderVersion = '1',
25
+ isDevelopment = false,
26
+ groups = []
27
+ } = _ref;
28
+
29
+ if (!productId && !isDevelopment) {
30
+ return;
31
+ }
32
+
33
+ ((i, s, o, g, r) => {
34
+ i[r] = i[r] || function addArgumentsToQueueForWaitingTheScriptLoading() {
35
+ (i[r].query = i[r].query || []).push(arguments);
36
+ };
37
+
38
+ const script = document.createElement(o);
39
+ script.async = true;
40
+ script.src = g;
41
+ const firstScript = document.getElementsByTagName(o)[0];
42
+ firstScript.parentNode.insertBefore(script, firstScript);
43
+ })(window, document, 'script', '//resources.jetbrains.com/storage/fus/api/fus-reporting-api.js', 'fusra');
44
+ /* global fusra */
45
+
46
+
47
+ fusra('init', {
48
+ recorderCode: productId,
49
+ recorderVersion,
50
+ productCode: productId,
51
+ productBuild,
52
+ internal: isDevelopment,
53
+ groups,
54
+ useForSubdomains: true
55
+ });
56
+ this._recorderVersion = recorderVersion;
57
+ this._groups = groups;
58
+ }
59
+
60
+ trackEvent(category, action, additionalInfo) {
61
+ this._processEvent(category, action, additionalInfo);
62
+ }
63
+
64
+ trackPageView(path) {
65
+ if (this._lastPagePath === path) {
66
+ return;
67
+ }
68
+
69
+ this._lastPagePath = path;
70
+
71
+ this._processEvent('ring.page.view', 'open', {
72
+ path,
73
+ browser: AnalyticsPluginUtils.getUserAgentPresentation(),
74
+ platform: AnalyticsPluginUtils.npeSaveLowerCase(navigator.platform),
75
+ lang: AnalyticsPluginUtils.npeSaveLowerCase(navigator.language),
76
+ ['page-view-duration']: AnalyticsPluginUtils.getPageViewDurationPresentation(),
77
+ ['pixel-ratio']: AnalyticsPluginUtils.getDevicePixelRatioPresentation(),
78
+ screen: AnalyticsPluginUtils.getScreenWidthPresentation()
79
+ });
80
+ }
81
+
82
+ get serializeAdditionalInfo() {
83
+ return false;
84
+ }
85
+
86
+ _processEvent(category, action, additionalInfo) {
87
+ const groupId = category.replace(/[-]/g, '.');
88
+ const group = (this._groups || []).filter(currentGroup => currentGroup.id === groupId)[0];
89
+
90
+ if (group && window.fusra) {
91
+ fusra('event', {
92
+ groupId,
93
+ groupVersion: group.version || this._recorderVersion,
94
+ eventId: action,
95
+ eventData: additionalInfo
96
+ });
97
+ }
98
+ }
99
+
100
+ }
101
+
102
+ export { AnalyticsFUSPlugin as default };
@@ -0,0 +1,75 @@
1
+ /**
2
+ *
3
+ * @param {string?} gaId Google Analytics ID (should be undefined in development)
4
+ * @constructor
5
+ */
6
+ class AnalyticsGAPlugin {
7
+ constructor(gaId, isDevelopment, domain, cookielessUserIdentifier) {
8
+ if (!gaId && !isDevelopment) {
9
+ return;
10
+ }
11
+
12
+ ((i, s, o, g, r) => {
13
+ i.GoogleAnalyticsObject = r;
14
+
15
+ i[r] = i[r] || function addArgumentsToQueueForWaitingTheScriptLoading() {
16
+ (i[r].q = i[r].q || []).push(arguments);
17
+ };
18
+
19
+ i[r].l = 1 * new Date();
20
+ const a = s.createElement(o);
21
+ const m = s.getElementsByTagName(o)[0];
22
+ a.async = 1;
23
+ a.src = g;
24
+ m.parentNode.insertBefore(a, m);
25
+ })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
26
+ /**
27
+ * UA-57284711-1 - ga key for development purpose
28
+ */
29
+
30
+
31
+ const key = gaId || 'UA-57284711-1';
32
+ /* global ga */
33
+
34
+ if (cookielessUserIdentifier) {
35
+ ga('create', key, {
36
+ storage: 'none',
37
+ clientId: cookielessUserIdentifier
38
+ });
39
+ } else {
40
+ const gaCookieParams = domain ? {
41
+ cookieDomain: domain
42
+ } : {};
43
+ ga('create', key, !gaId ? {
44
+ cookieDomain: 'none'
45
+ } : gaCookieParams);
46
+ }
47
+
48
+ ga('set', 'anonymizeIp', true);
49
+ ga('set', 'location', domain || '/');
50
+ ga('set', 'allowAdFeatures', false);
51
+ }
52
+
53
+ trackEvent(category, action) {
54
+ if (window.ga) {
55
+ const eventOptions = {
56
+ eventCategory: category,
57
+ eventAction: action
58
+ };
59
+ ga('send', 'event', eventOptions);
60
+ }
61
+ }
62
+
63
+ trackPageView(path) {
64
+ if (window.ga) {
65
+ ga('send', 'pageview', path);
66
+ }
67
+ }
68
+
69
+ get serializeAdditionalInfo() {
70
+ return true;
71
+ }
72
+
73
+ }
74
+
75
+ export { AnalyticsGAPlugin as default };
@@ -0,0 +1,80 @@
1
+ import 'core-js/modules/es.string.replace.js';
2
+ import sniffr from '../global/sniffer.js';
3
+ import 'sniffr';
4
+
5
+ const AnalyticsPluginUtils = {};
6
+ const SECOND = 1000;
7
+ const HOUR = 3600;
8
+ /**
9
+ * Statistics server does not accept undefined values and strings containing certain symbols
10
+ * @param value
11
+ * @param isCategory
12
+ * @returns string, where forbidden symbols are replaced with '_'
13
+ */
14
+
15
+ AnalyticsPluginUtils.reformatString = (value, isCategory) => {
16
+ const str = String(value);
17
+ /**
18
+ * Category also cannot contain the '/' character (but an action can)
19
+ */
20
+
21
+ const regexp = isCategory ? /[.:;!@#^&*(){}\[\]?,%=+\\\/]+/g : /[.:;!@#^&*(){}\[\]?,%=+\\]+/g;
22
+ return str.replace(regexp, '_');
23
+ };
24
+
25
+ AnalyticsPluginUtils.getPageViewDurationPresentation = durationMs => {
26
+ const duration = durationMs / SECOND;
27
+
28
+ if (duration > HOUR) {
29
+ return 'more-than-hour';
30
+ }
31
+ /**
32
+ * rounded duration possible values:
33
+ * less than 1 second: [0, 1)
34
+ * less than 2 seconds: [1, 2)
35
+ * less than 4 seconds: [2, 4)
36
+ * less than 16 seconds: [4, 16)
37
+ * ....
38
+ * n - less than 2^(n + 1) seconds
39
+ */
40
+
41
+
42
+ let roundedDuration = Math.floor(Math.pow(2, Math.floor(Math.log2(duration)) + 1));
43
+ roundedDuration = roundedDuration > 0 ? roundedDuration : 1;
44
+ return "less-than-".concat(roundedDuration, "-sec");
45
+ };
46
+
47
+ AnalyticsPluginUtils.getScreenWidthPresentation = () => {
48
+ /**
49
+ * Sizes were taken from bootstrap's grid (xs, sm, md, lg)
50
+ */
51
+ // eslint-disable-next-line no-magic-numbers
52
+ const sizes = [0, 768, 992, 1200];
53
+
54
+ for (let i = 1; i < sizes.length; ++i) {
55
+ if (window.innerWidth < sizes[i]) {
56
+ return "[".concat(sizes[i - 1], "px;").concat(sizes[i], "px)");
57
+ }
58
+ }
59
+
60
+ return '[1200px;inf)';
61
+ };
62
+
63
+ AnalyticsPluginUtils.npeSaveLowerCase = val => (val || 'unknown').toLowerCase();
64
+
65
+ AnalyticsPluginUtils.getUserAgentPresentation = () => {
66
+ const name = AnalyticsPluginUtils.npeSaveLowerCase(sniffr.browser.name || 'unknown');
67
+ const majorVersion = sniffr.browser.version[0];
68
+ const version = majorVersion || 'unknown';
69
+ return "".concat(name, "$").concat(version);
70
+ };
71
+
72
+ AnalyticsPluginUtils.getDevicePixelRatioPresentation = () => {
73
+ if (!window.devicePixelRatio || !window.devicePixelRatio.toFixed) {
74
+ return 'unknown';
75
+ }
76
+
77
+ return String(window.devicePixelRatio.toFixed(1));
78
+ };
79
+
80
+ export { AnalyticsPluginUtils as default };
@@ -0,0 +1,95 @@
1
+ import angular from 'angular';
2
+ import analyticsInstance from '../analytics/analytics.js';
3
+ import AnalyticsGAPlugin from '../analytics/analytics__ga-plugin.js';
4
+ import AnalyticsFUSPlugin from '../analytics/analytics__fus-plugin.js';
5
+ import AnalyticsCustomPlugin from '../analytics/analytics__custom-plugin.js';
6
+ import 'core-js/modules/es.string.replace.js';
7
+ import '../analytics/analytics__plugin-utils.js';
8
+ import '../global/sniffer.js';
9
+ import 'sniffr';
10
+
11
+ /**
12
+ * @name Analytics Ng
13
+ */
14
+
15
+ const angularModule = angular.module('Ring.analytics', []);
16
+ /**
17
+ * @name analyticsProvider
18
+ * @description Configures analytics with plugins.
19
+ */
20
+
21
+ angularModule.provider('analytics', function provider() {
22
+ let configPlugins = [];
23
+ /**
24
+ * @param plugins
25
+ */
26
+
27
+ this.plugins = plugins => {
28
+ configPlugins = plugins;
29
+ };
30
+
31
+ this.$get = ["$log", "$injector", function get($log, $injector) {
32
+ const loadedPlugins = [];
33
+
34
+ for (let i = 0; i < configPlugins.length; ++i) {
35
+ if (typeof configPlugins[i] === 'string') {
36
+ try {
37
+ const plugin = $injector.get(configPlugins[i]);
38
+ loadedPlugins.push(plugin);
39
+ $log.debug("analytics: loaded plugin ".concat(configPlugins[i]));
40
+ } catch (err) {
41
+ $log.debug("analytics: unable to load factory ".concat(configPlugins[i]));
42
+ }
43
+ } else {
44
+ loadedPlugins.push(configPlugins[i]);
45
+ }
46
+ }
47
+
48
+ analyticsInstance.config(loadedPlugins);
49
+ return analyticsInstance;
50
+ }];
51
+ });
52
+ angularModule.constant('AnalyticsGAPlugin', AnalyticsGAPlugin);
53
+ angularModule.constant('AnalyticsCustomPlugin', AnalyticsCustomPlugin);
54
+ angularModule.constant('AnalyticsFUSPlugin', AnalyticsFUSPlugin);
55
+ /**
56
+ * Enable page tracking
57
+ */
58
+
59
+ angularModule.run(["$rootScope", "analytics", function analyticsRun($rootScope, analytics) {
60
+ $rootScope.$on('$routeChangeSuccess', (evt, current) => {
61
+ // eslint-disable-line angular/on-watch
62
+
63
+ /* eslint-disable angular/no-private-call */
64
+ if (current && current.$$route && current.$$route.originalPath) {
65
+ analytics.trackPageView(current.$$route.originalPath);
66
+ }
67
+ /* eslint-enable angular/no-private-call */
68
+
69
+ });
70
+ }]);
71
+ /**
72
+ * @ngdoc directive
73
+ * @name rg-analytics
74
+ *
75
+ * @description
76
+ * The `rg-analytics="<categoryName>:<eventName>"` sends categoryName and eventName to analytics server on
77
+ * user action, specified via attribute `rg-analytics-on` (e.g. rg-analytics-on='mouseover' means that analytics will be sent on mouseover,
78
+ * rg-analytics-on='click' - on click). If there is no attribute rg-analytics-on, the default value 'click' is used.
79
+ */
80
+
81
+ angularModule.directive('rgAnalytics', ["analytics", function rgAnalyticsDirective(analytics) {
82
+ return {
83
+ restrict: 'A',
84
+ replace: false,
85
+ link: function link($scope, elem) {
86
+ const eventType = elem.attr('rg-analytics-on') || 'click';
87
+ angular.element(elem).bind(eventType, () => {
88
+ analytics.track(elem.attr('rg-analytics'));
89
+ });
90
+ }
91
+ };
92
+ }]);
93
+ var analyticsNg = angularModule.name;
94
+
95
+ export { analyticsNg as default };
@@ -0,0 +1,96 @@
1
+ import WindowFlow from './window-flow.js';
2
+ import onBackendDown from './down-notification.js';
3
+ import Auth from './auth__core.js';
4
+ export { DEFAULT_BACKGROUND_TIMEOUT, DEFAULT_EXPIRES_TIMEOUT, DOMAIN_USER_CHANGED_EVENT, LOGOUT_EVENT, LOGOUT_POSTPONED_EVENT, USER_CHANGED_EVENT, USER_CHANGE_POSTPONED_EVENT, default } from './auth__core.js';
5
+ import '../_helpers/_rollupPluginBabelHelpers.js';
6
+ import './response-parser.js';
7
+ import 'core-js/modules/es.string.replace.js';
8
+ import 'es6-error';
9
+ import '../global/url.js';
10
+ import 'react';
11
+ import 'prop-types';
12
+ import '../alert-service/alert-service.js';
13
+ import 'core-js/modules/web.dom-collections.iterator.js';
14
+ import '../global/react-render-adapter.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 '../global/listeners.js';
47
+ import '../http/http.js';
48
+ import '../global/promise-with-timeout.js';
49
+ import './storage.js';
50
+ import '../storage/storage.js';
51
+ import '../storage/storage__local.js';
52
+ import '../storage/storage__fallback.js';
53
+ import 'deep-equal';
54
+ import './request-builder.js';
55
+ import 'simply-uuid';
56
+ import './background-flow.js';
57
+ import './token-validator.js';
58
+
59
+ /**
60
+ * @name Auth
61
+ *
62
+ * @prop {object} config
63
+ * @prop {string} config.serverUri
64
+ * @prop {string} config.redirectUri
65
+ * @prop {string} config.clientId
66
+ * @prop {boolean=false} config.redirect — use redirects instead of loading the token in the background.
67
+ * @prop {string[]} config.scope
68
+ * @prop {string[]} config.optionalScopes
69
+ * @prop {boolean} config.cleanHash - whether or not location.hash will be cleaned after authorization is completed.
70
+ * Should be set to false in angular > 1.2.26 apps to prevent infinite redirect in Firefox
71
+ * @prop {User?} user
72
+ * @prop {string[]} config.userFields List of user data fields to be returned by auth.requestUser (default list is used in Header.HeaderHelper)
73
+ * @prop {string[]} config.fetchCredentials
74
+ *
75
+ * @param {{
76
+ * serverUri: string,
77
+ * redirectUri: string?,
78
+ * requestCredentials: string?,
79
+ * clientId: string?,
80
+ * scope: string[]?,
81
+ * optionalScopes: string[]?,
82
+ * cleanHash: boolean?,
83
+ * fetchCredentials: string?,
84
+ * userFields: string[]?
85
+ * }} config
86
+ *
87
+ */
88
+
89
+ /**
90
+ * Extend Auth config with non-required and not pure-JS stuff
91
+ */
92
+
93
+ Auth.DEFAULT_CONFIG = { ...Auth.DEFAULT_CONFIG,
94
+ EmbeddedLoginFlow: WindowFlow,
95
+ onBackendDown: onBackendDown
96
+ };