Ga naar inhoud

Insluiten

Insluiten is een eenvoudige manier om de app toe te voegen aan uw website. Voeg de volgende code toe aan je website:

<iframe
id="butterfly"
src="https://web.butterfly.linwood.dev/embed"
width="100%"
height="500px"
allowtransparency="true"
></iframe>
Optie Type Standaard Beschrijving
opslaan Boolean (true, false) true Schakel opslaan in. Indien uitgeschakeld wordt alleen een afsluitknop weergegeven
editable Boolean (true, false) true Bewerken inschakelen. Indien uitgeschakeld zal het document alleen-lezen zijn
fullScreen String (enabled, layoutOnly, startInLayout, forced, disabled) enabled Configure full-screen behavior. Embeds never enter browser or system full screen automatically
taal String (…, systeem, gebruiker) user Taal van het document. Indien systeem wordt de taal van de browser gedetecteerd. Als gebruiker wordt de taal ingesteld op de voorkeur van de gebruiker
fileName String Display this file name in the embed title. It is visual only and does not change the document metadata
Value Initial layout Toggle Browser/system full screen
enabled normaal ja When enabled by the user
layoutOnly normaal ja Nooit
startInLayout Volledig scherm ja Nooit
forced Volledig scherm Neen Nooit
disabled normaal Neen Nooit

The embed uses browser postMessage events. Send messages to the iframe with iframe.contentWindow.postMessage({ type, message }, origin). Butterfly sends messages back to the parent window with the same shape: { type: string, message?: unknown }.

See the embedding example for a live page that sends messages to the iframe and listens for messages from it.

<iframe
id="butterfly"
src="https://web.butterfly.linwood.dev/embed?save=true&editable=true&fileName=Example.bfly"
width="100%"
height="500"
></iframe>
<script>
const butterflyOrigin = 'https://web.butterfly.linwood.dev';
const butterfly = document.querySelector('#butterfly');
function sendToButterfly(type, message) {
butterfly.contentWindow.postMessage({ type, message }, butterflyOrigin);
}
window.addEventListener('message', (event) => {
if (
event.origin !== butterflyOrigin ||
event.source !== butterfly.contentWindow
) {
return;
}
const { type, message } = event.data ?? {};
if (type === 'save') {
const documentBytes = Array.from(message);
console.log('Save requested by the embed', documentBytes);
}
if (type === 'exit') {
const documentBytes = Array.from(message);
console.log('Exit requested by the embed', documentBytes);
}
if (type === 'change') {
console.log('Document changed', message);
}
if (type === 'getData') {
console.log('Current document bytes', message);
}
if (type === 'render') {
const image = new Image();
image.src = `data:image/png;base64,${message}`;
document.body.append(image);
}
if (type === 'renderSVG') {
const preview = document.createElement('div');
preview.innerHTML = message;
document.body.append(preview);
}
});
butterfly.addEventListener('load', () => {
sendToButterfly('getData');
// Omit camera and size fields to render the current visible canvas view.
sendToButterfly('render', {
renderBackground: true,
});
// Set the camera explicitly to render from the document origin instead.
sendToButterfly('render', {
x: 0,
y: 0,
width: 600,
height: 400,
scale: 1,
rotation: 0,
padding: { top: 0, right: 0, bottom: 0, left: 0 },
renderBackground: true,
});
});
</script>

To load document bytes into the embed, send an array of byte values:

sendToButterfly('setData', documentBytes);

To replace the current document with a new blank document without reloading the iframe, send either of these messages:

sendToButterfly('reset');
// Equivalent:
sendToButterfly('setData', null);

Listen for events with window.addEventListener('message', ...).

The save event is emitted when the user clicks the save button.

Parameters:

  • message (Type List<int>): The data of the document.

The exit event is emitted when the user clicks the exit button.

Parameters:

  • message (Type List<int>): The data of the document.

The change event is emitted when the user changes the document.

Parameters:

  • message (Type List<int>): The data of the document.

Call methods with iframe.contentWindow.postMessage(...). Methods that return data send another message back with the same type.

The getData method returns the data of the document.

Geen parameters. Returns: List<int>

The setData method replaces the document, or creates a new blank document when passed null.

Parameters:

  • data (Type List<int> | null): The document bytes, or null to reset it.

The reset method replaces the current document with a new blank document.

Geen parameters.

The render method renders the document to a png image.

All parameters are optional. With no camera or size parameters, Butterfly exports the current visible canvas view. To export from the document origin, set x: 0, y: 0, scale: 1, and rotation: 0 together with the desired output size.

Padding expands the output dimensions: the final width is width + left + right and the final height is height + top + bottom.

Parameters:

Parameter Type Standaard Beschrijving
x Number Current view x Document x position of the exported view.
y Number Current view y Document y position of the exported view.
width Number Current viewport width Output width in pixels.
height Number Current viewport height Output height in pixels.
scale Number Current zoom Camera zoom used for the export.
rotation Number Current rotation Camera rotation in radians.
padding Object All sides 0 Extra output pixels added with top, right, bottom, and left fields.
renderBackground Boolean true Whether to include the document background.

Returns: String (Base64 encoded image)

The renderSVG method renders the document to a svg image.

It accepts the same optional view parameters as render. Omitting them exports the current visible canvas view; explicitly setting an identity camera exports from the document origin.

Parameters:

Parameter Type Standaard Beschrijving
x Number Current view x Document x position of the exported view.
y Number Current view y Document y position of the exported view.
width Number Current viewport width Output width in pixels.
height Number Current viewport height Output height in pixels.
scale Number Current zoom Camera zoom used for the export.
rotation Number Current rotation Camera rotation in radians.
padding Object All sides 0 Extra output pixels added with top, right, bottom, and left fields.
renderBackground Boolean true Whether to include the document background.

Returns: String (SVG)