[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] branch master updated (a165afa6 -> 451dd746)
From: |
gnunet |
Subject: |
[taler-wallet-core] branch master updated (a165afa6 -> 451dd746) |
Date: |
Wed, 27 Apr 2022 19:34:04 +0200 |
This is an automated email from the git hooks/post-receive script.
sebasjm pushed a change to branch master
in repository wallet-core.
from a165afa6 wallet-core: implement age restriction support
new 0b8e0a08 update taler logo
new 451dd746 toggle permission
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../taler-wallet-webextension/manifest-v2.json | 21 +-
.../taler-wallet-webextension/manifest-v3.json | 21 +-
.../src/components/DebugCheckbox.tsx | 63 ---
.../src/cta/Withdraw.stories.tsx | 7 +
.../taler-wallet-webextension/src/cta/Withdraw.tsx | 113 +++--
.../src/hooks/useExtendedPermissions.ts | 37 +-
.../taler-wallet-webextension/src/mui/handlers.ts | 5 +
.../taler-wallet-webextension/src/permissions.ts | 21 -
.../taler-wallet-webextension/src/platform/api.ts | 10 +-
.../src/platform/chrome.ts | 66 ++-
.../taler-wallet-webextension/src/platform/dev.ts | 3 +-
.../src/platform/firefox.ts | 8 +-
.../taler-wallet-webextension/src/stories.test.ts | 13 +-
.../src/svg/taler-logo-2021-plain.svg | 44 ++
.../src/wallet/Settings.stories.tsx | 7 +-
.../src/wallet/Settings.tsx | 23 +-
.../src/wallet/Welcome.stories.tsx | 6 +-
.../src/wallet/Welcome.tsx | 16 +-
packages/taler-wallet-webextension/src/wxApi.ts | 8 +-
.../taler-wallet-webextension/src/wxBackend.ts | 9 +-
.../static/img/logo-2015-medium.png | Bin 65674 -> 0 bytes
.../taler-wallet-webextension/static/img/logo.png | 1 -
.../static/img/taler-logo-128.png | Bin 0 -> 8941 bytes
.../static/img/taler-logo-16.png | Bin 0 -> 751 bytes
.../static/img/taler-logo-19.png | Bin 0 -> 944 bytes
.../static/img/taler-logo-2022.svg | 468 +++++++++++++++++++++
.../static/img/taler-logo-256.png | Bin 0 -> 18664 bytes
.../static/img/taler-logo-32.png | Bin 0 -> 1755 bytes
.../static/img/taler-logo-38.png | Bin 0 -> 2088 bytes
.../static/img/taler-logo-48.png | Bin 0 -> 2790 bytes
.../static/img/taler-logo-512.png | Bin 0 -> 39994 bytes
.../static/img/taler-logo-64.png | Bin 0 -> 4138 bytes
32 files changed, 771 insertions(+), 199 deletions(-)
delete mode 100644
packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
delete mode 100644 packages/taler-wallet-webextension/src/permissions.ts
create mode 100644
packages/taler-wallet-webextension/src/svg/taler-logo-2021-plain.svg
delete mode 100644
packages/taler-wallet-webextension/static/img/logo-2015-medium.png
delete mode 120000 packages/taler-wallet-webextension/static/img/logo.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-128.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-16.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-19.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-2022.svg
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-256.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-32.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-38.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-48.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-512.png
create mode 100644
packages/taler-wallet-webextension/static/img/taler-logo-64.png
diff --git a/packages/taler-wallet-webextension/manifest-v2.json
b/packages/taler-wallet-webextension/manifest-v2.json
index f98f70e6..9ea4ff03 100644
--- a/packages/taler-wallet-webextension/manifest-v2.json
+++ b/packages/taler-wallet-webextension/manifest-v2.json
@@ -14,8 +14,15 @@
}
},
"icons": {
- "32": "static/img/icon.png",
- "128": "static/img/logo.png"
+ "16": "static/img/taler-logo-16.png",
+ "19": "static/img/taler-logo-19.png",
+ "32": "static/img/taler-logo-32.png",
+ "38": "static/img/taler-logo-38.png",
+ "48": "static/img/taler-logo-48.png",
+ "64": "static/img/taler-logo-64.png",
+ "128": "static/img/taler-logo-128.png",
+ "256": "static/img/taler-logo-256.png",
+ "512": "static/img/taler-logo-512.png"
},
"commands": {
"_execute_browser_action": {
@@ -33,7 +40,15 @@
],
"browser_action": {
"default_icon": {
- "32": "static/img/icon.png"
+ "16": "static/img/taler-logo-16.png",
+ "19": "static/img/taler-logo-19.png",
+ "32": "static/img/taler-logo-32.png",
+ "38": "static/img/taler-logo-38.png",
+ "48": "static/img/taler-logo-48.png",
+ "64": "static/img/taler-logo-64.png",
+ "128": "static/img/taler-logo-128.png",
+ "256": "static/img/taler-logo-256.png",
+ "512": "static/img/taler-logo-512.png"
},
"default_title": "GNU Taler Wallet",
"default_popup": "static/popup.html"
diff --git a/packages/taler-wallet-webextension/manifest-v3.json
b/packages/taler-wallet-webextension/manifest-v3.json
index a8f043b3..5e94466e 100644
--- a/packages/taler-wallet-webextension/manifest-v3.json
+++ b/packages/taler-wallet-webextension/manifest-v3.json
@@ -7,8 +7,15 @@
"version_name": "0.9.0-dev.9",
"minimum_chrome_version": "88",
"icons": {
- "32": "static/img/icon.png",
- "128": "static/img/logo.png"
+ "16": "static/img/taler-logo-16.png",
+ "19": "static/img/taler-logo-19.png",
+ "32": "static/img/taler-logo-32.png",
+ "38": "static/img/taler-logo-38.png",
+ "48": "static/img/taler-logo-48.png",
+ "64": "static/img/taler-logo-64.png",
+ "128": "static/img/taler-logo-128.png",
+ "256": "static/img/taler-logo-256.png",
+ "512": "static/img/taler-logo-512.png"
},
"permissions": [
"unlimitedStorage",
@@ -30,7 +37,15 @@
],
"action": {
"default_icon": {
- "32": "static/img/icon.png"
+ "16": "static/img/taler-logo-16.png",
+ "19": "static/img/taler-logo-19.png",
+ "32": "static/img/taler-logo-32.png",
+ "38": "static/img/taler-logo-38.png",
+ "48": "static/img/taler-logo-48.png",
+ "64": "static/img/taler-logo-64.png",
+ "128": "static/img/taler-logo-128.png",
+ "256": "static/img/taler-logo-256.png",
+ "512": "static/img/taler-logo-512.png"
},
"default_title": "GNU Taler Wallet",
"default_popup": "static/popup.html"
diff --git
a/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
b/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
deleted file mode 100644
index 8d431f68..00000000
--- a/packages/taler-wallet-webextension/src/components/DebugCheckbox.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- This file is part of TALER
- (C) 2016 GNUnet e.V.
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-import { h, VNode } from "preact";
-import { useTranslationContext } from "../context/translation.js";
-
-export function DebugCheckbox({
- enabled,
- onToggle,
-}: {
- enabled: boolean;
- onToggle: () => void;
-}): VNode {
- const { i18n } = useTranslationContext();
-
- return (
- <div>
- <input
- checked={enabled}
- onClick={onToggle}
- type="checkbox"
- id="checkbox-perm"
- style={{ width: "1.5em", height: "1.5em", verticalAlign: "middle" }}
- />
- <label
- htmlFor="checkbox-perm"
- style={{ marginLeft: "0.5em", fontWeight: "bold" }}
- >
- <i18n.Translate>
- Automatically open wallet based on page content
- </i18n.Translate>
- </label>
- <span
- style={{
- color: "#383838",
- fontSize: "smaller",
- display: "block",
- marginLeft: "2em",
- }}
- >
- (
- <i18n.Translate>
- Enabling this option below will make using the wallet faster, but
- requires more permissions from your browser.
- </i18n.Translate>
- )
- </span>
- </div>
- );
-}
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
b/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
index f2bc14f7..b77e98a1 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
@@ -229,3 +229,10 @@ export const EditExchangeModified =
createExample(TestedComponent, {
tosProps: normalTosState,
},
});
+
+export const CompletedWithoutBankURL = createExample(TestedComponent, {
+ state: {
+ status: "completed",
+ hook: undefined,
+ },
+});
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
index 3346512f..cd0ba2cc 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
@@ -37,6 +37,7 @@ import {
ButtonWarning,
LinkSuccess,
SubTitle,
+ SuccessBox,
WalletAction,
} from "../components/styled/index.js";
import { useTranslationContext } from "../context/translation.js";
@@ -53,7 +54,12 @@ interface Props {
talerWithdrawUri?: string;
}
-type State = LoadingUri | LoadingExchange | LoadingInfoError | Success;
+type State =
+ | LoadingUri
+ | LoadingExchange
+ | LoadingInfoError
+ | Success
+ | Completed;
interface LoadingUri {
status: "loading-uri";
@@ -68,6 +74,11 @@ interface LoadingInfoError {
hook: HookError | undefined;
}
+type Completed = {
+ status: "completed";
+ hook: undefined;
+};
+
type Success = {
status: "success";
hook: undefined;
@@ -185,6 +196,7 @@ export function useComponentState(
undefined,
);
const [doingWithdraw, setDoingWithdraw] = useState<boolean>(false);
+ const [withdrawCompleted, setWithdrawCompleted] = useState<boolean>(false);
const [showExchangeSelection, setShowExchangeSelection] = useState(false);
const [nextExchange, setNextExchange] = useState<string | undefined>();
@@ -220,6 +232,7 @@ export function useComponentState(
if (res.confirmTransferUrl) {
document.location.href = res.confirmTransferUrl;
}
+ setWithdrawCompleted(true);
} catch (e) {
if (e instanceof TalerError) {
setWithdrawError(e);
@@ -245,6 +258,12 @@ export function useComponentState(
hook: undefined,
};
}
+ if (withdrawCompleted) {
+ return {
+ status: "completed",
+ hook: undefined,
+ };
+ }
const exchangeHandler: SelectFieldHandler = {
onChange: async (e) => setNextExchange(e),
@@ -332,8 +351,64 @@ export function useComponentState(
};
}
-export function View({ state }: { state: Success }): VNode {
+export function View({ state }: { state: State }): VNode {
const { i18n } = useTranslationContext();
+ if (state.status === "loading-uri") {
+ if (!state.hook) return <Loading />;
+
+ return (
+ <LoadingError
+ title={
+ <i18n.Translate>Could not get the info from the URI</i18n.Translate>
+ }
+ error={state.hook}
+ />
+ );
+ }
+ if (state.status === "loading-exchange") {
+ if (!state.hook) return <Loading />;
+
+ return (
+ <LoadingError
+ title={<i18n.Translate>Could not get exchange</i18n.Translate>}
+ error={state.hook}
+ />
+ );
+ }
+ if (state.status === "loading-info") {
+ if (!state.hook) return <Loading />;
+ return (
+ <LoadingError
+ title={
+ <i18n.Translate>Could not get info of withdrawal</i18n.Translate>
+ }
+ error={state.hook}
+ />
+ );
+ }
+
+ if (state.status === "completed") {
+ return (
+ <WalletAction>
+ <LogoHeader />
+ <SubTitle>
+ <i18n.Translate>Digital cash withdrawal</i18n.Translate>
+ </SubTitle>
+ <SuccessBox>
+ <h3>
+ <i18n.Translate>Withdrawal in process...</i18n.Translate>
+ </h3>
+ <p>
+ <i18n.Translate>
+ You can close the page now. Check your bank if the transaction
+ need a confirmation step to be completed
+ </i18n.Translate>
+ </p>
+ </SuccessBox>
+ </WalletAction>
+ );
+ }
+
return (
<WalletAction>
<LogoHeader />
@@ -460,39 +535,5 @@ export function WithdrawPage({ talerWithdrawUri }: Props):
VNode {
return <Loading />;
}
- if (state.status === "loading-uri") {
- if (!state.hook) return <Loading />;
-
- return (
- <LoadingError
- title={
- <i18n.Translate>Could not get the info from the URI</i18n.Translate>
- }
- error={state.hook}
- />
- );
- }
- if (state.status === "loading-exchange") {
- if (!state.hook) return <Loading />;
-
- return (
- <LoadingError
- title={<i18n.Translate>Could not get exchange</i18n.Translate>}
- error={state.hook}
- />
- );
- }
- if (state.status === "loading-info") {
- if (!state.hook) return <Loading />;
- return (
- <LoadingError
- title={
- <i18n.Translate>Could not get info of withdrawal</i18n.Translate>
- }
- error={state.hook}
- />
- );
- }
-
return <View state={state} />;
}
diff --git
a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
index 18283995..e3ea56d1 100644
--- a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
@@ -17,23 +17,32 @@
import { useState, useEffect } from "preact/hooks";
import * as wxApi from "../wxApi.js";
import { platform } from "../platform/api.js";
-import { getReadRequestPermissions } from "../permissions.js";
+import { ToggleHandler } from "../mui/handlers.js";
+import { TalerError } from "@gnu-taler/taler-wallet-core";
-export function useExtendedPermissions(): [boolean, () => Promise<void>] {
+export function useExtendedPermissions(): ToggleHandler {
const [enabled, setEnabled] = useState(false);
-
+ const [error, setError] = useState<TalerError | undefined>();
const toggle = async (): Promise<void> => {
- return handleExtendedPerm(enabled, setEnabled)
+ return handleExtendedPerm(enabled, setEnabled).catch(e => {
+ setError(TalerError.fromException(e))
+ })
};
useEffect(() => {
async function getExtendedPermValue(): Promise<void> {
- const res = await wxApi.getExtendedPermissions();
+ const res = await wxApi.containsHeaderListener();
setEnabled(res.newValue);
}
getExtendedPermValue();
}, []);
- return [enabled, toggle];
+ return {
+ value: enabled,
+ button: {
+ onClick: toggle,
+ error
+ }
+ };
}
async function handleExtendedPerm(isEnabled: boolean, onChange: (value:
boolean) => void): Promise<void> {
@@ -42,18 +51,20 @@ async function handleExtendedPerm(isEnabled: boolean,
onChange: (value: boolean)
// as the result of an input event ...
let granted: boolean;
try {
- granted = await
platform.getPermissionsApi().request(getReadRequestPermissions());
+ granted = await platform.getPermissionsApi().requestHostPermissions();
} catch (lastError) {
- console.error("error requesting permissions");
- console.error(lastError);
onChange(false);
- return
+ throw lastError;
}
- console.log("permissions granted:", granted);
- const res = await wxApi.setExtendedPermissions(granted);
+ const res = await wxApi.toggleHeaderListener(granted);
onChange(res.newValue);
} else {
- await wxApi.setExtendedPermissions(false).then(r => onChange(r.newValue));
+ try {
+ await wxApi.toggleHeaderListener(false).then(r => onChange(r.newValue));
+ } catch (e) {
+ console.log(e)
+ }
+
}
return
}
diff --git a/packages/taler-wallet-webextension/src/mui/handlers.ts
b/packages/taler-wallet-webextension/src/mui/handlers.ts
index f75070c9..60cfee42 100644
--- a/packages/taler-wallet-webextension/src/mui/handlers.ts
+++ b/packages/taler-wallet-webextension/src/mui/handlers.ts
@@ -11,6 +11,11 @@ export interface ButtonHandler {
error?: TalerError;
}
+export interface ToggleHandler {
+ value?: boolean;
+ button: ButtonHandler;
+}
+
export interface SelectFieldHandler {
onChange: (value: string) => Promise<void>;
error?: string;
diff --git a/packages/taler-wallet-webextension/src/permissions.ts
b/packages/taler-wallet-webextension/src/permissions.ts
deleted file mode 100644
index ea714244..00000000
--- a/packages/taler-wallet-webextension/src/permissions.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-const perms = {
- permissions: ["webRequest"],
- origins: ["http://*/*", "https://*/*"],
-}
-export const getReadRequestPermissions = (): typeof perms => perms
\ No newline at end of file
diff --git a/packages/taler-wallet-webextension/src/platform/api.ts
b/packages/taler-wallet-webextension/src/platform/api.ts
index 65bc3654..cee628a6 100644
--- a/packages/taler-wallet-webextension/src/platform/api.ts
+++ b/packages/taler-wallet-webextension/src/platform/api.ts
@@ -34,9 +34,9 @@ export interface Permissions {
* Compatibility API that works on multiple browsers.
*/
export interface CrossBrowserPermissionsApi {
- contains(p: Permissions): Promise<boolean>;
- request(p: Permissions): Promise<boolean>;
- remove(p: Permissions): Promise<boolean>;
+ containsHostPermissions(): Promise<boolean>;
+ requestHostPermissions(): Promise<boolean>;
+ removeHostPermissions(): Promise<boolean>;
addPermissionsListener(callback: (p: Permissions, lastError?: string) =>
void): void;
@@ -131,6 +131,10 @@ export interface PlatformAPI {
* Backend API
*/
registerTalerHeaderListener(onHeader: (tabId: number, url: string) => void):
void;
+ /**
+ * Frontend API
+ */
+ containsTalerHeaderListener(): boolean;
/**
* Backend API
*/
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts
b/packages/taler-wallet-webextension/src/platform/chrome.ts
index d1f4585d..d295168b 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -16,7 +16,6 @@
*/
import { classifyTalerUri, CoreApiResponse, TalerUriType } from
"@gnu-taler/taler-util";
-import { getReadRequestPermissions } from "../permissions.js";
import { CrossBrowserPermissionsApi, MessageFromBackend, Permissions,
PlatformAPI } from "./api.js";
const api: PlatformAPI = {
@@ -37,7 +36,8 @@ const api: PlatformAPI = {
registerTalerHeaderListener,
sendMessageToAllChannels,
sendMessageToWalletBackground,
- useServiceWorkerAsBackgroundProcess
+ useServiceWorkerAsBackgroundProcess,
+ containsTalerHeaderListener,
}
export default api;
@@ -46,9 +46,15 @@ function isFirefox(): boolean {
return false;
}
-export function contains(p: Permissions): Promise<boolean> {
+const hostPermissions = {
+ permissions: ["webRequest"],
+ origins: ["http://*/*", "https://*/*"],
+}
+
+
+export function containsHostPermissions(): Promise<boolean> {
return new Promise((res, rej) => {
- chrome.permissions.contains(p, (resp) => {
+ chrome.permissions.contains(hostPermissions, (resp) => {
const le = chrome.runtime.lastError?.message
if (le) {
rej(le)
@@ -58,9 +64,9 @@ export function contains(p: Permissions): Promise<boolean> {
})
}
-export async function request(p: Permissions): Promise<boolean> {
+export async function requestHostPermissions(): Promise<boolean> {
return new Promise((res, rej) => {
- chrome.permissions.request(p, (resp) => {
+ chrome.permissions.request(hostPermissions, (resp) => {
const le = chrome.runtime.lastError?.message
if (le) {
rej(le)
@@ -70,9 +76,41 @@ export async function request(p: Permissions):
Promise<boolean> {
})
}
-export async function remove(p: Permissions): Promise<boolean> {
+type HeaderListenerFunc = (details:
chrome.webRequest.WebResponseHeadersDetails) => void
+let currentHeaderListener: HeaderListenerFunc | undefined = undefined;
+
+export function containsTalerHeaderListener(): boolean {
+ return currentHeaderListener !== undefined;
+}
+
+export async function removeHostPermissions(): Promise<boolean> {
+ //if there is a handler already, remove it
+ if (
+ "webRequest" in chrome &&
+ "onHeadersReceived" in chrome.webRequest &&
+ currentHeaderListener &&
+ chrome.webRequest.onHeadersReceived.hasListener(currentHeaderListener)
+ ) {
+ chrome.webRequest.onHeadersReceived.removeListener(currentHeaderListener);
+ }
+
+ currentHeaderListener = undefined;
+
+ //notify the browser about this change, this operation is expensive
+ if ("webRequest" in chrome) {
+ chrome.webRequest.handlerBehaviorChanged(() => {
+ if (chrome.runtime.lastError) {
+ console.error(JSON.stringify(chrome.runtime.lastError));
+ }
+ });
+ }
+
+ if (chrome.runtime && chrome.runtime.getManifest().manifest_version === 3) {
+ // Trying to remove host permissions with manifest >= v3 throws an error
+ return true;
+ }
return new Promise((res, rej) => {
- chrome.permissions.remove(p, (resp) => {
+ chrome.permissions.remove(hostPermissions, (resp) => {
const le = chrome.runtime.lastError?.message
if (le) {
rej(le)
@@ -92,7 +130,7 @@ function addPermissionsListener(callback: (p: Permissions,
lastError?: string) =
function getPermissionsApi(): CrossBrowserPermissionsApi {
return {
- addPermissionsListener, contains, request, remove
+ addPermissionsListener, containsHostPermissions, requestHostPermissions,
removeHostPermissions
}
}
@@ -245,7 +283,6 @@ function getWalletVersion(): WalletVersion {
return manifestData;
}
-
function registerTalerHeaderListener(callback: (tabId: number, url: string) =>
void): void {
console.log("setting up header listener");
@@ -271,15 +308,18 @@ function registerTalerHeaderListener(callback: (tabId:
number, url: string) => v
}
return;
}
+ const prevHeaderListener = currentHeaderListener;
+ currentHeaderListener = headerListener;
- getPermissionsApi().contains(getReadRequestPermissions()).then(result => {
+ getPermissionsApi().containsHostPermissions().then(result => {
//if there is a handler already, remove it
if (
"webRequest" in chrome &&
"onHeadersReceived" in chrome.webRequest &&
- chrome.webRequest.onHeadersReceived.hasListener(headerListener)
+ prevHeaderListener &&
+ chrome.webRequest.onHeadersReceived.hasListener(prevHeaderListener)
) {
- chrome.webRequest.onHeadersReceived.removeListener(headerListener);
+ chrome.webRequest.onHeadersReceived.removeListener(prevHeaderListener);
}
//if the result was positive, add the headerListener
if (result) {
diff --git a/packages/taler-wallet-webextension/src/platform/dev.ts
b/packages/taler-wallet-webextension/src/platform/dev.ts
index 38fcf29f..e05ff29e 100644
--- a/packages/taler-wallet-webextension/src/platform/dev.ts
+++ b/packages/taler-wallet-webextension/src/platform/dev.ts
@@ -22,8 +22,9 @@ const frames = ["popup", "wallet"]
const api: PlatformAPI = ({
isFirefox: () => false,
findTalerUriInActiveTab: async () => undefined,
+ containsTalerHeaderListener: () => { return true },
getPermissionsApi: () => ({
- addPermissionsListener: () => undefined, contains: async () => true,
remove: async () => false, request: async () => false
+ addPermissionsListener: () => undefined, containsHostPermissions: async ()
=> true, removeHostPermissions: async () => false, requestHostPermissions:
async () => false
}),
getWalletVersion: () => ({
version: 'none'
diff --git a/packages/taler-wallet-webextension/src/platform/firefox.ts
b/packages/taler-wallet-webextension/src/platform/firefox.ts
index 21d0e187..d5beda32 100644
--- a/packages/taler-wallet-webextension/src/platform/firefox.ts
+++ b/packages/taler-wallet-webextension/src/platform/firefox.ts
@@ -15,7 +15,7 @@
*/
import { CrossBrowserPermissionsApi, Permissions, PlatformAPI } from
"./api.js";
-import chromePlatform, { contains as chromeContains, remove as chromeRemove,
request as chromeRequest } from "./chrome.js";
+import chromePlatform, { containsHostPermissions as chromeContains,
removeHostPermissions as chromeRemove, requestHostPermissions as chromeRequest
} from "./chrome.js";
const api: PlatformAPI = {
...chromePlatform,
@@ -40,9 +40,9 @@ function addPermissionsListener(callback: (p: Permissions) =>
void): void {
function getPermissionsApi(): CrossBrowserPermissionsApi {
return {
addPermissionsListener,
- contains: chromeContains,
- request: chromeRequest,
- remove: chromeRemove
+ containsHostPermissions: chromeContains,
+ requestHostPermissions: chromeRequest,
+ removeHostPermissions: chromeRemove
}
}
diff --git a/packages/taler-wallet-webextension/src/stories.test.ts
b/packages/taler-wallet-webextension/src/stories.test.ts
index 7e6be428..ef8b4de5 100644
--- a/packages/taler-wallet-webextension/src/stories.test.ts
+++ b/packages/taler-wallet-webextension/src/stories.test.ts
@@ -18,15 +18,18 @@
*
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { setupI18n } from "@gnu-taler/taler-util";
+import * as components from "./components/index.stories.js";
+import * as cta from "./cta/index.stories.js";
+import * as mui from "./mui/index.stories.js";
+import { setupPlatform } from "./platform/api.js";
+import chromeAPI from "./platform/chrome.js";
import * as popup from "./popup/index.stories.js";
+import { renderNodeOrBrowser } from "./test-utils.js";
import * as wallet from "./wallet/index.stories.js";
-import * as mui from "./mui/index.stories.js";
-import * as cta from "./cta/index.stories.js";
-import * as components from "./components/index.stories.js";
-import { setupI18n } from "@gnu-taler/taler-util";
-import { renderNodeOrBrowser } from "./test-utils.js";
setupI18n("en", { en: {} });
+setupPlatform(chromeAPI);
function testThisStory(st: any): any {
describe(`render examples for ${(st as any).default.title}`, () => {
diff --git
a/packages/taler-wallet-webextension/src/svg/taler-logo-2021-plain.svg
b/packages/taler-wallet-webextension/src/svg/taler-logo-2021-plain.svg
new file mode 100644
index 00000000..6e3cc254
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/svg/taler-logo-2021-plain.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ width="670"
+ height="300"
+ viewBox="0 0 201 90"
+ version="1.1"
+ id="svg8">
+ <g
+ id="logo">
+ <g
+ id="circles"
+
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943">
+ <path
+ d="m 86.662153,1.1211936 c 15.589697,0 29.129227,9.4011664
35.961027,23.2018054 h -5.81736 C 110.4866,13.623304 99.349002,6.5180852
86.662153,6.5180852 c -19.690571,0 -35.652876,17.1120008 -35.652876,38.2205688
0,10.331797 3.825597,19.704678 10.03957,26.582945 -1.342357,1.120912
-2.771532,2.127905 -4.275488,3.006754 C 50.071485,66.553412 45.974857,56.15992
45.974857,44.738654 c 0,-24.089211 18.216325,-43.6174604 40.687296,-43.6174604
z M 122.51416,65.375898 c -6.86645,13.680134 [...]
+ id="path2350" />
+ <path
+ d="m 64.212372,1.1211936 c 1.052607,0 2.095998,0.042919
3.128684,0.1270583 C 64.288864,2.8094199 61.427378,4.728606 58.802653,6.9555572
41.679542,9.7498571 28.559494,25.601563 28.559494,44.738654 c 0,14.264563
7.29059,26.702023 18.093843,33.268925 -1.593656,0.26719 -3.226966,0.406948
-4.890748,0.406948 -1.239545,0 -2.46151,-0.07952 -3.663522,-0.229364 C
29.191129,70.184015 23.525076,58.171633 23.525076,44.738654 23.525076,20.649443
41.7414,1.1211936 64.212372,1.1211936 Z M 69.62 [...]
+ id="path2352" />
+ <path
+ d="m 41.762589,1.1211936 c 1.064296,0 2.118804,0.044379
3.162607,0.1302161 -3.046523,1.558961 -5.903162,3.4745139 -8.52358,5.6968133 C
19.254624,9.7205882 6.1097128,25.583465 6.1097128,44.738654 c 0,21.108568
15.9624012,38.22057 35.6528762,38.22057 12.599746,0 23.672446,-7.007056
30.013748,-17.583802 h 5.838515 C 70.748498,79.055727 57.26924,88.356116
41.762589,88.356116 c -22.470907,0 -40.6871998,-19.52825 -40.6871998,-43.617462
0,-24.089211 18.2162928,-43.6174604 40.6871998,-4 [...]
+ id="path2354" />
+ </g>
+ <g
+ id="letters">
+ <path
+ d="m 76.135411,34.409066 h 9.161042 V 29.36588 H 61.857537 v 5.043186
h 9.161137 v 25.92317 h 5.116737 z"
+ id="path2346" />
+ <path
+ d="m 92.647571,52.856334 h 13.659009 l 2.93009,7.476072 h 5.36461 L
101.89122,29.144903 H 97.187186 L 84.477089,60.332406 h 5.199533 z m
11.802109,-4.822276 h -9.944771 l 4.951718,-12.386462 z"
+ id="path2362" />
+ <path
+ d="m 123.80641,29.366084 h -4.58038 v 30.966322 h 20.54728 v
-4.910253 c -5.32227,0 -10.64463,0 -15.9669,0 z"
+ id="path2356" />
+ <path
+ d="m 166.4722,29.366084 h -21.37564 v 30.966322 h 21.58203 v
-4.910253 h -16.54771 v -8.27275 h 14.48439 V 42.23925 h -14.48439 v -7.962811
h 16.34132 z"
+ id="path2360" />
+ <path
+ d="m 191.19035,39.474593 c 0,1.59947 -0.53646,2.87535
-1.61628,3.818883 -1.07281,0.95124 -2.52409,1.422837 -4.34678,1.422837 h
-7.44851 V 34.276439 h 7.4073 c 1.9051,0 3.38376,0.435027 4.42939,1.312178
1.05226,0.870258 1.57488,2.167734 1.57488,3.885976 z m 6.06602,20.857813
-7.79911,-11.723191 c 1.01771,-0.294794 1.94631,-0.714813 2.78553,-1.260566
0.83885,-0.545619 1.56122,-1.209263 2.16629,-1.990627 0.60541,-0.781738
1.07981,-1.681096 1.42369,-2.698345 0.34378,-1.017553 0.5156 [...]
+ id="path2358" />
+ </g>
+ </g>
+</svg>
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
b/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
index f5077894..936ba511 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
@@ -32,18 +32,19 @@ export default {
export const AllOff = createExample(TestedComponent, {
deviceName: "this-is-the-device-name",
+ permissionToggle: { value: false, button: {} },
setDeviceName: () => Promise.resolve(),
});
export const OneChecked = createExample(TestedComponent, {
deviceName: "this-is-the-device-name",
- permissionsEnabled: true,
+ permissionToggle: { value: false, button: {} },
setDeviceName: () => Promise.resolve(),
});
export const WithOneExchange = createExample(TestedComponent, {
deviceName: "this-is-the-device-name",
- permissionsEnabled: true,
+ permissionToggle: { value: false, button: {} },
setDeviceName: () => Promise.resolve(),
knownExchanges: [
{
@@ -62,7 +63,7 @@ export const WithOneExchange = createExample(TestedComponent,
{
export const WithExchangeInDifferentState = createExample(TestedComponent, {
deviceName: "this-is-the-device-name",
- permissionsEnabled: true,
+ permissionToggle: { value: false, button: {} },
setDeviceName: () => Promise.resolve(),
knownExchanges: [
{
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.tsx
b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
index 5a9c776f..83ce76ad 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
@@ -17,6 +17,7 @@
import { ExchangeListItem } from "@gnu-taler/taler-util";
import { Fragment, h, VNode } from "preact";
import { Checkbox } from "../components/Checkbox.js";
+import { ErrorTalerOperation } from "../components/ErrorTalerOperation.js";
import { JustInDevMode } from "../components/JustInDevMode.js";
import { SelectList } from "../components/SelectList.js";
import {
@@ -32,12 +33,13 @@ import { useTranslationContext } from
"../context/translation.js";
import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js";
import { useBackupDeviceName } from "../hooks/useBackupDeviceName.js";
import { useExtendedPermissions } from "../hooks/useExtendedPermissions.js";
+import { ToggleHandler } from "../mui/handlers.js";
import { Pages } from "../NavigationBar.js";
import { buildTermsOfServiceStatus } from "../utils/index.js";
import * as wxApi from "../wxApi.js";
export function SettingsPage(): VNode {
- const [permissionsEnabled, togglePermissions] = useExtendedPermissions();
+ const permissionToggle = useExtendedPermissions();
const { devMode, toggleDevMode } = useDevContext();
const { name, update } = useBackupDeviceName();
@@ -52,8 +54,7 @@ export function SettingsPage(): VNode {
}
deviceName={name}
setDeviceName={update}
- permissionsEnabled={permissionsEnabled}
- togglePermissions={togglePermissions}
+ permissionToggle={permissionToggle}
developerMode={devMode}
toggleDeveloperMode={toggleDevMode}
/>
@@ -63,8 +64,7 @@ export function SettingsPage(): VNode {
export interface ViewProps {
deviceName: string;
setDeviceName: (s: string) => Promise<void>;
- permissionsEnabled: boolean;
- togglePermissions: () => void;
+ permissionToggle: ToggleHandler;
developerMode: boolean;
toggleDeveloperMode: () => void;
knownExchanges: Array<ExchangeListItem>;
@@ -72,8 +72,7 @@ export interface ViewProps {
export function SettingsView({
knownExchanges,
- permissionsEnabled,
- togglePermissions,
+ permissionToggle,
developerMode,
toggleDeveloperMode,
}: ViewProps): VNode {
@@ -82,6 +81,12 @@ export function SettingsView({
return (
<Fragment>
<section>
+ {permissionToggle.button.error && (
+ <ErrorTalerOperation
+ title={<i18n.Translate>Could not toggle auto-open</i18n.Translate>}
+ error={permissionToggle.button.error.errorDetail}
+ />
+ )}
<SubTitle>
<i18n.Translate>Navigator</i18n.Translate>
</SubTitle>
@@ -98,8 +103,8 @@ export function SettingsView({
requires more permissions from your browser.
</i18n.Translate>
}
- enabled={permissionsEnabled}
- onToggle={togglePermissions}
+ enabled={permissionToggle.value!}
+ onToggle={permissionToggle.button.onClick!}
/>
<SubTitle>
diff --git a/packages/taler-wallet-webextension/src/wallet/Welcome.stories.tsx
b/packages/taler-wallet-webextension/src/wallet/Welcome.stories.tsx
index 424eb9d7..10ff78b2 100644
--- a/packages/taler-wallet-webextension/src/wallet/Welcome.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Welcome.stories.tsx
@@ -28,7 +28,7 @@ export default {
};
export const Normal = createExample(TestedComponent, {
- permissionsEnabled: true,
+ permissionToggle: { value: true, button: {} },
diagnostics: {
errors: [],
walletManifestVersion: "1.0",
@@ -40,9 +40,9 @@ export const Normal = createExample(TestedComponent, {
export const TimedoutDiagnostics = createExample(TestedComponent, {
timedOut: true,
- permissionsEnabled: false,
+ permissionToggle: { value: true, button: {} },
});
export const RunningDiagnostics = createExample(TestedComponent, {
- permissionsEnabled: false,
+ permissionToggle: { value: true, button: {} },
});
diff --git a/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
b/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
index 58023a20..38bcf800 100644
--- a/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
@@ -27,15 +27,15 @@ import { SubTitle, Title } from
"../components/styled/index.js";
import { useTranslationContext } from "../context/translation.js";
import { useDiagnostics } from "../hooks/useDiagnostics.js";
import { useExtendedPermissions } from "../hooks/useExtendedPermissions.js";
+import { ToggleHandler } from "../mui/handlers.js";
import { platform } from "../platform/api.js";
export function WelcomePage(): VNode {
- const [permissionsEnabled, togglePermissions] = useExtendedPermissions();
+ const permissionToggle = useExtendedPermissions();
const [diagnostics, timedOut] = useDiagnostics();
return (
<View
- permissionsEnabled={permissionsEnabled}
- togglePermissions={togglePermissions}
+ permissionToggle={permissionToggle}
diagnostics={diagnostics}
timedOut={timedOut}
/>
@@ -43,14 +43,12 @@ export function WelcomePage(): VNode {
}
export interface ViewProps {
- permissionsEnabled: boolean;
- togglePermissions: () => void;
+ permissionToggle: ToggleHandler;
diagnostics: WalletDiagnostics | undefined;
timedOut: boolean;
}
export function View({
- permissionsEnabled,
- togglePermissions,
+ permissionToggle,
diagnostics,
timedOut,
}: ViewProps): VNode {
@@ -105,8 +103,8 @@ export function View({
requires more permissions from your browser.)
</i18n.Translate>
}
- enabled={permissionsEnabled}
- onToggle={togglePermissions}
+ enabled={permissionToggle.value!}
+ onToggle={permissionToggle.button.onClick!}
/>
<SubTitle>
<i18n.Translate>Next Steps</i18n.Translate>
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts
b/packages/taler-wallet-webextension/src/wxApi.ts
index 128a82fd..da80e9bd 100644
--- a/packages/taler-wallet-webextension/src/wxApi.ts
+++ b/packages/taler-wallet-webextension/src/wxApi.ts
@@ -345,17 +345,17 @@ export function getDiagnostics():
Promise<WalletDiagnostics> {
/**
* Get diagnostics information
*/
-export function setExtendedPermissions(
+export function toggleHeaderListener(
value: boolean,
): Promise<ExtendedPermissionsResponse> {
- return callBackend("wxSetExtendedPermissions", { value });
+ return callBackend("toggleHeaderListener", { value });
}
/**
* Get diagnostics information
*/
-export function getExtendedPermissions(): Promise<ExtendedPermissionsResponse>
{
- return callBackend("wxGetExtendedPermissions", {});
+export function containsHeaderListener(): Promise<ExtendedPermissionsResponse>
{
+ return callBackend("containsHeaderListener", {});
}
/**
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts
b/packages/taler-wallet-webextension/src/wxBackend.ts
index b0c4102f..b0d690ef 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -43,7 +43,6 @@ import {
import { SetTimeoutTimerAPI } from "@gnu-taler/taler-wallet-core";
import { BrowserCryptoWorkerFactory } from "./browserCryptoWorkerFactory.js";
import { BrowserHttpLib } from "./browserHttpLib.js";
-import { getReadRequestPermissions } from "./permissions.js";
import { MessageFromBackend, platform } from "./platform/api.js";
import { SynchronousCryptoWorkerFactory } from
"./serviceWorkerCryptoWorkerFactory.js";
import { ServiceWorkerHttpLib } from "./serviceWorkerHttpLib.js";
@@ -131,19 +130,19 @@ async function dispatch(
r = wrapResponse(await reinitWallet());
break;
}
- case "wxGetExtendedPermissions": {
- const res = await
platform.getPermissionsApi().contains(getReadRequestPermissions());
+ case "containsHeaderListener": {
+ const res = await platform.containsTalerHeaderListener();
r = wrapResponse({ newValue: res });
break;
}
- case "wxSetExtendedPermissions": {
+ case "toggleHeaderListener": {
const newVal = req.payload.value;
logger.trace("new extended permissions value", newVal);
if (newVal) {
platform.registerTalerHeaderListener(parseTalerUriAndRedirect);
r = wrapResponse({ newValue: true });
} else {
- const rem = await
platform.getPermissionsApi().remove(getReadRequestPermissions());
+ const rem = await platform.getPermissionsApi().removeHostPermissions();
logger.trace("permissions removed:", rem);
r = wrapResponse({ newVal: false });
}
diff --git a/packages/taler-wallet-webextension/static/img/logo-2015-medium.png
b/packages/taler-wallet-webextension/static/img/logo-2015-medium.png
deleted file mode 100644
index acf84baa..00000000
Binary files
a/packages/taler-wallet-webextension/static/img/logo-2015-medium.png and
/dev/null differ
diff --git a/packages/taler-wallet-webextension/static/img/logo.png
b/packages/taler-wallet-webextension/static/img/logo.png
deleted file mode 120000
index 1ddb87d2..00000000
--- a/packages/taler-wallet-webextension/static/img/logo.png
+++ /dev/null
@@ -1 +0,0 @@
-logo-2015-medium.png
\ No newline at end of file
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-128.png
b/packages/taler-wallet-webextension/static/img/taler-logo-128.png
new file mode 100644
index 00000000..a2f0c22e
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-128.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-16.png
b/packages/taler-wallet-webextension/static/img/taler-logo-16.png
new file mode 100644
index 00000000..eb42bad1
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-16.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-19.png
b/packages/taler-wallet-webextension/static/img/taler-logo-19.png
new file mode 100644
index 00000000..8c8c6ae8
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-19.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-2022.svg
b/packages/taler-wallet-webextension/static/img/taler-logo-2022.svg
new file mode 100644
index 00000000..2ac2785b
--- /dev/null
+++ b/packages/taler-wallet-webextension/static/img/taler-logo-2022.svg
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="670"
+ height="300"
+ viewBox="0 0 201 90"
+ version="1.1"
+ id="svg8"
+ sodipodi:docname="taler-logo-2023.svg"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)">
+ <metadata
+ id="metadata67">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs854">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20663">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20665"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20667">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20669"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20671">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20673"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20675">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20677"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20679">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20681"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20683">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20685"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20687">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20689"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20691">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20693"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20695">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20697"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20699">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20701"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20703">
+ <rect
+
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20705"
+ width="164.73636"
+ height="53.465477"
+ x="12.38413"
+ y="263.48923" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20707">
+ <rect
+
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20709"
+ width="164.73636"
+ height="53.465477"
+ x="-16.523348"
+ y="98.188889" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20711">
+ <rect
+
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20713"
+ width="164.73636"
+ height="53.465477"
+ x="-16.523348"
+ y="98.188889" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20715">
+ <rect
+
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20717"
+ width="164.73636"
+ height="53.465477"
+ x="-16.523348"
+ y="98.188889" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20719">
+ <rect
+
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20721"
+ width="164.73636"
+ height="53.465477"
+ x="-16.523348"
+ y="98.188889" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20723">
+ <rect
+
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20725"
+ width="164.73636"
+ height="53.465477"
+ x="-16.523348"
+ y="98.188889" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20727">
+ <rect
+
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20729"
+ width="164.73636"
+ height="53.465477"
+ x="-16.523348"
+ y="98.188889" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20731">
+ <rect
+
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20733"
+ width="164.73636"
+ height="53.465477"
+ x="-16.523348"
+ y="98.188889" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath20735">
+ <rect
+
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#df373a;stroke-width:0.103816;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect20737"
+ width="164.73636"
+ height="53.465477"
+ x="-16.523348"
+ y="98.188889" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="namedview852"
+ pagecolor="#000000"
+ bordercolor="#cccccc"
+ borderopacity="1"
+ inkscape:pageshadow="0"
+ inkscape:pageopacity="0"
+ inkscape:pagecheckerboard="false"
+ showgrid="false"
+ inkscape:zoom="0.46315494"
+ inkscape:cx="-659.30808"
+ inkscape:cy="83.54417"
+ inkscape:window-width="1920"
+ inkscape:window-height="1025"
+ inkscape:window-x="0"
+ inkscape:window-y="26"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="logo" />
+ <g
+ id="logo">
+ <g
+ id="circles"
+
style="display:inline;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+ transform="translate(180)">
+ <g
+ id="g4645"
+ inkscape:export-xdpi="98.304001"
+ inkscape:export-ydpi="98.304001">
+ <ellipse
+ transform="matrix(-0.99007841,-0.140516,0.16039263,-0.98705329,0,0)"
+ ry="75.234604"
+ rx="74.764656"
+ cy="-29.611343"
+ cx="101.25517"
+ id="path4580"
+
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.1471165;stroke-opacity:1"
/>
+ <g
+ transform="rotate(-180,-107.57659,26.234233)"
+ id="g4622">
+ <path
+ id="path1306-7-63-9"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+ d="M 45.48017,110.87571 A 35.545008,38.588202 0 0 0
9.9354536,149.46424 35.545008,38.588202 0 0 0 45.48017,188.05226
35.545008,38.588202 0 0 0 81.025385,149.46424 35.545008,38.588202 0 0 0
45.48017,110.87571 Z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0
0 1 0.823425,0.10767 31.151221,33.78691 0 0 1 0.820349,0.13097 3 [...]
+ clip-path="url(#clipPath20735)"
+ transform="translate(-177.74838,-111.36079)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-0"
+
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+ d="m 68.010803,105.31927 a 40.722405,43.678338 0 0 0
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67812
40.722405,43.678338 0 0 0 40.722647,-43.67812 40.722405,43.678338 0 0 0
-40.722647,-43.67871 z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+ clip-path="url(#clipPath20731)"
+ transform="translate(-177.74838,-111.36079)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-5"
+
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+ d="M 45.56102,105.31927 A 40.722405,43.678338 0 0 0
4.8389507,148.99798 40.722405,43.678338 0 0 0 45.56102,192.6761
40.722405,43.678338 0 0 0 86.283657,148.99798 40.722405,43.678338 0 0 0
45.56102,105.31927 Z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.68863, [...]
+ clip-path="url(#clipPath20727)"
+ transform="translate(-177.74838,-111.36079)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7-6"
+
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+ d="M 68.102923,99.029256 A 46.363577,49.444797 0 0 0
21.739728,148.47447 46.363577,49.444797 0 0 0 68.102923,197.91903
46.363577,49.444797 0 0 0 114.46677,148.47447 46.363577,49.444797 0 0 0
68.102923,99.029256 Z m -0.09212,6.290014 a 40.632485,43.292687 0 0 1
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10745
40.632485,43.292687 0 0 1 1.074041,0.13797 40.632485,43.292687 0 0 1 1.0700
[...]
+ clip-path="url(#clipPath20723)"
+ transform="translate(-177.74838,-111.36079)"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7-63-6"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+ d="m 67.929953,110.87572 a 35.545008,38.588202 0 0 0
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58801
35.545008,38.588202 0 0 0 35.545217,-38.58801 35.545008,38.588202 0 0 0
-35.545217,-38.58853 z m -0.07061,4.90891 a 31.151221,33.78691 0 0 1
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0
0 1 0.823425,0.10768 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+ clip-path="url(#clipPath20719)"
+ transform="translate(-177.74838,-111.36079)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306"
+
style="opacity:1;fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:#df373a;stroke-width:0.0376767;stroke-linejoin:round;stroke-opacity:1"
+ d="m 90.379694,105.31927 a 40.722405,43.678338 0 0 0
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67812
40.722405,43.678338 0 0 0 40.722646,-43.67812 40.722405,43.678338 0 0 0
-40.722646,-43.67871 z m -0.0809,5.55644 a 35.68863,38.243712 0 0 1
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1
0.94336,0.12188 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+ clip-path="url(#clipPath20715)"
+ transform="translate(-177.74838,-111.36079)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7"
+
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+ d="M 90.531339,99.785944 A 46.363577,49.444797 0 0 0
44.168144,149.23116 46.363577,49.444797 0 0 0 90.531339,198.67572
46.363577,49.444797 0 0 0 136.89519,149.23116 46.363577,49.444797 0 0 0
90.531339,99.785944 Z m -0.09212,6.290016 a 40.632485,43.292687 0 0 1
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10745
40.632485,43.292687 0 0 1 1.074041,0.13797 40.632485,43.292687 0 0 1 1.0700
[...]
+ clip-path="url(#clipPath20711)"
+ transform="translate(-177.74838,-111.36079)"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7-63"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+ d="m 90.144156,110.56416 a 35.545008,38.588202 0 0 0
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58802
35.545008,38.588202 0 0 0 35.545224,-38.58802 35.545008,38.588202 0 0 0
-35.545224,-38.58853 z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0
0 1 0.823425,0.10767 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+ clip-path="url(#clipPath20707)"
+ transform="translate(-177.74838,-111.36079)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 119.20127,221.87113 c 15.58969,0 29.12922,9.40117
35.96102,23.20181 h -5.81736 c -6.31922,-10.6997 -17.45681,-17.80491
-30.14366,-17.80491 -19.690574,0 -35.652879,17.112 -35.652879,38.22056
0,10.3318 3.825597,19.70468 10.03957,26.58295 -1.342357,1.12091
-2.771532,2.1279 -4.275488,3.00675 -6.701874,-7.77494 -10.798502,-18.16843
-10.798502,-29.5897 0,-24.08921 18.216325,-43.61746 40.687299,-43.61746 z m
35.852,64.25471 c -6.86645,13.68013 -20.34561,22.98022 -35.852,22.980 [...]
+ id="path2350-0"
+
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+ clip-path="url(#clipPath20703)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 96.751486,221.87113 c 1.052607,0 2.095998,0.0429
3.128684,0.12706 -3.052192,1.56117 -5.913678,3.48036 -8.538403,5.70731
-17.123111,2.7943 -30.243159,18.646 -30.243159,37.78309 0,14.26457
7.29059,26.70203 18.093843,33.26893 -1.593656,0.26719 -3.226966,0.40695
-4.890748,0.40695 -1.239545,0 -2.46151,-0.0795 -3.663522,-0.22937
-8.907938,-8.00114 -14.573991,-20.01353 -14.573991,-33.44651 0,-24.08921
18.216324,-43.61746 40.687296,-43.61746 z m 5.409714,81.40059 c 10.32112,-1.
[...]
+ id="path2352-7"
+
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+ clip-path="url(#clipPath20699)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 74.301703,221.87113 c 1.064296,0 2.118804,0.0444
3.162607,0.13022 -3.046523,1.55896 -5.903162,3.47451 -8.52358,5.69681
-17.146992,2.77237 -30.291903,18.63524 -30.291903,37.79043 0,21.10857
15.962401,38.22057 35.652876,38.22057 12.599746,0 23.672446,-7.00705
30.013747,-17.5838 h 5.83852 c -6.86636,13.68031 -20.345616,22.9807
-35.852267,22.9807 -22.470907,0 -40.6872,-19.52825 -40.6872,-43.61747
0,-24.08921 18.216293,-43.61746 40.6872,-43.61746 z m 30.142787,23.20181 c -1.
[...]
+ id="path2354-0"
+
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.327943"
+ clip-path="url(#clipPath20695)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-9"
+
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round;stroke-opacity:1"
+ d="m 119.12038,221.87113 a 40.722405,43.678338 0 0 0
-40.722073,43.67871 40.722405,43.678338 0 0 0 40.722073,43.67813
40.722405,43.678338 0 0 0 40.72263,-43.67813 40.722405,43.678338 0 0 0
-40.72263,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1
0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+ clip-path="url(#clipPath20671)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7-63-4"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+ d="m 118.88484,227.11603 a 35.545008,38.588202 0 0 0
-35.544718,38.58853 35.545008,38.588202 0 0 0 35.544718,38.58802
35.545008,38.588202 0 0 0 35.54521,-38.58802 35.545008,38.588202 0 0 0
-35.54521,-38.58853 z m -0.0706,4.90891 a 31.151221,33.78691 0 0 1
0.82905,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0 1
0.82752,0.0595 31.151221,33.78691 0 0 1 0.82596,0.0839 31.151221,33.78691 0 0 1
0.82342,0.10768 31.151221,33.78691 0 0 1 0.82035,0.13096 31.151 [...]
+ clip-path="url(#clipPath20663)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-0-7"
+
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+ d="m 96.751486,221.87113 a 40.722405,43.678338 0 0 0
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67813
40.722405,43.678338 0 0 0 40.722634,-43.67813 40.722405,43.678338 0 0 0
-40.722634,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1
0.94805,0.0674 35.68863,38.243712 0 0 1 0.946284,0.0949 35.68863,38.243712 0 0
1 0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14825 35.688 [...]
+ clip-path="url(#clipPath20687)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7-63-9-8"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+ d="m 74.220853,227.42758 a 35.545008,38.588202 0 0 0
-35.544717,38.58853 35.545008,38.588202 0 0 0 35.544717,38.58802
35.545008,38.588202 0 0 0 35.545217,-38.58802 35.545008,38.588202 0 0 0
-35.545217,-38.58853 z m -0.07061,4.90891 a 31.151221,33.78691 0 0 1
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0
0 1 0.823425,0.10768 31.151221,33.78691 0 0 1 0.820349,0.1309 [...]
+ clip-path="url(#clipPath20691)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7-63-6-2"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0330856;stroke-linejoin:round;stroke-opacity:1"
+ d="m 96.670636,227.42758 a 35.545008,38.588202 0 0 0
-35.544717,38.58854 35.545008,38.588202 0 0 0 35.544717,38.58801
35.545008,38.588202 0 0 0 35.545214,-38.58801 35.545008,38.588202 0 0 0
-35.545214,-38.58854 z m -0.07061,4.90892 a 31.151221,33.78691 0 0 1
0.829048,0.0119 31.151221,33.78691 0 0 1 0.82854,0.0362 31.151221,33.78691 0 0
1 0.827519,0.0595 31.151221,33.78691 0 0 1 0.825964,0.0839 31.151221,33.78691 0
0 1 0.823423,0.10767 31.151221,33.78691 0 0 1 0.82035,0.13097 [...]
+ clip-path="url(#clipPath20675)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7-6-6"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+ d="M 96.843606,215.58112 A 46.363577,49.444797 0 0 0
50.480411,265.02634 46.363577,49.444797 0 0 0 96.843606,314.4709
46.363577,49.444797 0 0 0 143.20744,265.02634 46.363577,49.444797 0 0 0
96.843606,215.58112 Z m -0.09212,6.29001 a 40.632485,43.292687 0 0 1
1.081384,0.0153 40.632485,43.292687 0 0 1 1.080714,0.0464 40.632485,43.292687 0
0 1 1.079381,0.0763 40.632485,43.292687 0 0 1 1.077365,0.10746
40.632485,43.292687 0 0 1 1.07404,0.13796 40.632485,43.292687 0 0 1 1.07004,0
[...]
+ clip-path="url(#clipPath20679)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-5-7"
+
style="fill:#0042b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0376767;stroke-linejoin:round"
+ d="m 74.301703,221.87113 a 40.722405,43.678338 0 0 0
-40.72207,43.67871 40.722405,43.678338 0 0 0 40.72207,43.67813
40.722405,43.678338 0 0 0 40.722637,-43.67813 40.722405,43.678338 0 0 0
-40.722637,-43.67871 z m -0.0809,5.55645 a 35.68863,38.243712 0 0 1
0.94981,0.0135 35.68863,38.243712 0 0 1 0.94922,0.041 35.68863,38.243712 0 0 1
0.94805,0.0674 35.68863,38.243712 0 0 1 0.94628,0.0949 35.68863,38.243712 0 0 1
0.94336,0.12187 35.68863,38.243712 0 0 1 0.93984,0.14824 35.6886 [...]
+ clip-path="url(#clipPath20683)"
+ transform="translate(-206.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1306-7-8"
+
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.0427732;stroke-linejoin:round;stroke-opacity:1"
+ d="m 119.27202,216.33781 a 46.363577,49.444797 0 0 0
-46.363193,49.44522 46.363577,49.444797 0 0 0 46.363193,49.44456
46.363577,49.444797 0 0 0 46.36384,-49.44456 46.363577,49.444797 0 0 0
-46.36384,-49.44522 z m -0.0921,6.29001 a 40.632485,43.292687 0 0 1
1.08139,0.0153 40.632485,43.292687 0 0 1 1.08071,0.0464 40.632485,43.292687 0 0
1 1.07938,0.0763 40.632485,43.292687 0 0 1 1.07737,0.10745 40.632485,43.292687
0 0 1 1.07404,0.13797 40.632485,43.292687 0 0 1 1.07003,0.16781 [...]
+ clip-path="url(#clipPath20667)"
+ transform="translate(-251.48906,-227.91266)"
+ inkscape:export-filename="C:\Users\a116178\Downloads\Taler\taler
512.png"
+ inkscape:export-xdpi="96.231026"
+ inkscape:export-ydpi="96.231026"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-256.png
b/packages/taler-wallet-webextension/static/img/taler-logo-256.png
new file mode 100644
index 00000000..7aa6c7bd
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-256.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-32.png
b/packages/taler-wallet-webextension/static/img/taler-logo-32.png
new file mode 100644
index 00000000..c5dbf317
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-32.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-38.png
b/packages/taler-wallet-webextension/static/img/taler-logo-38.png
new file mode 100644
index 00000000..13ee0104
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-38.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-48.png
b/packages/taler-wallet-webextension/static/img/taler-logo-48.png
new file mode 100644
index 00000000..f13a23c8
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-48.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-512.png
b/packages/taler-wallet-webextension/static/img/taler-logo-512.png
new file mode 100644
index 00000000..be312ef5
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-512.png differ
diff --git a/packages/taler-wallet-webextension/static/img/taler-logo-64.png
b/packages/taler-wallet-webextension/static/img/taler-logo-64.png
new file mode 100644
index 00000000..b8a685ae
Binary files /dev/null and
b/packages/taler-wallet-webextension/static/img/taler-logo-64.png differ
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-wallet-core] branch master updated (a165afa6 -> 451dd746),
gnunet <=