Add permissions write permissions confirmation.

This commit is contained in:
Paulo Gustavo Veiga 2023-01-15 08:42:49 -08:00
parent 05cddf7a2b
commit 6d0c90118f
2 changed files with 51 additions and 63 deletions

View File

@ -57,6 +57,7 @@ import WidgetManager from './WidgetManager';
import { TopicShapeType } from './model/INodeModel';
import { LineType } from './ConnectionLine';
import XMLSerializerFactory from './persistence/XMLSerializerFactory';
import ImageExpoterFactory from './export/ImageExporterFactory';
class Designer extends Events {
private _mindmap: Mindmap | null;
@ -378,8 +379,16 @@ class Designer extends Events {
}
async copyToClipboard(): Promise<void> {
const enableImageSupport = true;
let topics = this.getModel().filterSelectedTopics();
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore - Permissions is not defined on PermissionsName.
const permissions = await navigator.permissions.query({ name: 'clipboard-write' });
if (permissions.state === 'granted' || permissions.state === 'prompt') {
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipboard
if (topics.length > 0) {
const blobs = {};
const mindmap = new Mindmap();
const central: NodeModel = new NodeModel('CentralTopic', mindmap);
mindmap.addBranch(central);
@ -396,35 +405,39 @@ class Designer extends Events {
const document = serializer.toXML(mindmap);
const xmlStr: string = new XMLSerializer().serializeToString(document);
const textPlainBlob = new Blob([xmlStr], { type: 'text/plain' });
blobs[textPlainBlob.type] = textPlainBlob;
if (enableImageSupport) {
// Create image blob ...
// const workspace = designer.getWorkSpace();
// const svgElement = workspace.getSVGElement();
// const size = { width: window.innerWidth, height: window.innerHeight };
const workspace = designer.getWorkSpace();
const svgElement = workspace.getSVGElement();
const size = { width: window.innerWidth, height: window.innerHeight };
// const imageUrl = ImageExpoterFactory.create(
// 'png',
// svgElement,
// size.width,
// size.height,
// false,
// );
// let imgStr = await imageUrl.exportAndEncode();
// imgStr = imgStr.replace('octet/stream', 'image/png');
// const imgBlob = await (await fetch(imgStr)).blob();
const imageUrl = ImageExpoterFactory.create(
'png',
svgElement,
size.width,
size.height,
false,
);
let imgStr = await imageUrl.exportAndEncode();
imgStr = imgStr.replace('octet/stream', 'image/png');
const imgBlob = await (await fetch(imgStr)).blob();
blobs[imgBlob.type] = imgBlob;
}
// Finally, add to clipboard ...
const clipboard = new ClipboardItem({
[textPlainBlob.type]: textPlainBlob,
// [imgBlob.type]: imgBlob,
});
const clipboard = new ClipboardItem(blobs);
navigator.clipboard.write([clipboard]).then(
() => console.log('Copy of node success'),
(e) => console.error(e),
(e) => {
console.error('Unexpected error adding to clipboard');
console.error(e);
},
);
}
}
}
async pasteClipboard(): Promise<void> {
const type = 'text/plain';

View File

@ -1,25 +0,0 @@
{
"short_name": "WiseMapping",
"name": "WiseMapping",
"icons": [{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "favicon.png",
"type": "image/png",
"sizes": "1024x1024"
}
],
"permissions" : [
"https://*/*",
"clipboardRead",
"clipboardWrite",
"storage"
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}