@gandalan/weblibs 1.0.7 → 1.0.9

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/.eslintrc.cjs CHANGED
@@ -1,12 +1,12 @@
1
1
  module.exports = {
2
2
  root: true,
3
- extends: ['eslint:recommended'],
4
- plugins: ['svelte3'],
5
- overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
6
- parser: '@babel/eslint-parser',
3
+ extends: ["eslint:recommended"],
4
+ plugins: ["svelte3"],
5
+ overrides: [{ files: ["*.svelte"], processor: "svelte3/svelte3" }],
6
+ parser: "@babel/eslint-parser",
7
7
  parserOptions: {
8
8
  requireConfigFile: false,
9
- sourceType: 'module',
9
+ sourceType: "module",
10
10
  ecmaVersion: 2020,
11
11
  },
12
12
  env: {
@@ -16,28 +16,28 @@ module.exports = {
16
16
  },
17
17
  rules: {
18
18
  //indent: ['error', 4],
19
- quotes: ['warn', 'single'],
20
- semi: ['off', 'never'],
21
- 'no-multi-spaces': ['error', { ignoreEOLComments: true }],
22
- 'curly': 'error',
23
- 'comma-spacing': 'error',
24
- 'brace-style': 'error',
25
- 'no-var': 'error',
26
- 'key-spacing': 'warn',
27
- 'keyword-spacing': 'warn',
28
- 'space-infix-ops': 'warn',
29
- 'arrow-spacing': 'warn',
30
- 'no-trailing-spaces': 'warn',
31
- 'space-before-blocks': 'warn',
32
- 'no-console': 'warn',
33
- 'no-extra-boolean-cast': 'off',
34
- 'no-multiple-empty-lines': ['warn', { 'max': 1, 'maxBOF': 0 }],
35
- 'lines-between-class-members': ['warn', 'always', { exceptAfterSingleLine: true }],
36
- 'no-unneeded-ternary': 'error',
37
- 'no-else-return': ['error', { 'allowElseIf': false }],
38
- 'array-bracket-newline': ['error', 'consistent'],
39
- 'eol-last': ['error', 'always'],
40
- 'prefer-template': 'error',
41
- 'comma-dangle': ['warn', 'always-multiline'],
19
+ quotes: ["warn", "double"],
20
+ semi: ["off", "never"],
21
+ "no-multi-spaces": ["error", { ignoreEOLComments: true }],
22
+ "curly": "error",
23
+ "comma-spacing": "error",
24
+ "brace-style": "error",
25
+ "no-var": "error",
26
+ "key-spacing": "warn",
27
+ "keyword-spacing": "warn",
28
+ "space-infix-ops": "warn",
29
+ "arrow-spacing": "warn",
30
+ "no-trailing-spaces": "warn",
31
+ "space-before-blocks": "warn",
32
+ "no-console": "warn",
33
+ "no-extra-boolean-cast": "off",
34
+ "no-multiple-empty-lines": ["warn", { "max": 1, "maxBOF": 0 }],
35
+ "lines-between-class-members": ["warn", "always", { exceptAfterSingleLine: true }],
36
+ "no-unneeded-ternary": "error",
37
+ "no-else-return": ["error", { "allowElseIf": false }],
38
+ "array-bracket-newline": ["error", "consistent"],
39
+ "eol-last": ["error", "always"],
40
+ "prefer-template": "error",
41
+ "comma-dangle": ["warn", "always-multiline"],
42
42
  },
43
43
  };
@@ -0,0 +1,5 @@
1
+ {
2
+ "editor.codeActionsOnSave": {
3
+ "source.fixAll.eslint": true
4
+ }
5
+ }
package/api/IDAS.js CHANGED
@@ -1,92 +1,81 @@
1
- import { RESTClient } from './RESTClient';
2
- import jwt_decode from 'jwt-decode';
1
+ import { RESTClient } from "./RESTClient";
2
+ import jwt_decode from "jwt-decode";
3
3
 
4
- let appToken = localStorage.getItem('IDAS_AppToken') || '66B70E0B-F7C4-4829-B12A-18AD309E3970';
5
- let authToken = localStorage.getItem('IDAS_AuthToken');
6
- let apiBaseUrl = localStorage.getItem('IDAS_ApiBaseUrl') || 'https://api.dev.idas-cloudservices.net/api/';
7
- let authJwtCallbackPath = localStorage.getItem('IDAS_AuthJwtCallbackPath') || '';
4
+ let appToken = localStorage.getItem("IDAS_AppToken") || "66B70E0B-F7C4-4829-B12A-18AD309E3970";
5
+ let authToken = localStorage.getItem("IDAS_AuthToken");
6
+ let apiBaseUrl = localStorage.getItem("IDAS_ApiBaseUrl") || "https://api.dev.idas-cloudservices.net/api/";
7
+ let authJwtCallbackPath = localStorage.getItem("IDAS_AuthJwtCallbackPath") || "";
8
8
  let authJwtToken;
9
9
 
10
10
  export let IDASFactory = {
11
- async create() {
12
- return new Promise((resolve, reject) => {
13
- let promise = this.authorize()
14
- .then(() => {
15
- let idas = new IDAS();
16
- return idas.authenticateWithJwt(authJwtCallbackPath)
17
- });
18
- resolve(promise);
19
- });
20
- },
21
-
22
- async authorize() {
23
- var urlParams = new URLSearchParams(location.search);
24
- if (urlParams.has("m")) {
25
- localStorage.setItem("IDAS_MandantGuid", urlParams.get("m"));
26
- }
27
- if (urlParams.has("a")) {
28
- localStorage.setItem("IDAS_ApiBaseUrl", urlParams.get("a"));
29
- apiBaseUrl = urlParams.get("a");
30
- }
31
- if (urlParams.has('j')) { // it is JWT
32
- let idas = new IDAS();
33
- idas.authorizeWithJwt(urlParams.get('j'));
34
- window.location.search = "";
35
- return Promise.reject("redirect is required");
36
- }
37
- if (urlParams.has('t')) { // it is authToken
38
- localStorage.setItem('IDAS_AuthJwtRefreshToken', urlParams.get("t"));
39
- var refreshClient = new RESTClient(apiBaseUrl, '');
40
- await refreshClient.refreshToken()
41
- .then(() => {
42
- window.location.search = "";
43
- });
44
- return Promise.reject("redirect is required");
11
+ async create(settings = {
12
+ appToken : localStorage.getItem("IDAS_AppToken"),
13
+ mandantGuid : localStorage.getItem("IDAS_MandantGuid"),
14
+ apiBaseurl : localStorage.getItem("IDAS_ApiBaseUrl"),
15
+ jwtRefreshToken : localStorage.getItem("IDAS_AuthJwtRefreshToken"),
16
+ jwtCallbackPath : localStorage.getItem("IDAS_AuthJwtCallbackPath")
17
+ })
18
+ {
19
+ apiBaseUrl = settings.apiBaseurl;
20
+ let idas = undefined;
21
+
22
+ if (settings.jwtToken) // it is JWT
23
+ {
24
+ console.log("init: with JWT token");
25
+ idas = new IDAS();
26
+ idas.initWithJWTtoken(settings.jwtToken);
27
+ }
28
+ else if (settings.jwtRefreshToken) // it is authToken
29
+ {
30
+ console.log("init: with refresh/classic token");
31
+ let refreshClient = new RESTClient(apiBaseUrl, "");
32
+ await refreshClient.refreshToken();
33
+ idas = new IDAS();
34
+ await idas.authenticateWithJwt(authJwtCallbackPath);
45
35
  }
36
+
37
+ return idas;
46
38
  }
47
39
  }
48
40
 
49
- class IDAS {
41
+ class IDAS
42
+ {
50
43
  restClient = undefined;
51
44
 
52
- authorizeWithJwt(jwtToken, mandant = '') {
45
+ initWithJWTtoken(jwtToken)
46
+ {
53
47
  authJwtToken = jwtToken;
54
- mandant && localStorage.setItem('IDAS_MandantGuid', mandant);
55
48
  this.restClient = new RESTClient(apiBaseUrl, jwtToken, true);
56
49
  }
57
50
 
58
- async authenticateWithJwt(authPath) {
59
- return new Promise(async (resolve, reject) => {
60
- // no valid JWT, but try to use "refresh token" first to retrive new JWT
61
- var refreshClient = new RESTClient(apiBaseUrl, '');
62
- await refreshClient.checkRefreshToken(authJwtToken, () => {
63
- authJwtToken = undefined;
64
- // ... so repeat authenticate (should lead to /Session login page)
65
- new IDAS().authenticateWithJwt(authPath);
66
- });
67
-
68
- // still not valid JWT -> authenticate
69
- if (!refreshClient.token) {
70
- localStorage.setItem('IDAS_AuthJwtCallbackPath', authPath || '');
71
- const authEndpoint = (new URL(window.location.href).origin) + authPath;
72
- let authUrlCallback = `${authEndpoint}?r=%target%&j=%jwt%&m=%mandant%`;
73
- authUrlCallback = authUrlCallback.replace('%target%', encodeURIComponent(window.location.href));
74
-
75
- const url = new URL(apiBaseUrl);
76
- url.pathname = "/Session";
77
- url.search = `?a=${appToken}&r=${encodeURIComponent(authUrlCallback)}`;
78
- let jwtUrl = url.toString();
79
-
80
- window.location = jwtUrl;
81
- reject('not authenticated yet');
82
- } else {
83
- this.authorizeWithJwt(refreshClient.token);
84
- resolve(this);
85
- }
51
+ async authenticateWithJwt(authPath)
52
+ {
53
+ let refreshClient = new RESTClient(apiBaseUrl, "");
54
+ await refreshClient.checkRefreshToken(authJwtToken, () => {
55
+ authJwtToken = undefined;
56
+ // ... so repeat authenticate (should lead to /Session login page)
57
+ new IDAS().authenticateWithJwt(authPath);
86
58
  });
59
+
60
+ // still not valid JWT -> authenticate
61
+ if (!refreshClient.token) {
62
+ localStorage.setItem("IDAS_AuthJwtCallbackPath", authPath || "");
63
+ const authEndpoint = (new URL(window.location.href).origin) + authPath;
64
+ let authUrlCallback = `${authEndpoint}?r=%target%&j=%jwt%&m=%mandant%`;
65
+ authUrlCallback = authUrlCallback.replace("%target%", encodeURIComponent(window.location.href));
66
+
67
+ const url = new URL(apiBaseUrl);
68
+ url.pathname = "/Session";
69
+ url.search = `?a=${appToken}&r=${encodeURIComponent(authUrlCallback)}`;
70
+ let jwtUrl = url.toString();
71
+
72
+ window.location = jwtUrl;
73
+ } else {
74
+ this.initWithJWTtoken(refreshClient.token);
75
+ }
87
76
  }
88
77
 
89
- mandantGuid = localStorage.getItem('IDAS_MandantGuid');
78
+ mandantGuid = localStorage.getItem("IDAS_MandantGuid");
90
79
 
91
80
  claims = {
92
81
  hasClaim(key) {
@@ -98,8 +87,8 @@ class IDAS {
98
87
  let decoded = jwt_decode(authJwtToken);
99
88
  let val = decoded[key];
100
89
  return val !== undefined;
101
- }
102
- catch {}
90
+ // eslint-disable-next-line no-empty
91
+ } catch {}
103
92
 
104
93
  return false;
105
94
  },
@@ -112,30 +101,30 @@ class IDAS {
112
101
  try {
113
102
  let decoded = jwt_decode(authJwtToken);
114
103
  return decoded[key];
115
- }
116
- catch {}
104
+ // eslint-disable-next-line no-empty
105
+ } catch {}
117
106
 
118
107
  return;
119
- }
108
+ },
120
109
  }
121
110
 
122
111
  auth = {
123
112
  _self: this,
124
113
  async getCurrentAuthToken() {
125
- return await this._self.restClient.put('/Login/Update/', { Token: authToken })
114
+ return await this._self.restClient.put("/Login/Update/", { Token: authToken })
126
115
  },
127
116
  };
128
117
 
129
118
  mandanten = {
130
119
  _self: this,
131
120
  async getAll() {
132
- return await this._self.restClient.get('/Mandanten');
121
+ return await this._self.restClient.get("/Mandanten");
133
122
  },
134
123
  async get(guid) {
135
124
  return await this._self.restClient.get(`/Mandanten/${guid}`);
136
125
  },
137
126
  async save(m) {
138
- await this._self.restClient.put('/Mandanten', m);
127
+ await this._self.restClient.put("/Mandanten", m);
139
128
  },
140
129
  };
141
130
 
@@ -148,20 +137,20 @@ class IDAS {
148
137
  return await this._self.restClient.get(`/Benutzer/${guid}`);
149
138
  },
150
139
  async save(m) {
151
- await this._self.restClient.put('/Benutzer', m);
140
+ await this._self.restClient.put("/Benutzer", m);
152
141
  },
153
142
  };
154
143
 
155
144
  feedback = {
156
145
  _self: this,
157
146
  async getAll() {
158
- return await this._self.restClient.get('/Feedback/');
147
+ return await this._self.restClient.get("/Feedback/");
159
148
  },
160
149
  async get(guid) {
161
150
  return await this._self.restClient.get(`/Feedback/${guid}`);
162
151
  },
163
152
  async save(m) {
164
- await this._self.restClient.put('/Feedback', m);
153
+ await this._self.restClient.put("/Feedback", m);
165
154
  },
166
155
  async comment(guid, commentData) {
167
156
  await this._self.restClient.put(`/FeedbackKommentar/${guid}`, commentData);
@@ -177,10 +166,10 @@ class IDAS {
177
166
  rollen = {
178
167
  _self: this,
179
168
  async getAll() {
180
- return await this._self.restClient.get('/Rollen');
169
+ return await this._self.restClient.get("/Rollen");
181
170
  },
182
171
  async save(m) {
183
- await this._self.restClient.put('/Rollen', m);
172
+ await this._self.restClient.put("/Rollen", m);
184
173
  },
185
174
  };
186
175
 
package/api/RESTClient.js CHANGED
@@ -1,5 +1,5 @@
1
- import axios from 'axios';
2
- import jwt_decode from 'jwt-decode';
1
+ import axios from "axios";
2
+ import jwt_decode from "jwt-decode";
3
3
 
4
4
  /*export let AppToken = "66B70E0B-F7C4-4829-B12A-18AD309E3970";
5
5
  export let AuthToken = localStorage.getItem("AuthToken");
@@ -8,21 +8,21 @@ export let ApiBaseUrl = localStorage.getItem("ApiBaseUrl") || "https://api.dev.i
8
8
  export let SiteBaseUrl = window.location.origin;
9
9
  export let SSOAuthUrl = ApiBaseUrl.replace("/api", '') + "/SSO?a=" + AppToken + "&r=%target%?t=%token%%26m=%mandant%";*/
10
10
 
11
- let authJwtRefreshToken = localStorage.getItem('IDAS_AuthJwtRefreshToken');
11
+ let authJwtRefreshToken = localStorage.getItem("IDAS_AuthJwtRefreshToken");
12
12
 
13
13
  export class RESTClient {
14
- lastError = '';
15
- token = '';
16
- baseurl = '';
14
+ lastError = "";
15
+ token = "";
16
+ baseurl = "";
17
17
 
18
18
  constructor(url, token, isJWT = false) {
19
- this.lastError = '';
19
+ this.lastError = "";
20
20
  this.baseurl = url;
21
21
  this.token = token;
22
22
  this.isJWT = isJWT;
23
23
 
24
24
  if (this.token && !isJWT) {
25
- axios.defaults.headers.common['X-Gdl-AuthToken'] = this.token;
25
+ axios.defaults.headers.common["X-Gdl-AuthToken"] = this.token;
26
26
  }
27
27
 
28
28
  if (this.token && isJWT) {
@@ -36,9 +36,9 @@ export class RESTClient {
36
36
  }
37
37
 
38
38
  async checkAuthorizationHeader(config) {
39
- let authHeader = config.headers['Authorization'];
40
- if (authHeader && authHeader.toString().startsWith('Bearer ')) {
41
- let parts = authHeader.toString().split(' ');
39
+ let authHeader = config.headers["Authorization"];
40
+ if (authHeader && authHeader.toString().startsWith("Bearer ")) {
41
+ let parts = authHeader.toString().split(" ");
42
42
  let jwt = parts[1];
43
43
  if (!this.isJwtTokenExpired(jwt)) {
44
44
  // JWT token is not expired
@@ -56,11 +56,12 @@ export class RESTClient {
56
56
  // LoginJwt/Refresh failed, which means "refresh token" is expired/invalid...
57
57
  if (message.indexOf("401") != -1 || message.indexOf("403") != -1) {
58
58
  authJwtRefreshToken = undefined;
59
- localStorage.removeItem('IDAS_AuthJwtRefreshToken');
59
+ localStorage.removeItem("IDAS_AuthJwtRefreshToken");
60
60
  // ... so repeat authenticate
61
61
  authCallback && authCallback();
62
62
  }
63
63
  };
64
+
64
65
  // fetch fresh JWT
65
66
  await this.refreshToken();
66
67
  return;
@@ -86,8 +87,8 @@ export class RESTClient {
86
87
 
87
88
  updateJwtToken(jwt) {
88
89
  let decoded = jwt_decode(jwt);
89
- let refreshToken = decoded['refreshToken'] || '';
90
- localStorage.setItem('IDAS_AuthJwtRefreshToken', refreshToken);
90
+ let refreshToken = decoded["refreshToken"] || "";
91
+ localStorage.setItem("IDAS_AuthJwtRefreshToken", refreshToken);
91
92
  authJwtRefreshToken = refreshToken;
92
93
  this.token = jwt;
93
94
  this.isJWT = true;
@@ -95,7 +96,7 @@ export class RESTClient {
95
96
 
96
97
  async refreshToken() {
97
98
  try {
98
- await axios.put(this.baseurl + '/LoginJwt/Refresh', { token: localStorage.getItem('IDAS_AuthJwtRefreshToken') })
99
+ await axios.put(`${this.baseurl}/LoginJwt/Refresh`, { token: localStorage.getItem("IDAS_AuthJwtRefreshToken") })
99
100
  .then(resp => {
100
101
  this.updateJwtToken(resp.data);
101
102
  });
@@ -110,32 +111,33 @@ export class RESTClient {
110
111
 
111
112
  getUrlOptions(noJWT = false) {
112
113
  let options = { withCredentials: false }
113
- if (this.isJWT && !noJWT)
114
+ if (this.isJWT && !noJWT) {
114
115
  options.headers = { Authorization: `Bearer ${this.token}` }
116
+ }
117
+
115
118
  return options
116
119
  }
117
120
 
118
121
  async get(uri, noJWT = false) {
119
122
  try {
120
123
  const response = await axios.get(this.baseurl + uri, this.getUrlOptions(noJWT));
121
- this.lastError = '';
124
+ this.lastError = "";
122
125
  return response.data;
123
126
  } catch (error) {
124
127
  this.handleError(error);
125
128
  }
126
129
  }
127
130
 
128
-
129
131
  async getFile(uri) {
130
132
  try {
131
- const response = await axios.get(this.baseurl + uri, { responseType: 'blob' });
132
- let fileName = '1000.pdf';
133
- if (response.headers['content-disposition']) {
134
- fileName = response.headers['content-disposition'].split(';')[1];
135
- fileName = fileName.replace('filename=', '').trim();
133
+ const response = await axios.get(this.baseurl + uri, { responseType: "blob" });
134
+ let fileName = "1000.pdf";
135
+ if (response.headers["content-disposition"]) {
136
+ fileName = response.headers["content-disposition"].split(";")[1];
137
+ fileName = fileName.replace("filename=", "").trim();
136
138
  }
137
- this.lastError = '';
138
- return { data: response.data, filename: fileName, contentType: 'application/pdf' };
139
+ this.lastError = "";
140
+ return { data: response.data, filename: fileName, contentType: "application/pdf" };
139
141
  } catch (error) {
140
142
  this.handleError(error);
141
143
  }
@@ -145,7 +147,7 @@ export class RESTClient {
145
147
  let response = {};
146
148
  try {
147
149
  response = await axios.get(this.baseurl + uri, this.getUrlOptions(noJWT))
148
- this.lastError = '';
150
+ this.lastError = "";
149
151
  } catch (error) {
150
152
  this.handleError(error);
151
153
  }
@@ -155,7 +157,7 @@ export class RESTClient {
155
157
  async post(uri, formData, noJWT = false) {
156
158
  try {
157
159
  const response = await axios.post(this.baseurl + uri, formData, this.getUrlOptions(noJWT));
158
- this.lastError = '';
160
+ this.lastError = "";
159
161
  return response;
160
162
  } catch (error) {
161
163
  this.handleError(error);
@@ -165,7 +167,7 @@ export class RESTClient {
165
167
  async put(uri, formData, noJWT = false) {
166
168
  try {
167
169
  const response = await axios.put(this.baseurl + uri, formData, this.getUrlOptions(noJWT));
168
- this.lastError = '';
170
+ this.lastError = "";
169
171
  return response;
170
172
  } catch (error) {
171
173
  this.handleError(error);
@@ -175,7 +177,7 @@ export class RESTClient {
175
177
  async delete(uri, noJWT = false) {
176
178
  try {
177
179
  const response = await axios.delete(this.baseurl + uri, this.getUrlOptions(noJWT));
178
- this.lastError = '';
180
+ this.lastError = "";
179
181
  return response;
180
182
  } catch (error) {
181
183
  this.handleError(error);
@@ -186,9 +188,9 @@ export class RESTClient {
186
188
  onError = (error, message) => { };
187
189
 
188
190
  handleError(error) {
189
- let message = error ? error.message : '?';
191
+ let message = error ? error.message : "?";
190
192
  // eslint-disable-next-line no-console
191
- console.log(`API Error: ${message}`);
193
+ console.error(`API Error: ${message}`);
192
194
  this.lastError = message;
193
195
  this.onError(error, message);
194
196
  throw error;
@@ -1,6 +1,6 @@
1
1
  <script>
2
- import { Button } from 'svelte-chota';
3
- import { mdiMessageAlert } from '@mdi/js'
2
+ import { Button } from "svelte-chota";
3
+ import { mdiMessageAlert } from "@mdi/js"
4
4
 
5
5
  export let Handler;
6
6
  export let disabled;
@@ -1,20 +1,20 @@
1
1
  <script>
2
- import { createEventDispatcher } from 'svelte';
2
+ import { createEventDispatcher } from "svelte";
3
3
  const dispatch = createEventDispatcher();
4
- import { Icon } from 'svelte-chota';
4
+ import { Icon } from "svelte-chota";
5
5
 
6
6
  export let items = [];
7
7
  export let selectedItem = {};
8
8
  export let standardItem;
9
- export let displayProperty = '';
10
- export let header = 'Überschrift';
11
- export let key = 'Guid';
9
+ export let displayProperty = "";
10
+ export let header = "Überschrift";
11
+ export let key = "Guid";
12
12
  export let marker = null;
13
- export let markerField = '';
13
+ export let markerField = "";
14
14
 
15
15
  function setCurrent(item) {
16
16
  selectedItem = item;
17
- dispatch('selectedItemChanged', item);
17
+ dispatch("selectedItemChanged", item);
18
18
  }
19
19
  </script>
20
20
 
@@ -24,10 +24,10 @@
24
24
  </div>
25
25
  <div>
26
26
  {#if standardItem}
27
- <div class="dgrow" on:click={setCurrent(standardItem)} class:selected="{selectedItem[key] === standardItem[key]}">{standardItem[displayProperty]}</div>
27
+ <div class="dgrow" on:click={setCurrent(standardItem)} on:keypress={e => e.key === "Enter" && setCurrent(standardItem)} class:selected="{selectedItem[key] === standardItem[key]}">{standardItem[displayProperty]}</div>
28
28
  {/if}
29
29
  {#each items as d}
30
- <div class="dgrow" on:click={setCurrent(d)} class:selected="{selectedItem[key] === d[key]}">
30
+ <div class="dgrow" on:click={setCurrent(d)} on:keypress={e => e.key === "Enter" && setCurrent(d)} class:selected="{selectedItem[key] === d[key]}">
31
31
  {d[displayProperty]}
32
32
  {#if marker && markerField && d[markerField] === true}
33
33
  <Icon src={marker} />
@@ -1,14 +1,14 @@
1
1
  <script>
2
2
  export let Height = 30;
3
- export let Placeholder = '';
4
- export let Value = '';
3
+ export let Placeholder = "";
4
+ export let Value = "";
5
5
  export let Width = 120;
6
6
 
7
- const backgroundNormal = '#FFFFFF';
8
- const backgroundFalschesDatum = '#FF0000';
7
+ const backgroundNormal = "#FFFFFF";
8
+ const backgroundFalschesDatum = "#FF0000";
9
9
 
10
- let monate = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
11
- let tageKurz = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'];
10
+ let monate = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
11
+ let tageKurz = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"];
12
12
 
13
13
  let buttonStyle, divStyle, inputStyle;
14
14
  let background = backgroundNormal;
@@ -19,10 +19,10 @@
19
19
  let inputHeight = Height - 2;
20
20
  let inputWidth = Width - Height - 10;
21
21
 
22
- let allowedNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
22
+ let allowedNumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
23
23
  let allowedTage = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
24
- let allowedSonderzeichen = '.';
25
- let allowedFunctionalKeys = ['ArrowLeft', 'ArrowRight', 'Backspace', 'Delete'];
24
+ let allowedSonderzeichen = ".";
25
+ let allowedFunctionalKeys = ["ArrowLeft", "ArrowRight", "Backspace", "Delete"];
26
26
  let currentJahr = new Date().getFullYear();
27
27
  let currentMonat = monate[new Date().getMonth()];
28
28
  let wochenImMonat = [];
@@ -52,7 +52,7 @@
52
52
  }
53
53
 
54
54
  // Prüfung, ob der Monat korrekt eingegeben wurde
55
- if (localMonat != 'undefined' && (localMonat < 1 || localMonat > 12)) {
55
+ if (localMonat != "undefined" && (localMonat < 1 || localMonat > 12)) {
56
56
  error = true;
57
57
  } else {
58
58
  error = false;
@@ -63,9 +63,9 @@
63
63
  error = true;
64
64
  }
65
65
 
66
- if (localMonat != 'undefined') {
66
+ if (localMonat != "undefined") {
67
67
  let localAllowedTage = allowedTage[inhalt[1]];
68
- if (localAllowedTage == 'undefined') {
68
+ if (localAllowedTage == "undefined") {
69
69
  error = true;
70
70
  }
71
71
  if (localTag > localAllowedTage) {
@@ -92,7 +92,7 @@
92
92
  // Am Anfang müssen erstmal x Leertage in die Woche eingefügt werden, damit der Monat
93
93
  // am passenden Wochentag startet => das macht es in der Anzeigeschleife leichter
94
94
  for (let bufferCounter = 0; bufferCounter < localTagIndex; bufferCounter++) {
95
- woche = [...woche, ''];
95
+ woche = [...woche, ""];
96
96
  }
97
97
  }
98
98
  woche = [...woche, counter + 1];
@@ -125,7 +125,7 @@
125
125
  daysInMonth();
126
126
  }
127
127
  function setPlaceholder(tag) {
128
- if (tag != '') {
128
+ if (tag != "") {
129
129
  //Placeholder = getFormattedDate(tag);
130
130
  }
131
131
  }
@@ -1,11 +1,11 @@
1
1
  <script>
2
- import SvelteTable from 'svelte-table';
2
+ import SvelteTable from "svelte-table";
3
3
 
4
4
  export let columns;
5
5
  /** @type {any[]} */
6
6
  export let rows;
7
7
  /** @type {string} */
8
- export let sortBy = '';
8
+ export let sortBy = "";
9
9
  /** @type {(string | number)[]} */
10
10
  export let expanded = [];
11
11
  /** @type {(string | number)[]} */
@@ -32,23 +32,23 @@
32
32
  export let clickCell = null;
33
33
 
34
34
  // CSS Classes
35
- export let classNameTable = 'border-2 border-collapse my-4';
36
- export let classNameThead = '';
37
- export let classNameTbody = '';
38
- export let classNameSelect = '';
39
- export let classNameInput = '';
40
- export let classNameRow = 'border-2 border-collapse odd:bg-gray-100 hover:bg-gray-300';
41
- export let classNameCell = '';
42
- export let classNameRowSelected = '!bg-gray-400';
43
- export let classNameRowExpanded = 'bg-gray-400';
44
- export let classNameExpandedContent = '';
45
- export let classNameCellExpand = '';
35
+ export let classNameTable = "border-2 border-collapse my-4";
36
+ export let classNameThead = "";
37
+ export let classNameTbody = "";
38
+ export let classNameSelect = "";
39
+ export let classNameInput = "";
40
+ export let classNameRow = "border-2 border-collapse odd:bg-gray-100 hover:bg-gray-300";
41
+ export let classNameCell = "";
42
+ export let classNameRowSelected = "!bg-gray-400";
43
+ export let classNameRowExpanded = "bg-gray-400";
44
+ export let classNameExpandedContent = "";
45
+ export let classNameCellExpand = "";
46
46
 
47
47
  const asStringArray = v =>
48
48
  []
49
49
  .concat(v)
50
- .filter(v => v !== null && typeof v === 'string' && v !== '')
51
- .join(' ');
50
+ .filter(v => v !== null && typeof v === "string" && v !== "")
51
+ .join(" ");
52
52
  </script>
53
53
 
54
54
  <SvelteTable
@@ -66,17 +66,17 @@
66
66
  on:clickRow={clickRow}
67
67
  on:clickExpand={clickExpand}
68
68
  on:clickCell={clickCell}
69
- classNameTable={asStringArray(['gan-table', classNameTable])}
70
- classNameThead={asStringArray(['gan-thead', classNameThead])}
71
- classNameTbody={asStringArray(['gan-tbody', classNameTbody])}
72
- classNameSelect={asStringArray(['custom-select', classNameSelect])}
73
- classNameInput={asStringArray(['custom-input', classNameInput])}
74
- classNameRow={asStringArray(['gan-row', classNameRow])}
75
- classNameCell={asStringArray(['gan-cell', classNameCell])}
76
- classNameRowSelected={asStringArray(['row-selected', classNameRowSelected])}
77
- classNameRowExpanded={asStringArray(['row-expanded', classNameRowExpanded])}
78
- classNameExpandedContent={asStringArray(['expanded-content', classNameExpandedContent])}
79
- classNameCellExpand={asStringArray(['cell-expand', classNameCellExpand])}>
69
+ classNameTable={asStringArray(["gan-table", classNameTable])}
70
+ classNameThead={asStringArray(["gan-thead", classNameThead])}
71
+ classNameTbody={asStringArray(["gan-tbody", classNameTbody])}
72
+ classNameSelect={asStringArray(["custom-select", classNameSelect])}
73
+ classNameInput={asStringArray(["custom-input", classNameInput])}
74
+ classNameRow={asStringArray(["gan-row", classNameRow])}
75
+ classNameCell={asStringArray(["gan-cell", classNameCell])}
76
+ classNameRowSelected={asStringArray(["row-selected", classNameRowSelected])}
77
+ classNameRowExpanded={asStringArray(["row-expanded", classNameRowExpanded])}
78
+ classNameExpandedContent={asStringArray(["expanded-content", classNameExpandedContent])}
79
+ classNameCellExpand={asStringArray(["cell-expand", classNameCellExpand])}>
80
80
 
81
81
  <!-- Wait for better workaround. See: https://github.com/sveltejs/svelte/issues/5604 -->
82
82
 
@@ -1,6 +1,6 @@
1
1
  <script>
2
2
  export let AllowedDecimals = 2;
3
- export let DecimalTrenner = ',';
3
+ export let DecimalTrenner = ",";
4
4
  export let KeyDownFunctionOnEnter, KeyDownFunctionOnTab;
5
5
  export let Height = 30;
6
6
  export let IsPflichtfeld = false;
@@ -8,28 +8,28 @@
8
8
  export let MinValue = 0;
9
9
  export let MaxValue = 0;
10
10
  export let Multiline = false;
11
- export let Type = 'text';
12
- export let Value = '';
11
+ export let Type = "text";
12
+ export let Value = "";
13
13
  export let Width = 120;
14
14
 
15
15
  let errorHidden = true;
16
- let errorMessage = '';
16
+ let errorMessage = "";
17
17
  let style = `height: ${Height}px; width: ${Width}px;`;
18
18
  let styleError = `width: ${Width}px;`;
19
19
 
20
- let allowedNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
21
- let allowedDecimalTrenner = [',', '.'];
22
- let allowedFunctionalKeys = ['ArrowLeft', 'ArrowRight', 'Backspace', 'Delete'];
23
- let allowedVorzeichen = '-';
20
+ let allowedNumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
21
+ let allowedDecimalTrenner = [",", "."];
22
+ let allowedFunctionalKeys = ["ArrowLeft", "ArrowRight", "Backspace", "Delete"];
23
+ let allowedVorzeichen = "-";
24
24
 
25
25
  function checkInput(e) {
26
26
  switch (Type) {
27
- case 'currency':
28
- case 'number':
27
+ case "currency":
28
+ case "number":
29
29
  checkInputNumber(e);
30
30
  break;
31
31
 
32
- case 'email':
32
+ case "email":
33
33
  checkInputEMail(e)
34
34
  break;
35
35
  }
@@ -45,7 +45,7 @@
45
45
  let positionDezimalTrenner = localValueString.indexOf(DecimalTrenner)
46
46
  if (positionDezimalTrenner > -1) {
47
47
  let decimals = localValueString.substring(positionDezimalTrenner);
48
- if (decimals.length > AllowedDecimals || (Type == 'currency' && decimals.length > 2)) {
48
+ if (decimals.length > AllowedDecimals || (Type == "currency" && decimals.length > 2)) {
49
49
  ignoreInput(e);
50
50
  }
51
51
  }
@@ -74,39 +74,39 @@
74
74
  }
75
75
  }
76
76
  function checkInputEMail(e) {
77
- let mailParts = Value.split('@');
77
+ let mailParts = Value.split("@");
78
78
  errorHidden = false; // Pauschal einen Fehler anzeigen lassen - spart Codezeilen
79
79
 
80
80
  if (mailParts[0].length > 64) {
81
- errorMessage = 'Der Lokalteil der E-Mail Adresse (vor dem @-Zeichen) darf eine Maximallänge von 64 Zeichen nicht überschreiten.'
81
+ errorMessage = "Der Lokalteil der E-Mail Adresse (vor dem @-Zeichen) darf eine Maximallänge von 64 Zeichen nicht überschreiten."
82
82
  } else if (mailParts.length > 1 && mailParts[0].length < 1) {
83
- errorMessage = 'Der Lokalteil der E-Mail Adresse (vor dem @-Zeichen) muss eine Mindestlänge von 1 Zeichen besitzen.'
84
- } else if (mailParts.length > 1 && !mailParts[1].includes('.')) {
85
- errorMessage = 'Der Domainteil der E-Mail Adresse (nach dem @-Zeichen) muss einen Punkt (.) enthalten.'
86
- } else if (Value.startsWith('.') || Value.endsWith('.')) {
87
- errorMessage = 'Die E-Mail Adresse darf mit einem Punkt weder beginnen noch enden.'
88
- } else if (Value.startsWith('@') || Value.endsWith('@')) {
89
- errorMessage = 'Die E-Mail Adresse darf mit einem @-Zeichen weder beginnen noch enden.'
90
- } else if (!Value.includes('@') && e.key != '@') {
91
- errorMessage = '@-Zeichen muss enthalten sein.'
83
+ errorMessage = "Der Lokalteil der E-Mail Adresse (vor dem @-Zeichen) muss eine Mindestlänge von 1 Zeichen besitzen."
84
+ } else if (mailParts.length > 1 && !mailParts[1].includes(".")) {
85
+ errorMessage = "Der Domainteil der E-Mail Adresse (nach dem @-Zeichen) muss einen Punkt (.) enthalten."
86
+ } else if (Value.startsWith(".") || Value.endsWith(".")) {
87
+ errorMessage = "Die E-Mail Adresse darf mit einem Punkt weder beginnen noch enden."
88
+ } else if (Value.startsWith("@") || Value.endsWith("@")) {
89
+ errorMessage = "Die E-Mail Adresse darf mit einem @-Zeichen weder beginnen noch enden."
90
+ } else if (!Value.includes("@") && e.key != "@") {
91
+ errorMessage = "@-Zeichen muss enthalten sein."
92
92
  } else if (Value.length > 253) {
93
- errorMessage = 'Maximallänge: 254 Zeichen.';
93
+ errorMessage = "Maximallänge: 254 Zeichen.";
94
94
  } else if (Value.length < 6) {
95
- errorMessage = 'Mindestlänge: 6 Zeichen.';
95
+ errorMessage = "Mindestlänge: 6 Zeichen.";
96
96
  } else {
97
97
  errorHidden = true;
98
- errorMessage = ''; // einfach für die Sauberkeit
98
+ errorMessage = ""; // einfach für die Sauberkeit
99
99
  }
100
100
  }
101
101
  function executeAdditionalFunctions(e) {
102
102
  switch (e.key) {
103
- case 'Enter':
104
- if (typeof(KeyDownFunctionOnEnter) != 'undefined') {
103
+ case "Enter":
104
+ if (typeof(KeyDownFunctionOnEnter) != "undefined") {
105
105
  KeyDownFunctionOnEnter();
106
106
  }
107
107
  break;
108
- case 'Tab':
109
- if (typeof(KeyDownFunctionOnTab) != 'undefined') {
108
+ case "Tab":
109
+ if (typeof(KeyDownFunctionOnTab) != "undefined") {
110
110
  KeyDownFunctionOnTab();
111
111
  }
112
112
  break;
@@ -127,7 +127,7 @@
127
127
  }
128
128
 
129
129
  // Replace wird benötigt, da sonst der Vergleich das deutsche "," als Dezimaltrenner nicht erkennt und ignoriert.
130
- localValueString = localValueString.replaceAll(',', '.');
130
+ localValueString = localValueString.replaceAll(",", ".");
131
131
 
132
132
  if (MinValue == MaxValue || MinValue > MaxValue) {
133
133
  return isBetween;
@@ -144,9 +144,9 @@
144
144
  setFieldStyle();
145
145
  }
146
146
  function setFieldStyle() {
147
- if (IsPflichtfeld && Value != '') {
147
+ if (IsPflichtfeld && Value != "") {
148
148
  style = `${style} background: #f5fc99;`
149
- } else if (IsPflichtfeld && Value == '') {
149
+ } else if (IsPflichtfeld && Value == "") {
150
150
  style = `${style} background: #fc5d5d;`
151
151
  }
152
152
  }
@@ -154,8 +154,8 @@
154
154
  $:if (Type) {
155
155
  Type = Type.toLocaleLowerCase();
156
156
  switch (Type) {
157
- case 'currency':
158
- case 'number':
157
+ case "currency":
158
+ case "number":
159
159
  style = `${style} text-align: right;`
160
160
  break;
161
161
  }
@@ -166,25 +166,25 @@
166
166
  </script>
167
167
 
168
168
  <!-- Datum -->
169
- {#if (Type == 'date')}
169
+ {#if (Type == "date")}
170
170
  <input type="date" style={style} on:keydown={checkInput} on:keyup={thisKeyUp} on bind:value={Value}/>
171
171
  {/if}
172
172
 
173
173
  <!-- Nummerisch -->
174
- {#if (Type == 'number')}
174
+ {#if (Type == "number")}
175
175
  <input style={style} on:keydown={checkInput} on:keyup={thisKeyUp} bind:value={Value}/>
176
176
  {/if}
177
177
 
178
178
  <!-- Text -->
179
- {#if (Type == 'text' && !Multiline) || (Type == 'email')}
179
+ {#if (Type == "text" && !Multiline) || (Type == "email")}
180
180
  <input style={style} on:keydown={checkInput} on:keyup={thisKeyUp} bind:value={Value}/>
181
181
  {/if}
182
- {#if (Type == 'text' && Multiline)}
182
+ {#if (Type == "text" && Multiline)}
183
183
  <textarea style={style} on:keydown={checkInput} bind:value={Value}/>
184
184
  {/if}
185
185
 
186
186
  <!-- Währung -->
187
- {#if (Type == 'currency')}
187
+ {#if (Type == "currency")}
188
188
  <input style={style} on:keydown={checkInput} on:keyup={thisKeyUp} bind:value={Value}/>
189
189
  {/if}
190
190
 
@@ -1,7 +1,7 @@
1
1
  <script>
2
- import { Button } from 'svelte-chota';
3
- import { mdiTrashCan } from '@mdi/js'
4
-
2
+ import { Button } from "svelte-chota";
3
+ import { mdiTrashCan } from "@mdi/js"
4
+
5
5
  export let Handler;
6
6
  export let disabled;
7
7
  export let title;
@@ -1,7 +1,7 @@
1
1
  <script>
2
- import { Button } from 'svelte-chota';
3
- import { mdiCheck } from '@mdi/js'
4
-
2
+ import { Button } from "svelte-chota";
3
+ import { mdiCheck } from "@mdi/js"
4
+
5
5
  export let Handler;
6
6
  export let disabled;
7
7
  export let title;
package/index.js CHANGED
@@ -1,18 +1,18 @@
1
- import AddButton from './components/AddButton.svelte';
2
- import DataGrid from './components/DataGrid.svelte';
3
- import Dialog from './components/Dialog.svelte';
4
- import GanTable from './components/GanTable.svelte';
5
- import Datepicker from './components/Datepicker.svelte';
6
- import Inputbox from './components/Inputbox.svelte';
7
- import RemoveButton from './components/RemoveButton.svelte';
8
- import SaveButton from './components/SaveButton.svelte';
1
+ import AddButton from "./components/AddButton.svelte";
2
+ import DataGrid from "./components/DataGrid.svelte";
3
+ import Dialog from "./components/Dialog.svelte";
4
+ import GanTable from "./components/GanTable.svelte";
5
+ import Datepicker from "./components/Datepicker.svelte";
6
+ import Inputbox from "./components/Inputbox.svelte";
7
+ import RemoveButton from "./components/RemoveButton.svelte";
8
+ import SaveButton from "./components/SaveButton.svelte";
9
9
 
10
10
  export {
11
11
  DataGrid, Datepicker, Inputbox, Dialog, GanTable,
12
12
  AddButton, RemoveButton, SaveButton,
13
13
  }
14
14
 
15
- import { IDASFactory } from './api/IDAS';
16
- import { RESTClient } from './api/RESTClient';
15
+ import { IDASFactory } from "./api/IDAS";
16
+ import { RESTClient } from "./api/RESTClient";
17
17
 
18
18
  export { IDASFactory, RESTClient };
package/package.json CHANGED
@@ -1,41 +1,42 @@
1
1
  {
2
2
  "name": "@gandalan/weblibs",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "WebLibs for Gandalan JS/TS/Svelte projects",
5
- "author": "Philipp Reif",
5
+ "keywords": [
6
+ "gandalan"
7
+ ],
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/gandalan/idas-client-libs"
11
+ },
6
12
  "license": "ISC",
13
+ "author": "Philipp Reif",
7
14
  "main": "index",
8
15
  "typings": "index",
9
16
  "scripts": {
10
- "check": "svelte-check",
11
- "check:watch": "svelte-check --watch",
12
- "lint": "eslint ."
17
+ "svelte-check": "svelte-check",
18
+ "svelte-check:watch": "svelte-check --watch",
19
+ "lint": "eslint .",
20
+ "lint:fix": "eslint . --fix"
21
+ },
22
+ "dependencies": {
23
+ "@mdi/js": "^7.0.96",
24
+ "axios": "^0.27.2",
25
+ "jwt-decode": "^3.1.2",
26
+ "svelte-table": "^0.5.2"
13
27
  },
14
28
  "devDependencies": {
15
29
  "@babel/eslint-parser": "^7.19.1",
16
30
  "chota": "^0.8.0",
17
- "eslint": "^8.23.1",
31
+ "eslint": "^8.27.0",
18
32
  "eslint-plugin-svelte3": "^4.0.0",
19
- "svelte": "^3.50.1",
20
- "svelte-check": "^2.9.0",
33
+ "svelte": "^3.53.1",
34
+ "svelte-check": "^2.9.2",
21
35
  "svelte-chota": "^1.8.6"
22
36
  },
23
- "dependencies": {
24
- "@mdi/js": "^7.0.96",
25
- "axios": "^0.27.2",
26
- "jwt-decode": "^3.1.2",
27
- "svelte-table": "^0.5.1"
28
- },
29
37
  "peerDependencies": {
30
38
  "svelte-chota": "^1.8.6"
31
39
  },
32
- "repository": {
33
- "type": "git",
34
- "url": "https://github.com/gandalan/idas-client-libs"
35
- },
36
- "keywords": [
37
- "gandalan"
38
- ],
39
40
  "publishConfig": {
40
41
  "access": "public"
41
42
  }