Mind Elixir × WordPress 自作プラグイン:SVG/PNGエクスポート機能を実装

Mind Elixir × WordPress 自作プラグイン:SVG/PNGエクスポート機能を実装

Mind Elixirをwordpressに組み込んだ自作プラグインに、Mind ElixirのエクスポートAPI(exportSvgexportPng)を活用して、管理画面のマインドマップエディタに「SVG ダウンロード」「PNG ダウンロード」ボタンを追加しました。

  • ボタン追加:PHPで管理画面にボタンを出力
  • JavaScript実装:jQueryの.on('click',…)ハンドラで画像生成・ダウンロードを実装

  • 文字化け回避noForeignObject: trueオプションを使ったテキスト描画


目次

環境準備

プラグイン構成

  • プラグインファイル:wp-mind-elixir-admin.php

  • スクリプト:js/wp-mind-elixir-admin.js

  • CSS:css/wp-mind-elixir-admin.css

Mind Elixir 画像エクスポートAPI概要

Mind Elixirは以下のメソッドを提供します:

exportSvg(noForeignObject?: boolean, injectCss?: string)
  • noForeignObject = true<foreignObject>を排除し、純粋な<text>要素で描画

  • injectCssにはSVG内に埋め込むCSS文字列を渡せる


ボタンの出力(PHP側)

マインドマップエディタ画面の上部に、ダウンロード用ボタンを追加します。

 <button id="mea-export-svg" class="button">SVG ダウンロード</button>
<button id="mea-export-png" class="button">PNG ダウンロード</button>
  • ボタンIDを#mea-export-svg/#mea-export-pngとし、jQueryでセレクトしやすくしています。


JavaScriptでの実装

js/wp-mind-elixir-admin.js内で、以下のように書きます。

 async function downloadImage(type) {
let blob;
try{
if (type === 'png') {
blob = await mind.exportPng(true, '');
} else {
blob = mind.exportSvg(true, '');
}
} catch (err) {
console.error('エクスポート失敗:', err);
return;
}
if (!blob) return;
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `mindmap.${type}`;
a.click();
URL.revokeObjectURL(url);
}

$('#mea-export-png').on('click', function(){
downloadImage('png');
})
$('#mea-export-svg').on('click', function(){
downloadImage('svg');
})

5. 注意点と応用

  • exportSvgexportPngnoForeignObjectfalse にすると文字の下部が切れてしまう問題があったため、当面は noForeignObjecttrue に設定しています。
    injectCss を活用すればよりきれいに整形できる可能性がありますが、まずはこの対策を優先しました。

まとめ

  1. 管理画面にSVG/PNGダウンロードボタンを追加
  2. jQueryの.on('click',…)でMind ElixirエクスポートAPIを呼び出し、Blob→ダウンロードを実装

  3. noForeignObject:trueで文字化け回避、必要に応じてinjectCssや後処理でスタイル調整

これで、ユーザーはプラグインの管理画面上でワンクリックでマインドマップを高品質なSVG/PNG形式で出力できるようになります。ぜひ実装してみてください!

参考

サーバ&テクノロジ

Posted by 納戸 工房