首页
话题
消息
手册
我的
返回介绍

Custom toolbar menu button

发布于 2019-05-06 字数12325 浏览 920 评论 0

This example shows you how to add a simple menu button to TinyMCE’s toolbar. This demo inserts text at the cursor. The Codepen JS also shows you how to add sub-menus to a menu item.

TinyMCE HTML JS Edit on CodePen


<textarea id="custom-toolbar-menu-button">
  <p style="text-align: center; font-size: 15px;"><img title="TinyMCE Logo" src="//www.tiny.cloud/images/glyph-tinymce@2x.png" alt="TinyMCE Logo" width="110" height="97" />
  </p>
  <h2 style="text-align: center;">Welcome to the TinyMCE editor demo!</h2>
  <p>Select a menu item from the listbox above and it will insert contents into the editor at the caret position.</p>

  <h2>Got questions or need help?</h2>
  <ul>
    <li>Our <a external-link="true" href="https://www.tiny.cloud/docs/">documentation</a> is a great resource for learning how to configure TinyMCE.</li>
    <li>Have a specific question? Visit the <a external-link="true" href="https://support.tiny.cloud">Support Portal</a>.</li>
    <li>We also offer enterprise grade support as part of <a external-link="true" href="https://www.tiny.cloud/pricing">TinyMCE Enterprise</a>.</li>
  </ul>

  <h2>Found a bug?</h2>
  <p>If you think you have found a bug please create an issue on the <a external-link="true" href="https://github.com/tinymce/tinymce/issues">GitHub repo</a> to report it to the developers.</p>

  <h2>Finally ...</h2>
  <p>Don't forget to check out our other product <a external-link="true" href="http://www.plupload.com" target="_blank">Plupload</a>, your ultimate upload solution featuring HTML5 upload support.</p>
  <p>Thanks for supporting TinyMCE! We hope it helps you and your users create great content.
    <br>All the best from the TinyMCE team.</p>
</textarea>



tinymce.init({
  selector: 'textarea#custom-toolbar-menu-button',
  height: 500,
  toolbar: 'mybutton',

  content_css: [
    '//fonts.googleapis.com/css?family=Lato:300,300i,400,400i',
    '//www.tiny.cloud/css/codepen.min.css'
  ],

  setup: function (editor) {

    /* example, adding a toolbar menu button */
    editor.ui.registry.addMenuButton('mybutton', {
      text: 'My button',
      fetch: function (callback) {
        var items = [
          {
            type: 'menuitem',
            text: 'Menu item 1',
            onAction: function () {
              editor.insertContent('&nbsp;<em>You clicked menu item 1!</em>');
            }
          },
          {
            type: 'nestedmenuitem',
            text: 'Menu item 2',
            icon: 'user',
            getSubmenuItems: function () {
              return [
                {
                  type: 'menuitem',
                  text: 'Sub menu item 1',
                  icon: 'unlock',
                  onAction: function () {
                    editor.insertContent('&nbsp;<em>You clicked Sub menu item 1!</em>');
                  }
                },
                {
                  type: 'menuitem',
                  text: 'Sub menu item 2',
                  icon: 'lock',
                  onAction: function () {
                    editor.insertContent('&nbsp;<em>You clicked Sub menu item 2!</em>');
                  }
                }
              ];
            }
          }
        ];
        callback(items);
      }
    });

  }
});

(function() { var isIE = !!window.MSInputMethodContext && !!document.documentMode; if (isIE && document.getElementsByClassName(“ie11_optional”)[0] !== undefined) { document.getElementsByClassName(“ie11_optional”)[0].style.display = ‘none’; } })(); (function() { tinymce.init({ selector: ‘textarea#custom-toolbar-menu-button’, height: 500, toolbar: ‘mybutton’, content_css: [ ‘//fonts.googleapis.com/css?family=Lato:300,300i,400,400i’, ‘//www.tiny.cloud/css/codepen.min.css’ ], setup: function (editor) { /* example, adding a toolbar menu button */ editor.ui.registry.addMenuButton(‘mybutton’, { text: ‘My button’, fetch: function (callback) { var items = [ { type: ‘menuitem’, text: ‘Menu item 1’, onAction: function () { editor.insertContent(‘ You clicked menu item 1!’); } }, { type: ‘nestedmenuitem’, text: ‘Menu item 2’, icon: ‘user’, getSubmenuItems: function () { return [ { type: ‘menuitem’, text: ‘Sub menu item 1’, icon: ‘unlock’, onAction: function () { editor.insertContent(‘ You clicked Sub menu item 1!’); } }, { type: ‘menuitem’, text: ‘Sub menu item 2’, icon: ‘lock’, onAction: function () { editor.insertContent(‘ You clicked Sub menu item 2!’); } } ]; } } ]; callback(items); } }); } }); })(); (function() { /* TODO: more js, less jekyll */ var id = “custom-toolbar-menu-button”; var html = decodeURIComponent(“%0A%3Ctextarea%20id=%22custom-toolbar-menu-button%22%3E%0A%20%20%3Cp%20style=%22text-align:%20center;%20font-size:%2015px;%22%3E%3Cimg%20title=%22TinyMCE%20Logo%22%20src=%22//www.tiny.cloud/images/glyph-tinymce@2x.png%22%20alt=%22TinyMCE%20Logo%22%20width=%22110%22%20height=%2297%22%20/%3E%0A%20%20%3C/p%3E%0A%20%20%3Ch2%20style=%22text-align:%20center;%22%3EWelcome%20to%20the%20TinyMCE%20editor%20demo!%3C/h2%3E%0A%20%20%3Cp%3ESelect%20a%20menu%20item%20from%20the%20listbox%20above%20and%20it%20will%20insert%20contents%20into%20the%20editor%20at%20the%20caret%20position.%3C/p%3E%0A%0A%20%20%3Ch2%3EGot%20questions%20or%20need%20help?%3C/h2%3E%0A%20%20%3Cul%3E%0A%20%20%20%20%3Cli%3EOur%20%3Ca%20href=%22https://www.tiny.cloud/docs/%22%3Edocumentation%3C/a%3E%20is%20a%20great%20resource%20for%20learning%20how%20to%20configure%20TinyMCE.%3C/li%3E%0A%20%20%20%20%3Cli%3EHave%20a%20specific%20question?%20Visit%20the%20%3Ca%20href=%22https://support.tiny.cloud%22%3ESupport%20Portal%3C/a%3E.%3C/li%3E%0A%20%20%20%20%3Cli%3EWe%20also%20offer%20enterprise%20grade%20support%20as%20part%20of%20%3Ca%20href=%22https://www.tiny.cloud/pricing%22%3ETinyMCE%20Enterprise%3C/a%3E.%3C/li%3E%0A%20%20%3C/ul%3E%0A%0A%20%20%3Ch2%3EFound%20a%20bug?%3C/h2%3E%0A%20%20%3Cp%3EIf%20you%20think%20you%20have%20found%20a%20bug%20please%20create%20an%20issue%20on%20the%20%3Ca%20href=%22https://github.com/tinymce/tinymce/issues%22%3EGitHub%20repo%3C/a%3E%20to%20report%20it%20to%20the%20developers.%3C/p%3E%0A%0A%20%20%3Ch2%3EFinally%20…%3C/h2%3E%0A%20%20%3Cp%3EDon’t%20forget%20to%20check%20out%20our%20other%20product%20%3Ca%20href=%22http://www.plupload.com%22%20target=%22_blank%22%3EPlupload%3C/a%3E,%20your%20ultimate%20upload%20solution%20featuring%20HTML5%20upload%20support.%3C/p%3E%0A%20%20%3Cp%3EThanks%20for%20supporting%20TinyMCE!%20We%20hope%20it%20helps%20you%20and%20your%20users%20create%20great%20content.%0A%20%20%20%20%3Cbr%3EAll%20the%20best%20from%20the%20TinyMCE%20team.%3C/p%3E%0A%3C/textarea%3E%0A%0A”); var js = decodeURIComponent(“%0Atinymce.init(%7B%0A%20%20selector:%20’textarea#custom-toolbar-menu-button’,%0A%20%20height:%20500,%0A%20%20toolbar:%20’mybutton’,%0A%0A%20%20content_css:%20[%0A%20%20%20%20’//fonts.googleapis.com/css?family=Lato:300,300i,400,400i’,%0A%20%20%20%20’//www.tiny.cloud/css/codepen.min.css’%0A%20%20],%0A%0A%20%20setup:%20function%20(editor)%20%7B%0A%0A%20%20%20%20/*%20example,%20adding%20a%20toolbar%20menu%20button%20*/%0A%20%20%20%20editor.ui.registry.addMenuButton(‘mybutton’,%20%7B%0A%20%20%20%20%20%20text:%20’My%20button’,%0A%20%20%20%20%20%20fetch:%20function%20(callback)%20%7B%0A%20%20%20%20%20%20%20%20var%20items%20=%20[%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20type:%20’menuitem’,%0A%20%20%20%20%20%20%20%20%20%20%20%20text:%20’Menu%20item%201′,%0A%20%20%20%20%20%20%20%20%20%20%20%20onAction:%20function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor.insertContent(‘ %3Cem%3EYou%20clicked%20menu%20item%201!%3C/em%3E’);%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D,%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20type:%20’nestedmenuitem’,%0A%20%20%20%20%20%20%20%20%20%20%20%20text:%20’Menu%20item%202′,%0A%20%20%20%20%20%20%20%20%20%20%20%20icon:%20’user’,%0A%20%20%20%20%20%20%20%20%20%20%20%20getSubmenuItems:%20function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20[%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type:%20’menuitem’,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text:%20’Sub%20menu%20item%201′,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20icon:%20’unlock’,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onAction:%20function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor.insertContent(‘ %3Cem%3EYou%20clicked%20Sub%20menu%20item%201!%3C/em%3E’);%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type:%20’menuitem’,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text:%20’Sub%20menu%20item%202′,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20icon:%20’lock’,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onAction:%20function%20()%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor.insertContent(‘ %3Cem%3EYou%20clicked%20Sub%20menu%20item%202!%3C/em%3E’);%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20];%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20];%0A%20%20%20%20%20%20%20%20callback(items);%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D);%0A%0A%20%20%7D%0A%7D);%0A”); var css = “”; var tabNames = [“run”,”html”,”js”]; /* Note: there are some other fields we could populate here to polish this. */ /* See: https://blog.codepen.io/documentation/api/prefill/ */ var data = { title: “TinyMCE Example”, description: ”, html: html, css: css, css_external: ‘https://www.tiny.cloud/css/codepen.min.css’, js: js, js_external: ‘https://cloud.tinymce.com/5/tinymce.min.js?apiKey=qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc’ }; document.getElementById(“codepen_data_custom-toolbar-menu-button”).value = JSON.stringify(data); /* TODO: */ var tabs = tabNames.map(function(t) { return { tab: document.getElementById(“codepen_tab_” + t + “_” + id), pane: document.getElementById(“codepen_pane_” + t + “_” + id) }; }); tabs.forEach(function(t) { t.tab.onclick = function(e) { tabs.forEach(function(tt) { tt.pane.style.display = t === tt ? ‘block’ : ‘none’; tt.tab.className = t === tt ? ‘codepen_tab_selected’ : ‘codepen_tab_deselected’; }); e.preventDefault(); }; }); if (document.getElementById(“codepen_tab_codepen_” + id) !== null) { document.getElementById(“codepen_tab_codepen_” + id).onclick = function() { document.getElementById(“codepen_form_” + id).submit(); }; } })();

您暂时不能评论!

管理员开启了需要登录才能够评论,你可以免费注册一个本站的账号。

还没有评论!

目前还没有任何评论,快来抢沙发吧!