title: TinyMCE custom theme - bullist numlist link unlink not working
body: <p>So I have created a custom theme for TinyMCE using the button method on their website. Most of the buttons seem to be working, but the bullist, numlist, link, and unlink buttons do nothing. Even when switching to HTML view, the html is not even added (ie. <code>&lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;</code>). I have tried adding plugins for advlist, advlink, etc but no change. Can't seem to find any answers online for this one.</p>
  
  <p>Here is my tinymce code:</p>
  
  <pre><code>$('textarea.htmlify').tinymce({
      mode: 'textareas',
      script_url : host + '/js/admin/tinymce/tiny_mce.js',
      content_css: host + '/css/admin/tiny_mce.css',
      language: false,
  
      setup: function(editor) {
          $('.showPreview', '#' + editor.id + '_preview').click(function(event) {
              event.preventDefault();
              tinyMCE.execCommand('mceAddControl', false, editor.id);
              $('#'+editor.id + '_preview').css('display', 'none');
          });
  
          editor.addCommand('showHTML', function(ui, v){
              tinyMCE.execCommand('mceRemoveControl', false, editor.id);
              $('#'+editor.id + '_preview').css('display', 'block');
          });
      },
  
      theme: function(editor, target) {
          var editorContainer = $(target).after(
              '&lt;div&gt;' +
                  '&lt;div class="mce-toolbar clearfix"&gt;' +
                      '&lt;button class="btn-mce-bold" data-mce-command="bold"&gt;Bold&lt;/button&gt;' +
                      '&lt;button class="btn-mce-italic" data-mce-command="italic"&gt;Italic&lt;/button&gt;' +
                      '&lt;button class="btn-mce-underline" data-mce-command="underline"&gt;Underline&lt;/button&gt;' +
                      '&lt;button class="btn-mce-strikethrough" data-mce-command="strikethrough"&gt;Strike Through&lt;/button&gt;' +
                      '&lt;button class="btn-mce-justifyleft" data-mce-command="justifyleft"&gt;Justify Left&lt;/button&gt;' +
                      '&lt;button class="btn-mce-justifycenter" data-mce-command="justifycenter"&gt;Justify Center&lt;/button&gt;' +
                      '&lt;button class="btn-mce-justifyright" data-mce-command="justifyright"&gt;Justify Right&lt;/button&gt;' +
                      '&lt;button class="btn-mce-justifyfull" data-mce-command="justifyfull"&gt;Justify Full&lt;/button&gt;' +
                      '&lt;button class="btn-mce-bullist" data-mce-command="bullist"&gt;Bullet List&lt;/button&gt;' +
                      '&lt;button class="btn-mce-numlist" data-mce-command="numlist"&gt;Number List&lt;/button&gt;' +
                      '&lt;button class="btn-mce-undo" data-mce-command="undo"&gt;Undo&lt;/button&gt;' +
                      '&lt;button class="btn-mce-redo" data-mce-command="redo"&gt;Redo&lt;/button&gt;' +
                      '&lt;button class="btn-mce-link" data-mce-command="link"&gt;Link&lt;/button&gt;' +
                      '&lt;button class="btn-mce-unlink" data-mce-command="unlink"&gt;Unlink&lt;/button&gt;' +
                      '&lt;button class="btn-mce-code" data-mce-command="showHTML"&gt;HTML&lt;/button&gt;' +
                  '&lt;/div&gt;' +
                  '&lt;div class="htmlify"&gt;&lt;/div&gt;' +
              '&lt;/div&gt;'
          ).next();
  
          $('.mce-toolbar').css('width', $(target).css('offsetWidth'));
  
          // Bind events for each button
          $('button', editorContainer).click(function(event) {
              event.preventDefault();
              editor.execCommand(
                  $(this).attr('data-mce-command'),
                  false,
                  $(this).attr('data-mce-value')
              );
          });
  
          // setup tabbing
          $tabindex = parseInt($('#' + editor.id).attr('tabindex'));
          if ($tabindex &gt; 1) {
              $('[tabindex=' + ($tabindex-1) + ']').keydown(function(event) {
                  var $keyCode = event.keyCode || event.which;
                  if ($keyCode == 9) {
                      event.preventDefault();
                      editor.execCommand('mceFocus', false, editor.id);
                  }
              });
          } else {
              editor.execCommand('mceFocus', false, editor.id);
          }
  
          editor.onKeyDown.add(function(ed, event) {
              var $tabindex = parseInt($('#' + ed.id).attr('tabindex'));
              var $keyCode = event.keyCode || event.which;
              if ($keyCode == 9) {
                  $tabindex++;
                  while(($("[tabindex='" + $tabindex + "']").length == 0 || $("[tabindex='" + $tabindex + "']:not([readonly])").length == 0) &amp;&amp; $tabindex != 150 ){
                      $tabindex++;
                  }
                  if ($tabindex != 150)
                      $('[tabindex='+$tabindex+']').focus();
              }
          });
  
          // Register state change listeners
          editor.onInit.add(function(ed, event) {
              $('button', editorContainer).each(function(i, button) {
                  editor.formatter.formatChanged($(button).data('mce-command'), function(state) {
                      $(button).toggleClass('btn-mce-on', state);
                  });
              });
  
              $('#'+ed.id+'_ifr').css('height', '100%');
          });
  
          // Return editor and iframe containers
          return {
              editorContainer: editorContainer[0],
              iframeContainer: editorContainer.children().eq(-1),
  
              // Calculate iframe height: target height - toolbar height
              iframeHeight: $(target).height() - editorContainer.first().outerHeight()
          };
      }    
  });
  </code></pre>