LoginSignup
9
9

More than 5 years have passed since last update.

TinyMCEでローカルフォルダを開くのに苦労した話

Last updated at Posted at 2017-02-21

TinyMCEでローカルフォルダを開く

TinyMCE知ってますか?
スクリーンショット 2017-02-21 20.43.30.png

プラットフォームに依存しない、ウェブベースのエディタでCDNでさくっとtextareaを拡張してくれます。
厳密に言うとフリーミニアム形式なのですが、かなりのところまでフリーで使えます。
かなり使い勝手が良いのですが、ローカルフォルダを開くのに苦労したので備忘録として残したいと思います。

ドキュメントを読む

まずはドキュメントをあたります。
TinyMCEのドキュメントは豊富です。
Example & Docs > Full Featuredにあるかと思い読みましたが、該当の実装はありませんでした。

Configure TinyMCE > File & Image Upload
これが良さそうです。

tinymce.init({
  selector: 'textarea',  // change this value according to your HTML
  file_browser_callback: function(field_name, url, type, win) {
    win.document.getElementById(field_name).value = 'my browser value';
  }
});

おお、画像inputの横にフォルダが表示された!
スクリーンショット 2017-02-21 20.58.59.png

スクリーンショット 2017-02-21 20.59.06.png
あ、Exampleそのままなら、そらそうだわw 開きたいのはローカルフォルダ。やりたいのはこの先です。
しかしながら、該当の箇所を見つけられない & ローカルフォルダを開くのをコールバックでする??というのが理解できず、読み進めることに。

pluginを探す

TinyMCEは必要なものは拡張する薄いモジュールです。pluginにあるかもしれません。

image plugin, image tool plugin, media plugin,
ローカルフォルダのことはないですね。。。

途中で、file managerのextra pluginに行き着き。んー、こんなことしないといけないのか?と考えましたが、壮大になりすぎたので却下。

StackOverflow

最終的にStackOverflowで同様の投稿がありました。

    tinymce.init({
        toolbar : "imageupload",
        setup: function(editor) {
            var inp = $('<input id="tinymce-uploader" type="file" name="pic" accept="image/*" style="display:none">');
            $(editor.getElement()).parent().append(inp);

            inp.on("change",function(){
                var input = inp.get(0);
                var file = input.files[0];
                var fr = new FileReader();
                fr.onload = function() {
                    var img = new Image();
                    img.src = fr.result;
                    editor.insertContent('<img src="'+img.src+'"/>');
                    inp.val('');
                }
                fr.readAsDataURL(file);
            });

            editor.addButton( 'imageupload', {
                text:"IMAGE",
                icon: false,
                onclick: function(e) {
                    inp.trigger('click');
                }
            });
        }
    });

これは、tinymceのsetupでinputをhiddenでeditorに追加して、イベントを追加しています。

参考:http://stackoverflow.com/questions/3872009/upload-image-from-local-into-tinymce

まとめ

ここまで書く必要はなかったのですが、公式のdocumentを読んでなかった(見つけれてない可能性もあり)のが時間がかかりました。
JavaScriptでeditorにinputを追加するというのは、原理原則から考えると、至極単純な話ですが、TinyMCE側でなんとかしてくれるといった頭が強く考えつきませんでした。
基本の再確認と、頭でっかちになってたなーっていう事例なのでプロセスも記述しました。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9