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 { TopicShapeType } from './model/INodeModel';
import { LineType } from './ConnectionLine'; import { LineType } from './ConnectionLine';
import XMLSerializerFactory from './persistence/XMLSerializerFactory'; import XMLSerializerFactory from './persistence/XMLSerializerFactory';
import ImageExpoterFactory from './export/ImageExporterFactory';
class Designer extends Events { class Designer extends Events {
private _mindmap: Mindmap | null; private _mindmap: Mindmap | null;
@ -378,8 +379,16 @@ class Designer extends Events {
} }
async copyToClipboard(): Promise<void> { async copyToClipboard(): Promise<void> {
const enableImageSupport = true;
let topics = this.getModel().filterSelectedTopics(); 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) { if (topics.length > 0) {
const blobs = {};
const mindmap = new Mindmap(); const mindmap = new Mindmap();
const central: NodeModel = new NodeModel('CentralTopic', mindmap); const central: NodeModel = new NodeModel('CentralTopic', mindmap);
mindmap.addBranch(central); mindmap.addBranch(central);
@ -396,35 +405,39 @@ class Designer extends Events {
const document = serializer.toXML(mindmap); const document = serializer.toXML(mindmap);
const xmlStr: string = new XMLSerializer().serializeToString(document); const xmlStr: string = new XMLSerializer().serializeToString(document);
const textPlainBlob = new Blob([xmlStr], { type: 'text/plain' }); const textPlainBlob = new Blob([xmlStr], { type: 'text/plain' });
blobs[textPlainBlob.type] = textPlainBlob;
if (enableImageSupport) {
// Create image blob ... // Create image blob ...
// const workspace = designer.getWorkSpace(); const workspace = designer.getWorkSpace();
// const svgElement = workspace.getSVGElement(); const svgElement = workspace.getSVGElement();
// const size = { width: window.innerWidth, height: window.innerHeight }; const size = { width: window.innerWidth, height: window.innerHeight };
// const imageUrl = ImageExpoterFactory.create( const imageUrl = ImageExpoterFactory.create(
// 'png', 'png',
// svgElement, svgElement,
// size.width, size.width,
// size.height, size.height,
// false, false,
// ); );
// let imgStr = await imageUrl.exportAndEncode(); let imgStr = await imageUrl.exportAndEncode();
// imgStr = imgStr.replace('octet/stream', 'image/png'); imgStr = imgStr.replace('octet/stream', 'image/png');
// const imgBlob = await (await fetch(imgStr)).blob(); const imgBlob = await (await fetch(imgStr)).blob();
blobs[imgBlob.type] = imgBlob;
}
// Finally, add to clipboard ... // Finally, add to clipboard ...
const clipboard = new ClipboardItem({ const clipboard = new ClipboardItem(blobs);
[textPlainBlob.type]: textPlainBlob,
// [imgBlob.type]: imgBlob,
});
navigator.clipboard.write([clipboard]).then( navigator.clipboard.write([clipboard]).then(
() => console.log('Copy of node success'), () => 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> { async pasteClipboard(): Promise<void> {
const type = 'text/plain'; 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"
}