code: function bindEvents() {
        /* here is the meat and potates */
        $contentDomNode.attr('data-placeholder',options.placeholder);
  
        if (isIosApp) {
          $contentDomNode.on('touchstart',function() {
            post.dialog('text',{'value':cleanUpData(), 'max':options.chars || null, 'multiline':true}, function(text){
              $contentDomNode.html(text).trigger('input');
              trigger('mobileInput',text);
              if (text.length >= 1) {
                $contentDomNode.attr('data-div-placeholder-content', 'true');
              }
              adaptAndSave();
            });
          });
        } else {
          $contentDomNode.on('paste keypress keydown input',function(e) {
            if (mode && mode.editor === true) {
              if ($contentDomNode[0].textContent && charsCount() >= 1) {
                $contentDomNode.attr('data-div-placeholder-content', 'true');
              } else {
                $contentDomNode.removeAttr('data-div-placeholder-content');
              }
            }
  
            if (e.type === 'paste') {
              formatPaste();
            }
  
            if(e.which === 13 && isIE) {
              e.preventDefault();
            }
  
            //list of functional/control keys that you want to allow always
            var keys = [8, 9, 16, 17, 18, 19, 20, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 144, 145];
  
            if( $.inArray(e.keyCode, keys) === -1) {
              if (options.chars && charsCount() >= options.chars && !e.metaKey) {
                e.preventDefault();
                e.stopPropagation();
              }
            }
  
            if(timer) {
              clearTimeout(timer);
            }
            timer = setTimeout(adaptAndSave, 50);
  
          });
        }
      }
docs: /*
  - Listen to events on the contenteditable field
  - use native text dialog if we are in the iOS app
  - handle copy-paste text