@teipublisher/pb-components 2.26.0-next-3.12 → 2.26.0-next-3.13

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 (132) hide show
  1. package/.github/workflows/main.yml +3 -3
  2. package/.github/workflows/node.js.yml +3 -3
  3. package/.github/workflows/release.js.yml +3 -3
  4. package/CHANGELOG.md +30 -0
  5. package/Dockerfile +78 -70
  6. package/css/components.css +5 -5
  7. package/dist/demo/pb-drawer2.html +1 -1
  8. package/dist/demo/pb-leaflet-map.html +1 -1
  9. package/dist/demo/pb-progress.html +2 -2
  10. package/dist/demo/pb-repeat.html +1 -3
  11. package/dist/demo/pb-view3.html +1 -1
  12. package/dist/{paper-icon-button-0fb125c4.js → paper-icon-button-72125e67.js} +1 -1
  13. package/dist/pb-code-editor.js +25 -20
  14. package/dist/pb-component-docs.js +58 -54
  15. package/dist/pb-components-bundle.js +1937 -1782
  16. package/dist/pb-edit-app.js +167 -107
  17. package/dist/pb-elements.json +45 -45
  18. package/dist/{pb-i18n-0611135a.js → pb-i18n-4cc00bfe.js} +1 -1
  19. package/dist/pb-leaflet-map.js +23 -23
  20. package/dist/pb-mei.js +56 -41
  21. package/dist/{pb-mixin-b1caa22e.js → pb-mixin-886ece32.js} +1 -1
  22. package/dist/pb-odd-editor.js +923 -756
  23. package/dist/pb-tify.js +2 -2
  24. package/dist/{vaadin-element-mixin-49ab4037.js → vaadin-element-mixin-84fb7d82.js} +178 -163
  25. package/gh-pages.js +5 -3
  26. package/i18n/common/pl.json +2 -2
  27. package/lib/openseadragon.min.js +1 -1
  28. package/package.json +2 -2
  29. package/pb-elements.json +45 -45
  30. package/src/assets/components.css +5 -5
  31. package/src/authority/airtable.js +20 -21
  32. package/src/authority/anton.js +129 -129
  33. package/src/authority/custom.js +23 -21
  34. package/src/authority/geonames.js +38 -32
  35. package/src/authority/gnd.js +47 -42
  36. package/src/authority/kbga.js +137 -134
  37. package/src/authority/metagrid.js +44 -46
  38. package/src/authority/reconciliation.js +66 -67
  39. package/src/authority/registry.js +4 -4
  40. package/src/docs/pb-component-docs.js +2 -2
  41. package/src/docs/pb-component-view.js +5 -5
  42. package/src/docs/pb-components-list.js +2 -2
  43. package/src/docs/pb-demo-snippet.js +2 -2
  44. package/src/dts-client.js +299 -297
  45. package/src/dts-select-endpoint.js +90 -82
  46. package/src/parse-date-service.js +184 -135
  47. package/src/pb-ajax.js +150 -146
  48. package/src/pb-authority-lookup.js +183 -146
  49. package/src/pb-autocomplete.js +292 -280
  50. package/src/pb-blacklab-highlight.js +264 -259
  51. package/src/pb-blacklab-results.js +236 -221
  52. package/src/pb-browse-docs.js +540 -475
  53. package/src/pb-browse.js +68 -65
  54. package/src/pb-clipboard.js +79 -76
  55. package/src/pb-code-editor.js +110 -102
  56. package/src/pb-code-highlight.js +209 -204
  57. package/src/pb-codepen.js +79 -72
  58. package/src/pb-collapse.js +212 -207
  59. package/src/pb-combo-box.js +190 -190
  60. package/src/pb-components-bundle.js +1 -1
  61. package/src/pb-custom-form.js +151 -149
  62. package/src/pb-dialog.js +94 -85
  63. package/src/pb-document.js +89 -90
  64. package/src/pb-download.js +210 -198
  65. package/src/pb-drawer.js +145 -148
  66. package/src/pb-edit-app.js +301 -229
  67. package/src/pb-edit-xml.js +98 -96
  68. package/src/pb-events.js +114 -107
  69. package/src/pb-facs-link.js +104 -102
  70. package/src/pb-facsimile.js +411 -413
  71. package/src/pb-formula.js +151 -153
  72. package/src/pb-geolocation.js +129 -131
  73. package/src/pb-grid-action.js +53 -56
  74. package/src/pb-grid.js +231 -228
  75. package/src/pb-highlight.js +140 -140
  76. package/src/pb-hotkeys.js +40 -42
  77. package/src/pb-i18n.js +101 -104
  78. package/src/pb-image-strip.js +84 -78
  79. package/src/pb-lang.js +132 -128
  80. package/src/pb-leaflet-map.js +488 -485
  81. package/src/pb-link.js +126 -124
  82. package/src/pb-load.js +431 -426
  83. package/src/pb-login.js +291 -248
  84. package/src/pb-manage-odds.js +364 -318
  85. package/src/pb-map-icon.js +89 -89
  86. package/src/pb-map-layer.js +85 -85
  87. package/src/pb-markdown.js +90 -99
  88. package/src/pb-media-query.js +74 -72
  89. package/src/pb-mei.js +306 -295
  90. package/src/pb-message.js +144 -144
  91. package/src/pb-mixin.js +269 -264
  92. package/src/pb-navigation.js +80 -82
  93. package/src/pb-observable.js +38 -38
  94. package/src/pb-odd-editor.js +1053 -955
  95. package/src/pb-odd-elementspec-editor.js +348 -297
  96. package/src/pb-odd-model-editor.js +1061 -901
  97. package/src/pb-odd-parameter-editor.js +200 -178
  98. package/src/pb-odd-rendition-editor.js +136 -124
  99. package/src/pb-page.js +431 -421
  100. package/src/pb-paginate.js +202 -190
  101. package/src/pb-panel.js +191 -179
  102. package/src/pb-popover-themes.js +7 -5
  103. package/src/pb-popover.js +296 -287
  104. package/src/pb-print-preview.js +127 -127
  105. package/src/pb-progress.js +51 -51
  106. package/src/pb-repeat.js +105 -104
  107. package/src/pb-restricted.js +84 -77
  108. package/src/pb-search.js +252 -241
  109. package/src/pb-select-feature.js +127 -120
  110. package/src/pb-select-odd.js +132 -124
  111. package/src/pb-select-template.js +89 -78
  112. package/src/pb-select.js +251 -227
  113. package/src/pb-split-list.js +179 -174
  114. package/src/pb-svg.js +80 -79
  115. package/src/pb-table-column.js +54 -54
  116. package/src/pb-table-grid.js +221 -203
  117. package/src/pb-tabs.js +61 -63
  118. package/src/pb-tify.js +154 -154
  119. package/src/pb-timeline.js +271 -229
  120. package/src/pb-toggle-feature.js +182 -175
  121. package/src/pb-upload.js +184 -174
  122. package/src/pb-version.js +30 -30
  123. package/src/pb-view-annotate.js +132 -98
  124. package/src/pb-view.js +1289 -1270
  125. package/src/pb-zoom.js +75 -59
  126. package/src/polymer-hack.js +1 -1
  127. package/src/search-result-service.js +256 -223
  128. package/src/seed-element.js +13 -20
  129. package/src/settings.js +4 -4
  130. package/src/theming.js +96 -96
  131. package/src/urls.js +289 -289
  132. package/src/utils.js +53 -51
package/src/pb-login.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { LitElement, html, css } from 'lit-element';
2
2
  import { pbMixin, waitOnce } from './pb-mixin.js';
3
- import { translate } from "./pb-i18n.js";
4
- import { registry } from "./urls.js";
3
+ import { translate } from './pb-i18n.js';
4
+ import { registry } from './urls.js';
5
5
  import '@polymer/iron-ajax';
6
6
  import { minVersion } from './utils.js';
7
7
  import './pb-dialog.js';
@@ -18,166 +18,209 @@ import { themableMixin } from './theming.js';
18
18
  * @csspart group-invalid - Text displayed if login is invalid concerning group
19
19
  */
20
20
  export class PbLogin extends themableMixin(pbMixin(LitElement)) {
21
- static get properties() {
22
- return {
23
- ...super.properties,
24
- /** True if user is currently logged in */
25
- loggedIn: {
26
- type: Boolean,
27
- attribute: 'logged-in',
28
- reflect: true
29
- },
30
- /**
31
- * The currently logged in user.
32
- */
33
- user: {
34
- type: String
35
- },
36
- password: {
37
- type: String
38
- },
39
- /**
40
- * If set, only users being members of the specified group are
41
- * allowed to log in.
42
- * Multiple groups can be defined separating items by space and/or comma.
43
- */
44
- group: {
45
- type: String
46
- },
47
- /**
48
- * Array of groups the current user is a member of.
49
- */
50
- groups: {
51
- type: Array
52
- },
53
- /**
54
- * If set to true, automatically show login dialog if user is not logged in
55
- */
56
- auto: {
57
- type: Boolean
58
- },
59
- /**
60
- * Label to show if not logged in
61
- */
62
- loginLabel: {
63
- type: String,
64
- reflect: true,
65
- attribute: 'login-label'
66
- },
67
- /**
68
- * Label to show before user name if logged in
69
- */
70
- logoutLabel: {
71
- type: String,
72
- reflect: true,
73
- attribute: 'logout-label'
74
- },
75
- loginIcon: {
76
- type: String,
77
- attribute: 'login-icon'
78
- },
79
- logoutIcon: {
80
- type: String,
81
- attribute: 'logout-icon'
82
- },
83
- _invalid: {
84
- type: Boolean
85
- },
86
- _hasFocus: {
87
- type: Boolean
88
- }
89
- };
90
- }
21
+ static get properties() {
22
+ return {
23
+ ...super.properties,
24
+ /** True if user is currently logged in */
25
+ loggedIn: {
26
+ type: Boolean,
27
+ attribute: 'logged-in',
28
+ reflect: true,
29
+ },
30
+ /**
31
+ * The currently logged in user.
32
+ */
33
+ user: {
34
+ type: String,
35
+ },
36
+ password: {
37
+ type: String,
38
+ },
39
+ /**
40
+ * If set, only users being members of the specified group are
41
+ * allowed to log in.
42
+ * Multiple groups can be defined separating items by space and/or comma.
43
+ */
44
+ group: {
45
+ type: String,
46
+ },
47
+ /**
48
+ * Array of groups the current user is a member of.
49
+ */
50
+ groups: {
51
+ type: Array,
52
+ },
53
+ /**
54
+ * If set to true, automatically show login dialog if user is not logged in
55
+ */
56
+ auto: {
57
+ type: Boolean,
58
+ },
59
+ /**
60
+ * Label to show if not logged in
61
+ */
62
+ loginLabel: {
63
+ type: String,
64
+ reflect: true,
65
+ attribute: 'login-label',
66
+ },
67
+ /**
68
+ * Label to show before user name if logged in
69
+ */
70
+ logoutLabel: {
71
+ type: String,
72
+ reflect: true,
73
+ attribute: 'logout-label',
74
+ },
75
+ loginIcon: {
76
+ type: String,
77
+ attribute: 'login-icon',
78
+ },
79
+ logoutIcon: {
80
+ type: String,
81
+ attribute: 'logout-icon',
82
+ },
83
+ _invalid: {
84
+ type: Boolean,
85
+ },
86
+ _hasFocus: {
87
+ type: Boolean,
88
+ },
89
+ };
90
+ }
91
91
 
92
- constructor() {
93
- super();
94
- this.loggedIn = false;
95
- this.loginLabel = 'login.login';
96
- this.logoutLabel = 'login.as';
97
- this.user = '';
98
- this.groups = [];
99
- this.loginIcon = 'account-circle';
100
- this.logoutIcon = 'supervisor-account';
101
- this._hasFocus = true;
102
- }
92
+ constructor() {
93
+ super();
94
+ this.loggedIn = false;
95
+ this.loginLabel = 'login.login';
96
+ this.logoutLabel = 'login.as';
97
+ this.user = '';
98
+ this.groups = [];
99
+ this.loginIcon = 'account-circle';
100
+ this.logoutIcon = 'supervisor-account';
101
+ this._hasFocus = true;
102
+ }
103
103
 
104
- firstUpdated() {
105
- super.firstUpdated();
106
- this._checkLogin = this.shadowRoot.getElementById('checkLogin');
107
- this._loginDialog = this.shadowRoot.querySelector('pb-dialog');
104
+ firstUpdated() {
105
+ super.firstUpdated();
106
+ this._checkLogin = this.shadowRoot.getElementById('checkLogin');
107
+ this._loginDialog = this.shadowRoot.querySelector('pb-dialog');
108
108
 
109
- this.renderRoot.querySelector('form').addEventListener('submit', (e) => {
110
- e.preventDefault();
111
- this._confirmLogin();
112
- });
109
+ this.renderRoot.querySelector('form').addEventListener('submit', e => {
110
+ e.preventDefault();
111
+ this._confirmLogin();
112
+ });
113
113
 
114
- window.addEventListener('blur', () => {
115
- this._hasFocus = false;
116
- });
117
- window.addEventListener('focus', () => {
118
- if (!this._hasFocus) {
119
- this._hasFocus = true;
120
- this._checkLogin.body = null;
121
- this._checkLogin.generateRequest();
122
- }
123
- });
124
- waitOnce('pb-page-ready', (detail) => {
125
- if (minVersion(detail.apiVersion, '1.0.0')) {
126
- this._checkLogin.url = `${detail.endpoint}/api/login/`;
127
- } else {
128
- this._checkLogin.url = `${detail.endpoint}/login`;
129
- }
130
- this._checkLogin.body = {
131
- user: this.user,
132
- password: this.password
133
- };
134
- this._checkLogin.generateRequest();
135
- });
136
- this.addEventListener('keyup', event => {
137
- if (event.keyCode === 13) {
138
- event.preventDefault();
139
- this._confirmLogin();
140
- }
141
- });
142
- }
114
+ window.addEventListener('blur', () => {
115
+ this._hasFocus = false;
116
+ });
117
+ window.addEventListener('focus', () => {
118
+ if (!this._hasFocus) {
119
+ this._hasFocus = true;
120
+ this._checkLogin.body = null;
121
+ this._checkLogin.generateRequest();
122
+ }
123
+ });
124
+ waitOnce('pb-page-ready', detail => {
125
+ if (minVersion(detail.apiVersion, '1.0.0')) {
126
+ this._checkLogin.url = `${detail.endpoint}/api/login/`;
127
+ } else {
128
+ this._checkLogin.url = `${detail.endpoint}/login`;
129
+ }
130
+ this._checkLogin.body = {
131
+ user: this.user,
132
+ password: this.password,
133
+ };
134
+ this._checkLogin.generateRequest();
135
+ });
136
+ this.addEventListener('keyup', event => {
137
+ if (event.keyCode === 13) {
138
+ event.preventDefault();
139
+ this._confirmLogin();
140
+ }
141
+ });
142
+ }
143
143
 
144
- render() {
145
- return html`
146
- <a href="#" @click="${this._show}" title="${this.user ? this.user : this.loginLabel}" part="trigger">
144
+ render() {
145
+ return html`
146
+ <a href="#" @click="${this._show}" title="${
147
+ this.user ? this.user : this.loginLabel
148
+ }" part="trigger">
147
149
  ${
148
- this.loggedIn ?
149
- html`
150
- <slot name="icon-logout" part="icon">
151
- <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-check" viewBox="0 0 16 16" part="icon">
152
- <path d="M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m1.679-4.493-1.335 2.226a.75.75 0 0 1-1.174.144l-.774-.773a.5.5 0 0 1 .708-.708l.547.548 1.17-1.951a.5.5 0 1 1 .858.514M11 5a3 3 0 1 1-6 0 3 3 0 0 1 6 0M8 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4"/>
153
- <path d="M8.256 14a4.5 4.5 0 0 1-.229-1.004H3c.001-.246.154-.986.832-1.664C4.484 10.68 5.711 10 8 10q.39 0 .74.025c.226-.341.496-.65.804-.918Q8.844 9.002 8 9c-5 0-6 3-6 4s1 1 1 1z"/>
154
- </svg>
155
- </slot>
156
- ` :
157
- html`
158
- <slot name="icon-login">
159
- <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person" viewBox="0 0 16 16" part="icon">
160
- <path d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6m2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0m4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4m-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10s-3.516.68-4.168 1.332c-.678.678-.83 1.418-.832 1.664z"/>
161
- </svg>
162
- </slot>
163
- `
150
+ this.loggedIn
151
+ ? html`
152
+ <slot name="icon-logout" part="icon">
153
+ <svg
154
+ xmlns="http://www.w3.org/2000/svg"
155
+ width="16"
156
+ height="16"
157
+ fill="currentColor"
158
+ class="bi bi-person-check"
159
+ viewBox="0 0 16 16"
160
+ part="icon"
161
+ >
162
+ <path
163
+ d="M12.5 16a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7m1.679-4.493-1.335 2.226a.75.75 0 0 1-1.174.144l-.774-.773a.5.5 0 0 1 .708-.708l.547.548 1.17-1.951a.5.5 0 1 1 .858.514M11 5a3 3 0 1 1-6 0 3 3 0 0 1 6 0M8 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4"
164
+ />
165
+ <path
166
+ d="M8.256 14a4.5 4.5 0 0 1-.229-1.004H3c.001-.246.154-.986.832-1.664C4.484 10.68 5.711 10 8 10q.39 0 .74.025c.226-.341.496-.65.804-.918Q8.844 9.002 8 9c-5 0-6 3-6 4s1 1 1 1z"
167
+ />
168
+ </svg>
169
+ </slot>
170
+ `
171
+ : html`
172
+ <slot name="icon-login">
173
+ <svg
174
+ xmlns="http://www.w3.org/2000/svg"
175
+ width="16"
176
+ height="16"
177
+ fill="currentColor"
178
+ class="bi bi-person"
179
+ viewBox="0 0 16 16"
180
+ part="icon"
181
+ >
182
+ <path
183
+ d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6m2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0m4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4m-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10s-3.516.68-4.168 1.332c-.678.678-.83 1.418-.832 1.664z"
184
+ />
185
+ </svg>
186
+ </slot>
187
+ `
164
188
  }
165
- <span class="label" part="label">${translate(this.loggedIn ? this.logoutLabel : this.loginLabel, { user: this.user })}</span>
189
+ <span class="label" part="label">${translate(
190
+ this.loggedIn ? this.logoutLabel : this.loginLabel,
191
+ { user: this.user },
192
+ )}</span>
166
193
  </a>
167
194
 
168
195
  <form action="login">
169
196
  <pb-dialog ?modal="${this.auto}">
170
197
  <div slot="title">${translate('login.login')}</div>
171
198
  <label>
172
- ${ translate('login.user') }
173
- <input name="user" value="${this.user}" autofocus placeholder="${translate('login.user')}"></input>
199
+ ${translate('login.user')}
200
+ <input name="user" .value="${this.user}" autofocus placeholder="${translate(
201
+ 'login.user',
202
+ )}"></input>
174
203
  </label>
175
204
  <label>
176
- ${ translate('login.password') }
177
- <input name="password" type="password" placeholder="${translate('login.password')}"></input>
205
+ ${translate('login.password')}
206
+ <input name="password" type="password" placeholder="${translate(
207
+ 'login.password',
208
+ )}"></input>
178
209
  </label>
179
210
  <slot name="information"></slot>
180
- ${ this._invalid ? html`<p id="message" part="message-invalid">${translate('login.invalid')}<span part="group-invalid">${this.group ? html` (${translate('login.requiredGroup', { group: this.group })})` : null}</span>.</p>` : null }
211
+ ${
212
+ this._invalid
213
+ ? html`<p id="message" part="message-invalid">
214
+ ${translate('login.invalid')}<span part="group-invalid"
215
+ >${this.group
216
+ ? html` (${translate('login.requiredGroup', {
217
+ group: this.group,
218
+ })})`
219
+ : null}</span
220
+ >.
221
+ </p>`
222
+ : null
223
+ }
181
224
  <button autofocus slot="footer">${translate('login.login')}</button>
182
225
  </pb-dialog>
183
226
  </form>
@@ -187,122 +230,122 @@ export class PbLogin extends themableMixin(pbMixin(LitElement)) {
187
230
  method="post"
188
231
  content-type="application/x-www-form-urlencoded"></iron-ajax>
189
232
  `;
190
- }
233
+ }
191
234
 
192
- _show(ev) {
193
- ev.preventDefault();
194
- if (this.loggedIn) {
195
- this._checkLogin.body = {
196
- logout: this.user
197
- };
198
- this._checkLogin.generateRequest();
199
- } else {
200
- this._loginDialog.openDialog();
201
- }
235
+ _show(ev) {
236
+ ev.preventDefault();
237
+ if (this.loggedIn) {
238
+ this._checkLogin.body = {
239
+ logout: this.user,
240
+ };
241
+ this._checkLogin.generateRequest();
242
+ } else {
243
+ this._loginDialog.openDialog();
202
244
  }
245
+ }
203
246
 
204
- _confirmLogin() {
205
- this.user = this.renderRoot.querySelector('input[name="user"]').value;
206
- this.password = this.renderRoot.querySelector('input[name="password"]').value;
207
- this._checkLogin.body = {
208
- user: this.user,
209
- password: this.password
210
- };
211
- this._checkLogin.generateRequest();
212
- }
247
+ _confirmLogin() {
248
+ this.user = this.renderRoot.querySelector('input[name="user"]').value;
249
+ this.password = this.renderRoot.querySelector('input[name="password"]').value;
250
+ this._checkLogin.body = {
251
+ user: this.user,
252
+ password: this.password,
253
+ };
254
+ this._checkLogin.generateRequest();
255
+ }
213
256
 
214
- _handleResponse() {
215
- const resp = this._checkLogin.lastResponse;
216
- if (resp.user && this._checkGroup(resp)) {
217
- resp.userChanged = !this.loggedIn || this.user !== resp.user;
218
- this.loggedIn = true;
219
- this.user = resp.user;
220
- this.groups = resp.groups;
221
- this._invalid = false;
222
- this._loginDialog.closeDialog();
223
- } else {
224
- resp.userChanged = this.loggedIn;
225
- this.loggedIn = false;
226
- this.password = null;
227
- if (this._loginDialog.open) {
228
- this._invalid = true;
229
- } else if (this.auto) {
230
- this._loginDialog.openDialog();
231
- }
232
- }
233
- this.emitTo('pb-login', resp);
234
-
235
- if (this.loggedIn) {
236
- registry.currentUser = {
237
- user: this.user,
238
- groups: this.groups
239
- }
240
- } else {
241
- registry.currentUser = null;
242
- }
257
+ _handleResponse() {
258
+ const resp = this._checkLogin.lastResponse;
259
+ if (resp.user && this._checkGroup(resp)) {
260
+ resp.userChanged = !this.loggedIn || this.user !== resp.user;
261
+ this.loggedIn = true;
262
+ this.user = resp.user;
263
+ this.groups = resp.groups;
264
+ this._invalid = false;
265
+ this._loginDialog.closeDialog();
266
+ } else {
267
+ resp.userChanged = this.loggedIn;
268
+ this.loggedIn = false;
269
+ this.password = null;
270
+ if (this._loginDialog.open) {
271
+ this._invalid = true;
272
+ } else if (this.auto) {
273
+ this._loginDialog.openDialog();
274
+ }
243
275
  }
276
+ this.emitTo('pb-login', resp);
244
277
 
245
- _handleError() {
246
- this.loggedIn = false;
247
- this.password = null;
278
+ if (this.loggedIn) {
279
+ registry.currentUser = {
280
+ user: this.user,
281
+ groups: this.groups,
282
+ };
283
+ } else {
284
+ registry.currentUser = null;
285
+ }
286
+ }
248
287
 
249
- const resp = {
250
- userChanged: this.loggedIn,
251
- user: null
252
- };
253
- if (this._loginDialog.open) {
254
- this._invalid = true;
255
- } else if (this.auto) {
256
- this._loginDialog.openDialog();
257
- }
288
+ _handleError() {
289
+ this.loggedIn = false;
290
+ this.password = null;
258
291
 
259
- registry.currentUser = null;
260
- this.emitTo('pb-login', resp);
292
+ const resp = {
293
+ userChanged: this.loggedIn,
294
+ user: null,
295
+ };
296
+ if (this._loginDialog.open) {
297
+ this._invalid = true;
298
+ } else if (this.auto) {
299
+ this._loginDialog.openDialog();
261
300
  }
262
301
 
263
- /**
264
- *
265
- * @param {Array<String>} arr array containg string values (name of groups)
266
- * @param {String} val value to check if it's in the array
267
- * @returns true if the checked values is in the array
268
- */
269
- _isItemInArray(arr, val) {
270
- return arr.some((arrVal) => val === arrVal);
271
- }
302
+ registry.currentUser = null;
303
+ this.emitTo('pb-login', resp);
304
+ }
272
305
 
273
- /**
274
- *
275
- * @param {object} info object returned by login function;
276
- * contains groups the user is a member of
277
- * @returns true if user is member of one of defined groups
278
- */
279
- _checkGroup(info) {
280
- if (this.group) {
281
- let groupArray = this.group.split(/[\s+,]+/);
282
- let exists = false;
283
- if(info.groups)
284
- groupArray.forEach(async (oneItem) => {
285
- exists = this._isItemInArray(info.groups, oneItem) || exists;
286
- });
287
- return exists;
288
- }
289
- return true;
290
- }
306
+ /**
307
+ *
308
+ * @param {Array<String>} arr array containg string values (name of groups)
309
+ * @param {String} val value to check if it's in the array
310
+ * @returns true if the checked values is in the array
311
+ */
312
+ _isItemInArray(arr, val) {
313
+ return arr.some(arrVal => val === arrVal);
314
+ }
291
315
 
292
- static get styles() {
293
- return css`
294
- #message {
295
- color: var(--pb-login-message-invalid-color, var(--pb-error-color, #f44336));
296
- }
297
- `;
316
+ /**
317
+ *
318
+ * @param {object} info object returned by login function;
319
+ * contains groups the user is a member of
320
+ * @returns true if user is member of one of defined groups
321
+ */
322
+ _checkGroup(info) {
323
+ if (this.group) {
324
+ const groupArray = this.group.split(/[\s+,]+/);
325
+ let exists = false;
326
+ if (info.groups)
327
+ groupArray.forEach(async oneItem => {
328
+ exists = this._isItemInArray(info.groups, oneItem) || exists;
329
+ });
330
+ return exists;
298
331
  }
332
+ return true;
333
+ }
334
+
335
+ static get styles() {
336
+ return css`
337
+ #message {
338
+ color: var(--pb-login-message-invalid-color, var(--pb-error-color, #f44336));
339
+ }
340
+ `;
341
+ }
299
342
 
300
- /**
301
- * Fired on successful login.
302
- *
303
- * @event pb-login
304
- * @param {String} user logged in user
305
- * @param {Array<String>} groups groups the user is a member of
306
- */
343
+ /**
344
+ * Fired on successful login.
345
+ *
346
+ * @event pb-login
347
+ * @param {String} user logged in user
348
+ * @param {Array<String>} groups groups the user is a member of
349
+ */
307
350
  }
308
351
  customElements.define('pb-login', PbLogin);