@gandalan/weblibs 1.0.7 → 1.0.8

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,10 +1,10 @@
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 = {
@@ -20,7 +20,7 @@ export let IDASFactory = {
20
20
  },
21
21
 
22
22
  async authorize() {
23
- var urlParams = new URLSearchParams(location.search);
23
+ let urlParams = new URLSearchParams(location.search);
24
24
  if (urlParams.has("m")) {
25
25
  localStorage.setItem("IDAS_MandantGuid", urlParams.get("m"));
26
26
  }
@@ -28,37 +28,37 @@ export let IDASFactory = {
28
28
  localStorage.setItem("IDAS_ApiBaseUrl", urlParams.get("a"));
29
29
  apiBaseUrl = urlParams.get("a");
30
30
  }
31
- if (urlParams.has('j')) { // it is JWT
31
+ if (urlParams.has("j")) { // it is JWT
32
32
  let idas = new IDAS();
33
- idas.authorizeWithJwt(urlParams.get('j'));
33
+ idas.authorizeWithJwt(urlParams.get("j"));
34
34
  window.location.search = "";
35
35
  return Promise.reject("redirect is required");
36
36
  }
37
- if (urlParams.has('t')) { // it is authToken
38
- localStorage.setItem('IDAS_AuthJwtRefreshToken', urlParams.get("t"));
39
- var refreshClient = new RESTClient(apiBaseUrl, '');
37
+ if (urlParams.has("t")) { // it is authToken
38
+ localStorage.setItem("IDAS_AuthJwtRefreshToken", urlParams.get("t"));
39
+ let refreshClient = new RESTClient(apiBaseUrl, "");
40
40
  await refreshClient.refreshToken()
41
41
  .then(() => {
42
42
  window.location.search = "";
43
43
  });
44
44
  return Promise.reject("redirect is required");
45
45
  }
46
- }
46
+ },
47
47
  }
48
48
 
49
49
  class IDAS {
50
50
  restClient = undefined;
51
51
 
52
- authorizeWithJwt(jwtToken, mandant = '') {
52
+ authorizeWithJwt(jwtToken, mandant = "") {
53
53
  authJwtToken = jwtToken;
54
- mandant && localStorage.setItem('IDAS_MandantGuid', mandant);
54
+ mandant && localStorage.setItem("IDAS_MandantGuid", mandant);
55
55
  this.restClient = new RESTClient(apiBaseUrl, jwtToken, true);
56
56
  }
57
57
 
58
58
  async authenticateWithJwt(authPath) {
59
59
  return new Promise(async (resolve, reject) => {
60
60
  // no valid JWT, but try to use "refresh token" first to retrive new JWT
61
- var refreshClient = new RESTClient(apiBaseUrl, '');
61
+ let refreshClient = new RESTClient(apiBaseUrl, "");
62
62
  await refreshClient.checkRefreshToken(authJwtToken, () => {
63
63
  authJwtToken = undefined;
64
64
  // ... so repeat authenticate (should lead to /Session login page)
@@ -67,26 +67,26 @@ class IDAS {
67
67
 
68
68
  // still not valid JWT -> authenticate
69
69
  if (!refreshClient.token) {
70
- localStorage.setItem('IDAS_AuthJwtCallbackPath', authPath || '');
70
+ localStorage.setItem("IDAS_AuthJwtCallbackPath", authPath || "");
71
71
  const authEndpoint = (new URL(window.location.href).origin) + authPath;
72
72
  let authUrlCallback = `${authEndpoint}?r=%target%&j=%jwt%&m=%mandant%`;
73
- authUrlCallback = authUrlCallback.replace('%target%', encodeURIComponent(window.location.href));
74
-
73
+ authUrlCallback = authUrlCallback.replace("%target%", encodeURIComponent(window.location.href));
74
+
75
75
  const url = new URL(apiBaseUrl);
76
76
  url.pathname = "/Session";
77
77
  url.search = `?a=${appToken}&r=${encodeURIComponent(authUrlCallback)}`;
78
78
  let jwtUrl = url.toString();
79
-
79
+
80
80
  window.location = jwtUrl;
81
- reject('not authenticated yet');
81
+ reject("not authenticated yet");
82
82
  } else {
83
83
  this.authorizeWithJwt(refreshClient.token);
84
84
  resolve(this);
85
- }
85
+ }
86
86
  });
87
87
  }
88
88
 
89
- mandantGuid = localStorage.getItem('IDAS_MandantGuid');
89
+ mandantGuid = localStorage.getItem("IDAS_MandantGuid");
90
90
 
91
91
  claims = {
92
92
  hasClaim(key) {
@@ -98,8 +98,8 @@ class IDAS {
98
98
  let decoded = jwt_decode(authJwtToken);
99
99
  let val = decoded[key];
100
100
  return val !== undefined;
101
- }
102
- catch {}
101
+ // eslint-disable-next-line no-empty
102
+ } catch {}
103
103
 
104
104
  return false;
105
105
  },
@@ -112,30 +112,30 @@ class IDAS {
112
112
  try {
113
113
  let decoded = jwt_decode(authJwtToken);
114
114
  return decoded[key];
115
- }
116
- catch {}
115
+ // eslint-disable-next-line no-empty
116
+ } catch {}
117
117
 
118
118
  return;
119
- }
119
+ },
120
120
  }
121
121
 
122
122
  auth = {
123
123
  _self: this,
124
124
  async getCurrentAuthToken() {
125
- return await this._self.restClient.put('/Login/Update/', { Token: authToken })
125
+ return await this._self.restClient.put("/Login/Update/", { Token: authToken })
126
126
  },
127
127
  };
128
128
 
129
129
  mandanten = {
130
130
  _self: this,
131
131
  async getAll() {
132
- return await this._self.restClient.get('/Mandanten');
132
+ return await this._self.restClient.get("/Mandanten");
133
133
  },
134
134
  async get(guid) {
135
135
  return await this._self.restClient.get(`/Mandanten/${guid}`);
136
136
  },
137
137
  async save(m) {
138
- await this._self.restClient.put('/Mandanten', m);
138
+ await this._self.restClient.put("/Mandanten", m);
139
139
  },
140
140
  };
141
141
 
@@ -148,20 +148,20 @@ class IDAS {
148
148
  return await this._self.restClient.get(`/Benutzer/${guid}`);
149
149
  },
150
150
  async save(m) {
151
- await this._self.restClient.put('/Benutzer', m);
151
+ await this._self.restClient.put("/Benutzer", m);
152
152
  },
153
153
  };
154
154
 
155
155
  feedback = {
156
156
  _self: this,
157
157
  async getAll() {
158
- return await this._self.restClient.get('/Feedback/');
158
+ return await this._self.restClient.get("/Feedback/");
159
159
  },
160
160
  async get(guid) {
161
161
  return await this._self.restClient.get(`/Feedback/${guid}`);
162
162
  },
163
163
  async save(m) {
164
- await this._self.restClient.put('/Feedback', m);
164
+ await this._self.restClient.put("/Feedback", m);
165
165
  },
166
166
  async comment(guid, commentData) {
167
167
  await this._self.restClient.put(`/FeedbackKommentar/${guid}`, commentData);
@@ -177,10 +177,10 @@ class IDAS {
177
177
  rollen = {
178
178
  _self: this,
179
179
  async getAll() {
180
- return await this._self.restClient.get('/Rollen');
180
+ return await this._self.restClient.get("/Rollen");
181
181
  },
182
182
  async save(m) {
183
- await this._self.restClient.put('/Rollen', m);
183
+ await this._self.restClient.put("/Rollen", m);
184
184
  },
185
185
  };
186
186
 
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.8",
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
  }