Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • advertisement
  • automagic
  • dbp-translation-component
  • demo
  • demo-file-handling
  • favorites-and-recent-files
  • icon-set-mapping
  • lit2
  • main
  • person-select-custom
  • port-i18next-parser
  • publish
  • remove-sentry
  • renovate/lock-file-maintenance
  • revert-6c632dc6
  • wc-part
  • wip-cleanup
17 results

Target

Select target project
  • 987FCF504483CBC8/toolkit
1 result
Select Git revision
  • advertisement
  • automagic
  • dbp-translation-component
  • demo
  • demo-file-handling
  • favorites-and-recent-files
  • icon-set-mapping
  • lit2
  • main
  • person-select-custom
  • port-i18next-parser
  • publish
  • remove-sentry
  • renovate/lock-file-maintenance
  • revert-6c632dc6
  • wc-part
  • wip-cleanup
17 results
Show changes
Showing
with 267 additions and 98 deletions
{ {
"login": "Login", "login": "Login",
"login-failed": "Communication with the login server failed",
"logout": "Logout" "logout": "Logout"
} }
...@@ -7,6 +7,7 @@ import { ...@@ -7,6 +7,7 @@ import {
MiniSpinner, MiniSpinner,
Spinner, Spinner,
Translated, Translated,
Translation
} from './index'; } from './index';
commonUtils.defineCustomElement('dbp-mini-spinner', MiniSpinner); commonUtils.defineCustomElement('dbp-mini-spinner', MiniSpinner);
...@@ -16,3 +17,4 @@ commonUtils.defineCustomElement('dbp-button', Button); ...@@ -16,3 +17,4 @@ commonUtils.defineCustomElement('dbp-button', Button);
commonUtils.defineCustomElement('dbp-loading-button', LoadingButton); commonUtils.defineCustomElement('dbp-loading-button', LoadingButton);
commonUtils.defineCustomElement('dbp-inline-notification', InlineNotification); commonUtils.defineCustomElement('dbp-inline-notification', InlineNotification);
commonUtils.defineCustomElement('dbp-translated', Translated); commonUtils.defineCustomElement('dbp-translated', Translated);
commonUtils.defineCustomElement('dbp-translation', Translation);
...@@ -12,14 +12,18 @@ import { ...@@ -12,14 +12,18 @@ import {
Spinner, Spinner,
InlineNotification, InlineNotification,
Translated, Translated,
Translation,
} from './index.js'; } from './index.js';
export class DbpCommonDemo extends ScopedElementsMixin(LitElement) { export class DbpCommonDemo extends ScopedElementsMixin(LitElement) {
constructor() { constructor() {
super(); super();
this._i18n = createInstance(); this._i18n = createInstance();
this.lang = this._i18n.language; this.lang = this._i18n.language;
this.noAuth = false; this.noAuth = false;
this.langDir = '';
} }
static get scopedElements() { static get scopedElements() {
...@@ -31,6 +35,7 @@ export class DbpCommonDemo extends ScopedElementsMixin(LitElement) { ...@@ -31,6 +35,7 @@ export class DbpCommonDemo extends ScopedElementsMixin(LitElement) {
'dbp-loading-button': LoadingButton, 'dbp-loading-button': LoadingButton,
'dbp-inline-notification': InlineNotification, 'dbp-inline-notification': InlineNotification,
'dbp-translated': Translated, 'dbp-translated': Translated,
'dbp-translation': Translation
}; };
if (customElements.get('dbp-auth')) { if (customElements.get('dbp-auth')) {
...@@ -44,6 +49,7 @@ export class DbpCommonDemo extends ScopedElementsMixin(LitElement) { ...@@ -44,6 +49,7 @@ export class DbpCommonDemo extends ScopedElementsMixin(LitElement) {
return { return {
lang: {type: String}, lang: {type: String},
noAuth: {type: Boolean, attribute: 'no-auth'}, noAuth: {type: Boolean, attribute: 'no-auth'},
langDir: {type: String, attribute: 'lang-dir'},
}; };
} }
...@@ -113,7 +119,10 @@ export class DbpCommonDemo extends ScopedElementsMixin(LitElement) { ...@@ -113,7 +119,10 @@ export class DbpCommonDemo extends ScopedElementsMixin(LitElement) {
`; `;
} }
buttonClickHandler() { buttonClickHandler(e) {
// add class to button to end2end test if button was clicked
e.target.classList.add('button-clicked');
setTimeout(() => { setTimeout(() => {
const scopedTagName = this.getScopedTagName('dbp-button'); const scopedTagName = this.getScopedTagName('dbp-button');
this.shadowRoot.querySelector(scopedTagName).stop(); this.shadowRoot.querySelector(scopedTagName).stop();
...@@ -294,6 +303,11 @@ html { ...@@ -294,6 +303,11 @@ html {
</div> </div>
</dbp-translated> </dbp-translated>
</div> </div>
<div class="control" id="dbp-translation-demo">
<dbp-translation key="toolkit-showcase" subscribe="lang, lang-dir"></dbp-translation>
<dbp-translation key="toolkit-showcase-link" var='{"link1": "https://www.i18next.com/translation-function/interpolation"}' subscribe="lang, lang-dir" unsafe></dbp-translation>
<dbp-translation key="abc" subscribe="lang, lang-dir"></dbp-translation>
</div>
</div> </div>
</section> </section>
`; `;
......
import {AdapterLitElement} from './src/adapter-lit-element'; import {AdapterLitElement} from './src/adapter-lit-element.js';
export default class DBPLitElement extends AdapterLitElement { export default class DBPLitElement extends AdapterLitElement {
constructor() { constructor() {
...@@ -31,6 +31,12 @@ export default class DBPLitElement extends AdapterLitElement { ...@@ -31,6 +31,12 @@ export default class DBPLitElement extends AdapterLitElement {
: this.shadowRoot.querySelector(selector); : this.shadowRoot.querySelector(selector);
} }
_a(selector) {
return this.shadowRoot === null
? this.querySelectorAll(selector)
: this.shadowRoot.querySelectorAll(selector);
}
firstUpdated() { firstUpdated() {
super.firstUpdated(); super.firstUpdated();
this._renderDone = true; this._renderDone = true;
......
...@@ -124,3 +124,35 @@ export function setOverrides(i18n, element, overrides) { ...@@ -124,3 +124,35 @@ export function setOverrides(i18n, element, overrides) {
} }
i18n.setDefaultNamespace(hasOverrides ? overrideNamespace : namespace); i18n.setDefaultNamespace(hasOverrides ? overrideNamespace : namespace);
} }
/**
* Sets translation overrides for the given i18next instance. Any previously
* applied overrides will be removed first. So calling this with an empty overrides
* object is equal to removing all overrides.
* Expects overrides as promise and requests update after overrides have been set.
*
* @param {i18next.i18n} i18n - The i18next instance
* @param {HTMLElement} element - The element at which the overrides are targeted
* @param {object} overrides - The override data as promise
*/
export async function setOverridesByPromise(i18n, element, overrides) {
// We add a special namespace which gets used with priority and falls back
// to the original one. This way we an change the overrides at runtime
// and can even remove them.
// The scoped mixin saves the real tag name under data-tag-name
let tagName = ((element.dataset && element.dataset.tagName) || element.tagName).toLowerCase();
let namespace = i18n.options.fallbackNS;
let overrideNamespace = getOverrideNamespace(namespace);
let hasOverrides = false;
for (let lng of i18n.languages) {
overrides[lng] = await overrides[lng];
i18n.removeResourceBundle(lng, overrideNamespace);
if (overrides[lng] === undefined || overrides[lng][tagName] === undefined) continue;
let resources = overrides[lng][tagName];
hasOverrides = true;
i18n.addResourceBundle(lng, overrideNamespace, resources);
}
i18n.setDefaultNamespace(hasOverrides ? overrideNamespace : namespace);
element.requestUpdate();
}
...@@ -6,6 +6,7 @@ import {Button, LoadingButton} from './src/button.js'; ...@@ -6,6 +6,7 @@ import {Button, LoadingButton} from './src/button.js';
import {Spinner} from './src/spinner.js'; import {Spinner} from './src/spinner.js';
import {InlineNotification} from './src/inline-notification.js'; import {InlineNotification} from './src/inline-notification.js';
import {Translated} from './src/translated'; import {Translated} from './src/translated';
import {Translation} from './src/translation';
import {AdapterLitElement} from './src/adapter-lit-element.js'; import {AdapterLitElement} from './src/adapter-lit-element.js';
export {EventBus, createLinkedAbortController, createTimeoutAbortSignal}; export {EventBus, createLinkedAbortController, createTimeoutAbortSignal};
...@@ -14,7 +15,7 @@ export {MiniSpinner}; ...@@ -14,7 +15,7 @@ export {MiniSpinner};
export {Button, LoadingButton}; export {Button, LoadingButton};
export {Spinner}; export {Spinner};
export {InlineNotification}; export {InlineNotification};
export {Translated}; export {Translated, Translation};
export * from './src/logger.js'; export * from './src/logger.js';
export * from './src/utils.js'; export * from './src/utils.js';
export {AdapterLitElement}; export {AdapterLitElement};
{ {
"name": "@dbp-toolkit/common", "name": "@dbp-toolkit/common",
"homepage": "https://gitlab.tugraz.at/dbp/web-components/toolkit/-/tree/master/packages/common", "homepage": "https://gitlab.tugraz.at/dbp/web-components/toolkit/-/tree/master/packages/common",
"version": "0.3.1", "version": "0.3.3",
"module": "index.js", "module": "index.js",
"license": "LGPL-2.1-or-later", "license": "LGPL-2.1-or-later",
"repository": { "repository": {
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
}, },
"devDependencies": { "devDependencies": {
"@esm-bundle/chai": "^4.2.0", "@esm-bundle/chai": "^4.2.0",
"@rollup/plugin-commonjs": "^21.0.0", "@rollup/plugin-commonjs": "^22.0.0",
"@rollup/plugin-json": "^4.1.0", "@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^13.0.0", "@rollup/plugin-node-resolve": "^13.0.0",
"eslint": "^8.0.0", "eslint": "^8.0.0",
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
"karma-chrome-launcher": "^3.0.0", "karma-chrome-launcher": "^3.0.0",
"karma-firefox-launcher": "^2.1.0", "karma-firefox-launcher": "^2.1.0",
"karma-mocha": "^2.0.1", "karma-mocha": "^2.0.1",
"mocha": "^9.0.0", "mocha": "^10.0.0",
"playwright-core": "^1.20.2", "playwright-core": "^1.20.2",
"prettier": "^2.5.1", "prettier": "^2.5.1",
"rollup": "^2.33.3", "rollup": "^2.33.3",
......
...@@ -20,6 +20,17 @@ export class Button extends ScopedElementsMixin(LitElement) { ...@@ -20,6 +20,17 @@ export class Button extends ScopedElementsMixin(LitElement) {
this.spinner = false; this.spinner = false;
this.noSpinnerOnClick = false; this.noSpinnerOnClick = false;
this.disabled = false; this.disabled = false;
// https://bugs.chromium.org/p/chromium/issues/detail?id=1061240#c12
this.addEventListener('click', (e) => {
if (this.disabled) {
e.stopImmediatePropagation();
}
if (!this.noSpinnerOnClick) {
this.start();
}
});
} }
static get scopedElements() { static get scopedElements() {
...@@ -42,12 +53,6 @@ export class Button extends ScopedElementsMixin(LitElement) { ...@@ -42,12 +53,6 @@ export class Button extends ScopedElementsMixin(LitElement) {
}; };
} }
clickHandler() {
if (!this.noSpinnerOnClick) {
this.start();
}
}
start() { start() {
this.spinner = true; this.spinner = true;
this.disabled = true; this.disabled = true;
...@@ -77,7 +82,6 @@ export class Button extends ScopedElementsMixin(LitElement) { ...@@ -77,7 +82,6 @@ export class Button extends ScopedElementsMixin(LitElement) {
render() { render() {
return html` return html`
<button <button
@click="${this.clickHandler}"
class="button ${this.type}" class="button ${this.type}"
?disabled="${this.disabled}"> ?disabled="${this.disabled}">
${this.value} ${this.value}
......
import {createInstance as _createInstance} from '../i18next.js'; import {createInstance as _createInstance, setOverridesByPromise} from '../i18next.js';
import de from './i18n/de/translation.json'; import de from './i18n/de/translation.json';
import en from './i18n/en/translation.json'; import en from './i18n/en/translation.json';
...@@ -6,3 +6,9 @@ import en from './i18n/en/translation.json'; ...@@ -6,3 +6,9 @@ import en from './i18n/en/translation.json';
export function createInstance() { export function createInstance() {
return _createInstance({en: en, de: de}, 'de', 'en'); return _createInstance({en: en, de: de}, 'de', 'en');
} }
export function createInstanceGivenResources(en, de) {
return _createInstance({en: en, de: de}, 'de', 'en');
}
export {setOverridesByPromise};
...@@ -58,8 +58,11 @@ export class Icon extends LitElement { ...@@ -58,8 +58,11 @@ export class Icon extends LitElement {
background-color: currentColor; background-color: currentColor;
mask-repeat: no-repeat; mask-repeat: no-repeat;
mask-position: center; mask-position: center;
mask-size: 100% 100%;
-webkit-mask-repeat: no-repeat; -webkit-mask-repeat: no-repeat;
-webkit-mask-position: center; -webkit-mask-position: center;
-webkit-mask-size: 100% 100%;
} }
`; `;
} }
......
import {css, html} from 'lit';
import {unsafeHTML} from 'lit/directives/unsafe-html.js';
import DBPLitElement from '../dbp-lit-element';
import {createInstanceGivenResources, setOverridesByPromise} from './i18n.js';
// global variable as cache for translations
const translationCache = {};
// fetches overrides for given language
async function fetchOverridesByLanguage(overrides, lng) {
let result = await
fetch(overrides + lng +'/translation.json', {
headers: {'Content-Type': 'application/json'},
});
let json = await result.json();
return json;
}
// handles translation cache promises
async function cacheOverrides(overridesFile, lng) {
// use global var as cache
if (translationCache[lng] === undefined) {
// get translation.json for each lang
let response = fetchOverridesByLanguage(overridesFile, lng);
translationCache[lng] = response;
return response;
} else {
return translationCache[lng];
}
}
export class Translation extends DBPLitElement {
constructor() {
super();
this.key = '';
this.lang = '';
this.interpolation = '';
this.langDir = '';
this.unsafe = false;
}
static get properties() {
return {
...super.properties,
key: {type: String},
lang: {type: String},
interpolation: {type: Object, attribute: 'var'},
unsafe: {type: Boolean, attribute: 'unsafe'},
langDir: {type: String, attribute: 'lang-dir'},
};
}
static get styles() {
// language=css
return css`
.hidden {
display: none;
}
`;
}
connectedCallback() {
super.connectedCallback();
// init objects with empty string as value for key
const de = {};
const en = {};
de[this.key] = "";
en[this.key] = "";
// create i18n instance with given translations
this._i18n = createInstanceGivenResources(en, de);
if (this.langDir) {
for(let lng of this._i18n.languages) {
cacheOverrides(this.langDir, lng);
setOverridesByPromise(this._i18n, this, translationCache);
}
}
}
update(changedProperties) {
let lang = this.lang;
changedProperties.forEach((oldValue, propName) => {
switch (propName) {
case 'lang':
this._i18n.changeLanguage(lang);
break;
}
});
super.update(changedProperties);
}
render() {
// request to i18n translation
const translation = (() => {
if (this.interpolation && this.unsafe)
return unsafeHTML(this._i18n.t(this.key, this.interpolation));
else if (this.interpolation)
return this._i18n.t(this.key, this.interpolation);
else
return this._i18n.t(this.key);
})();
// if translation == "" key was not found
let key = "";
if (translation != "") {
key = unsafeHTML("<!-- key: " + this.key + "-->");
} else {
key = unsafeHTML("<!-- key \"" + this.key + "\" not found! -->");
}
// load translation text
return html`
${key}
${translation}
`;
}
}
...@@ -15,7 +15,7 @@ export function getThemeCSS() { ...@@ -15,7 +15,7 @@ export function getThemeCSS() {
var(--dbp-override-background, #ffffff var(--dbp-override-background, #ffffff
); );
--dbp-content: --dbp-content:
var(--dbp-override-content, #000000 var(--dbp-override-content, #222120
); );
--dbp-content-surface: --dbp-content-surface:
var(--dbp-override-content-surface, var(--dbp-override-content-surface,
...@@ -26,13 +26,13 @@ export function getThemeCSS() { ...@@ -26,13 +26,13 @@ export function getThemeCSS() {
var(--dbp-background) var(--dbp-background)
); );
--dbp-border: --dbp-border:
var(--dbp-override-border, 1px solid #000000 var(--dbp-override-border, 1px solid #222120
); );
--dbp-border-radius: --dbp-border-radius:
var(--dbp-override-border-radius, 0px var(--dbp-override-border-radius, 0px
); );
--dbp-primary: --dbp-primary:
var(--dbp-override-primary, #2a4491 var(--dbp-override-primary, #3775c1
); );
--dbp-primary-surface: --dbp-primary-surface:
var(--dbp-override-primary-surface, var(--dbp-override-primary-surface,
...@@ -44,10 +44,10 @@ export function getThemeCSS() { ...@@ -44,10 +44,10 @@ export function getThemeCSS() {
); );
--dbp-primary-surface-border-color: --dbp-primary-surface-border-color:
var(--dbp-override-primary-surface-border-color, var(--dbp-override-primary-surface-border-color,
var(--dbp-primary-surface) var(--dbp-primary)
); );
--dbp-secondary: --dbp-secondary:
var(--dbp-override-secondary, var(--dbp-content) var(--dbp-override-secondary, #222120
); );
--dbp-secondary-surface: --dbp-secondary-surface:
var(--dbp-override-secondary-surface, var(--dbp-override-secondary-surface,
...@@ -59,7 +59,7 @@ export function getThemeCSS() { ...@@ -59,7 +59,7 @@ export function getThemeCSS() {
); );
--dbp-secondary-surface-border-color: --dbp-secondary-surface-border-color:
var(--dbp-override-secondary-surface-border-color, var(--dbp-override-secondary-surface-border-color,
var(--dbp-secondary-surface) var(--dbp-secondary)
); );
--dbp-muted: --dbp-muted:
var(--dbp-override-muted, #767676 var(--dbp-override-muted, #767676
...@@ -74,10 +74,10 @@ export function getThemeCSS() { ...@@ -74,10 +74,10 @@ export function getThemeCSS() {
); );
--dbp-muted-surface-border-color: --dbp-muted-surface-border-color:
var(--dbp-override-muted-surface-border-color, var(--dbp-override-muted-surface-border-color,
var(--dbp-muted-surface) var(--dbp-muted)
); );
--dbp-accent: --dbp-accent:
var(--dbp-override-accent, #c24f68 var(--dbp-override-accent, #9e1e4d
); );
--dbp-accent-surface: --dbp-accent-surface:
var(--dbp-override-accent-surface, var(--dbp-override-accent-surface,
...@@ -89,10 +89,10 @@ export function getThemeCSS() { ...@@ -89,10 +89,10 @@ export function getThemeCSS() {
); );
--dbp-accent-surface-border-color: --dbp-accent-surface-border-color:
var(--dbp-override-accent-surface-border-color, var(--dbp-override-accent-surface-border-color,
var(--dbp-accent-surface) var(--dbp-accent)
); );
--dbp-info: var( --dbp-info:
--dbp-override-info, #2a4491 var(--dbp-override-info, #38808a
); );
--dbp-info-surface: --dbp-info-surface:
var(--dbp-override-info-surface, var(--dbp-override-info-surface,
...@@ -104,10 +104,10 @@ export function getThemeCSS() { ...@@ -104,10 +104,10 @@ export function getThemeCSS() {
); );
--dbp-info-surface-border-color: --dbp-info-surface-border-color:
var(--dbp-override-info-surface-border-color, var(--dbp-override-info-surface-border-color,
var(--dbp-info-surface) var(--dbp-info)
); );
--dbp-success: --dbp-success:
var(--dbp-override-success, #188018 var(--dbp-override-success, #338555
); );
--dbp-success-surface: --dbp-success-surface:
var(--dbp-override-success-surface, var(--dbp-override-success-surface,
...@@ -119,10 +119,10 @@ export function getThemeCSS() { ...@@ -119,10 +119,10 @@ export function getThemeCSS() {
); );
--dbp-success-surface-border-color: --dbp-success-surface-border-color:
var(--dbp-override-success-surface-border-color, var(--dbp-override-success-surface-border-color,
var(--dbp-success-surface) var(--dbp-success)
); );
--dbp-warning: --dbp-warning:
var(--dbp-override-warning, #c15500 var(--dbp-override-warning, #bf8808
); );
--dbp-warning-surface: --dbp-warning-surface:
var(--dbp-override-warning-surface, var(--dbp-override-warning-surface,
...@@ -134,10 +134,10 @@ export function getThemeCSS() { ...@@ -134,10 +134,10 @@ export function getThemeCSS() {
); );
--dbp-warning-surface-border-color: --dbp-warning-surface-border-color:
var(--dbp-override-warning-surface-border-color, var(--dbp-override-warning-surface-border-color,
var(--dbp-warning-surface) var(--dbp-warning)
); );
--dbp-danger: --dbp-danger:
var(--dbp-override-danger, #de3535 var(--dbp-override-danger, #cc3232
); );
--dbp-danger-surface: --dbp-danger-surface:
var(--dbp-override-danger-surface, var(--dbp-override-danger-surface,
...@@ -149,7 +149,7 @@ export function getThemeCSS() { ...@@ -149,7 +149,7 @@ export function getThemeCSS() {
); );
--dbp-danger-surface-border-color: --dbp-danger-surface-border-color:
var(--dbp-override-danger-surface-border-color, var(--dbp-override-danger-surface-border-color,
var(--dbp-danger-surface) var(--dbp-danger)
); );
--dbp-hover-background-color: --dbp-hover-background-color:
var(--dbp-override-hover-background-color var(--dbp-override-hover-background-color
......
packages/data-table-view/assets/favicon.ico

2.49 KiB | W: 16px | H: 16px

packages/data-table-view/assets/favicon.ico

1.12 KiB | W: 16px | H: 16px

packages/data-table-view/assets/favicon.ico
packages/data-table-view/assets/favicon.ico
packages/data-table-view/assets/favicon.ico
packages/data-table-view/assets/favicon.ico
  • 2-up
  • Swipe
  • Onion skin
{ {
"name": "@dbp-toolkit/data-table-view", "name": "@dbp-toolkit/data-table-view",
"homepage": "https://gitlab.tugraz.at/dbp/web-components/toolkit/-/tree/master/packages/data-table-view", "homepage": "https://gitlab.tugraz.at/dbp/web-components/toolkit/-/tree/master/packages/data-table-view",
"version": "0.3.0", "version": "0.3.1",
"main": "src/index.js", "main": "src/index.js",
"license": "LGPL-2.1-or-later", "license": "LGPL-2.1-or-later",
"repository": { "repository": {
...@@ -15,18 +15,18 @@ ...@@ -15,18 +15,18 @@
}, },
"devDependencies": { "devDependencies": {
"@esm-bundle/chai": "^4.2.0", "@esm-bundle/chai": "^4.2.0",
"@rollup/plugin-commonjs": "^21.0.0", "@rollup/plugin-commonjs": "^22.0.0",
"@rollup/plugin-json": "^4.1.0", "@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^13.0.0", "@rollup/plugin-node-resolve": "^13.0.0",
"@rollup/plugin-url": "^6.0.0", "@rollup/plugin-url": "^7.0.0",
"eslint": "^8.0.0", "eslint": "^8.0.0",
"eslint-plugin-jsdoc": "^39.0.0", "eslint-plugin-jsdoc": "^39.0.0",
"glob": "^7.1.6", "glob": "^8.0.0",
"i18next-parser": "^6.3.0", "i18next-parser": "^6.3.0",
"karma": "^6.0.0", "karma": "^6.0.0",
"karma-chrome-launcher": "^3.0.0", "karma-chrome-launcher": "^3.0.0",
"karma-mocha": "^2.0.1", "karma-mocha": "^2.0.1",
"mocha": "^9.0.0", "mocha": "^10.0.0",
"playwright-core": "^1.20.2", "playwright-core": "^1.20.2",
"prettier": "^2.5.1", "prettier": "^2.5.1",
"rollup": "^2.33.3", "rollup": "^2.33.3",
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
"rollup-plugin-terser": "^7.0.2" "rollup-plugin-terser": "^7.0.2"
}, },
"dependencies": { "dependencies": {
"@dbp-toolkit/auth": "^0.3.0", "@dbp-toolkit/auth": "^0.3.1",
"@dbp-toolkit/common": "^0.3.0", "@dbp-toolkit/common": "^0.3.3",
"@open-wc/scoped-elements": "^2.1.0", "@open-wc/scoped-elements": "^2.1.0",
"datatables.net-buttons": "^2.0.0", "datatables.net-buttons": "^2.0.0",
"datatables.net-buttons-dt": "^2.0.0", "datatables.net-buttons-dt": "^2.0.0",
......
...@@ -15,7 +15,7 @@ import {getIconSVGURL} from '@dbp-toolkit/common'; ...@@ -15,7 +15,7 @@ import {getIconSVGURL} from '@dbp-toolkit/common';
import * as commonUtils from '@dbp-toolkit/common/utils'; import * as commonUtils from '@dbp-toolkit/common/utils';
import * as commonStyles from '@dbp-toolkit/common/styles'; import * as commonStyles from '@dbp-toolkit/common/styles';
import {name as pkgName} from './../package.json'; import {name as pkgName} from './../package.json';
import {AdapterLitElement} from '@dbp-toolkit/provider/src/adapter-lit-element'; import {AdapterLitElement} from '@dbp-toolkit/common';
dt(window, $); dt(window, $);
resp(window, $); resp(window, $);
......
packages/file-handling/assets/favicon.ico

2.49 KiB | W: 16px | H: 16px

packages/file-handling/assets/favicon.ico

1.12 KiB | W: 16px | H: 16px

packages/file-handling/assets/favicon.ico
packages/file-handling/assets/favicon.ico
packages/file-handling/assets/favicon.ico
packages/file-handling/assets/favicon.ico
  • 2-up
  • Swipe
  • Onion skin
{ {
"name": "@dbp-toolkit/file-handling", "name": "@dbp-toolkit/file-handling",
"homepage": "https://gitlab.tugraz.at/dbp/web-components/toolkit/-/tree/master/packages/file-handling", "homepage": "https://gitlab.tugraz.at/dbp/web-components/toolkit/-/tree/master/packages/file-handling",
"version": "0.3.3", "version": "0.3.4",
"main": "src/index.js", "main": "src/index.js",
"license": "LGPL-2.1-or-later", "license": "LGPL-2.1-or-later",
"repository": { "repository": {
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
}, },
"devDependencies": { "devDependencies": {
"@esm-bundle/chai": "^4.2.0", "@esm-bundle/chai": "^4.2.0",
"@rollup/plugin-commonjs": "^21.0.0", "@rollup/plugin-commonjs": "^22.0.0",
"@rollup/plugin-json": "^4.0.2", "@rollup/plugin-json": "^4.0.2",
"@rollup/plugin-node-resolve": "^13.0.0", "@rollup/plugin-node-resolve": "^13.0.0",
"eslint": "^8.0.0", "eslint": "^8.0.0",
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
"karma-chrome-launcher": "^3.0.0", "karma-chrome-launcher": "^3.0.0",
"karma-firefox-launcher": "^2.1.0", "karma-firefox-launcher": "^2.1.0",
"karma-mocha": "^2.0.0", "karma-mocha": "^2.0.0",
"mocha": "^9.0.0", "mocha": "^10.0.0",
"playwright-core": "^1.20.2", "playwright-core": "^1.20.2",
"prettier": "^2.5.1", "prettier": "^2.5.1",
"rollup": "^2.33.3", "rollup": "^2.33.3",
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
"rollup-plugin-terser": "^7.0.2" "rollup-plugin-terser": "^7.0.2"
}, },
"dependencies": { "dependencies": {
"@dbp-toolkit/common": "^0.3.0", "@dbp-toolkit/common": "^0.3.3",
"@open-wc/scoped-elements": "^2.1.0", "@open-wc/scoped-elements": "^2.1.0",
"file-saver": "^2.0.2", "file-saver": "^2.0.2",
"i18next": "^21.4.2", "i18next": "^21.4.2",
......
...@@ -9,7 +9,7 @@ import {TabulatorFull as Tabulator} from 'tabulator-tables'; ...@@ -9,7 +9,7 @@ import {TabulatorFull as Tabulator} from 'tabulator-tables';
import {humanFileSize} from '@dbp-toolkit/common/i18next'; import {humanFileSize} from '@dbp-toolkit/common/i18next';
import {name as pkgName} from '@dbp-toolkit/file-handling/package.json'; import {name as pkgName} from '@dbp-toolkit/file-handling/package.json';
import {send} from '@dbp-toolkit/common/notification'; import {send} from '@dbp-toolkit/common/notification';
import {AdapterLitElement} from '@dbp-toolkit/provider/src/adapter-lit-element'; import {AdapterLitElement} from '@dbp-toolkit/common';
import {classMap} from 'lit/directives/class-map.js'; import {classMap} from 'lit/directives/class-map.js';
const MODE_TABLE_ONLY = 'table-only'; const MODE_TABLE_ONLY = 'table-only';
...@@ -237,7 +237,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -237,7 +237,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
this.tabulatorTable.on("tableBuilt", this.tableBuiltFunction.bind(this)); this.tabulatorTable.on("tableBuilt", this.tableBuiltFunction.bind(this));
this.tabulatorTable.on("rowClick", this.rowClickFunction.bind(this)); this.tabulatorTable.on("rowClick", this.rowClickFunction.bind(this));
this.tabulatorTable.on("rowSelectionChanged", this.rowSelectionChangedFunction.bind(this)); this.tabulatorTable.on("rowSelectionChanged", this.rowSelectionChangedFunction.bind(this));
this.tabulatorTable.on("dataLoaded", this.dataLoadedFunction.bind(this)); this.tabulatorTable.on("dataChanged", this.dataChangedFunction.bind(this));
}); });
//Register only one beforeunload Event for the clipboard warning //Register only one beforeunload Event for the clipboard warning
...@@ -292,7 +292,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -292,7 +292,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
} }
} }
dataLoadedFunction() { dataChangedFunction() {
if (this.tabulatorTable !== null) { if (this.tabulatorTable !== null) {
const that = this; const that = this;
...@@ -328,7 +328,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -328,7 +328,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
this.tabulatorTable.off("tableBuilt"); this.tabulatorTable.off("tableBuilt");
this.tabulatorTable.off("rowClick"); this.tabulatorTable.off("rowClick");
this.tabulatorTable.off("rowSelectionChanged"); this.tabulatorTable.off("rowSelectionChanged");
this.tabulatorTable.off("dataLoaded"); this.tabulatorTable.off("dataChanged");
} }
/** /**
...@@ -409,7 +409,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -409,7 +409,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
/** /**
* If clipboard files and the tabulator table exists, then clear the table and sets the new data * If clipboard files and the tabulator table exists, then clear the table and sets the new data
* *s
*/ */
generateClipboardTable() { generateClipboardTable() {
this.numberOfSelectedFiles = 0; this.numberOfSelectedFiles = 0;
...@@ -428,10 +428,20 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -428,10 +428,20 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
this.tabulatorTable.clearData(); this.tabulatorTable.clearData();
this.tabulatorTable.setData(data); this.tabulatorTable.setData(data);
if(this.clipboardFiles.files.length > 0) {
let placeholders = this._a(".tabulator-placeholder");
if(placeholders)
placeholders.forEach(placeholder => placeholder.style.display = "none");
} else {
let placeholders = this._a(".tabulator-placeholder");
if(placeholders)
placeholders.forEach(placeholder => placeholder.style.display = "inherit");
}
} }
if (this._('#select_all')) { if (this._('#select_all')) {
this._('#select_all').checked = false; this._('#select_all').checked = false;
} }
} }
/** /**
...@@ -442,7 +452,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -442,7 +452,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
async sendClipboardFiles(files) { async sendClipboardFiles(files) {
const i18n = this._i18n; const i18n = this._i18n;
for (let i = 0; i < files.length; i++) { for (let i = 0; i < files.length; i++) {
await this.sendFileEvent(files[i].file); await this.sendFileEvent(files[i].file, files.length);
} }
this.tabulatorTable.deselectRow(); this.tabulatorTable.deselectRow();
send({ send({
...@@ -453,8 +463,8 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -453,8 +463,8 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
}); });
} }
async sendFileEvent(file) { async sendFileEvent(file, maxFiles) {
const data = {file: file, data: file}; const data = {file: file, data: file, maxUpload: maxFiles};
const event = new CustomEvent('dbp-clipboard-file-picker-file-downloaded', { const event = new CustomEvent('dbp-clipboard-file-picker-file-downloaded', {
detail: data, detail: data,
bubbles: true, bubbles: true,
...@@ -517,6 +527,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -517,6 +527,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
} else { } else {
files = files.concat(event.detail.file); files = files.concat(event.detail.file);
} }
this.filesToSave = files; this.filesToSave = files;
if (files && files.length !== 0) { if (files && files.length !== 0) {
data = {files: files}; data = {files: files};
...@@ -908,24 +919,6 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -908,24 +919,6 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
justify-content: space-between; justify-content: space-between;
} }
.tabulator .tabulator-tableHolder .tabulator-placeholder span {
margin: initial;
}
/*
.checkmark {
height: 20px;
width: 20px;
left: 11px;
top: 4px;
}
.button-container .checkmark::after {
left: 8px;
top: 3px;
width: 4px;
height: 11px;
}*/
.table-wrapper { .table-wrapper {
position: relative; position: relative;
} }
...@@ -987,22 +980,6 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ...@@ -987,22 +980,6 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) {
display: block; display: block;
} }
/* .checkmark {
height: 25px;
width: 25px;
left: 9px;
top: 2px;
}
.button-container .checkmark::after {
left: 8px;
top: 2px;
width: 8px;
height: 15px;
}
*/
.btn-flex-container-mobile { .btn-flex-container-mobile {
flex-direction: column; flex-direction: column;
} }
......
...@@ -548,7 +548,7 @@ export class FileSource extends ScopedElementsMixin(DbpFileHandlingLitElement) { ...@@ -548,7 +548,7 @@ export class FileSource extends ScopedElementsMixin(DbpFileHandlingLitElement) {
nextcloud-file-url="${this.nextcloudFileURL}" nextcloud-file-url="${this.nextcloudFileURL}"
allowed-mime-types="${this.allowedMimeTypes}" allowed-mime-types="${this.allowedMimeTypes}"
@dbp-clipboard-file-picker-file-downloaded="${(event) => { @dbp-clipboard-file-picker-file-downloaded="${(event) => {
this.sendFileEvent(event.detail.file); this.sendFileEvent(event.detail.file, event.detail.maxUpload);
}}"></dbp-clipboard> }}"></dbp-clipboard>
`; `;
} }
......
...@@ -1422,6 +1422,10 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { ...@@ -1422,6 +1422,10 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) {
`; `;
this.loading = false; this.loading = false;
this.statusText = reloadButton; this.statusText = reloadButton;
this.sendSetPropertyEvent('analytics-event', {
category: 'FileHandlingNextcloud',
action: 'WebdavClientError',
});
} }
}); });
} }
......