code: @Override
      public int doStartTag() throws JspException {
  
          if (isEditableRequest(pageContext.getRequest())) {
              // all this does NOT apply to the "online" project, or for temporary files
              I_CmsDirectEditProvider eb = getDirectEditProvider(pageContext);
              // if no provider is available this is the first "editable" tag on the page
              m_firstOnPage = (eb == null);
              m_manualPlacement = false;
              if ((m_mode == CmsDirectEditMode.MANUAL) || !m_editEmpty) {
                  // manual mode requested, we may need to insert HTML
                  if (!m_firstOnPage && (eb != null)) {
                      // first tag on a page is only for insertion of header HTML
                      if (eb.isManual(m_mode)) {
                          // the provider supports manual placement of buttons
                          m_manualPlacement = true;
                          editableTagAction(pageContext, m_provider, m_mode, m_file);
                      }
                  }
              } else if (!m_firstOnPage && (eb != null) && m_editEmpty) {
                  try {
                      insertEditEmpty();
                  } catch (CmsException e) {
                      LOG.error(e.getLocalizedMessage(), e);
                  }
              }
          } else {
              // this will ensure the "end" tag is also ignored in the online project
              m_firstOnPage = false;
              m_manualPlacement = false;
          }
          return EVAL_BODY_INCLUDE;
      }
docs: Opens the direct edit tag, if manual mode is set then the next
  start HTML for the direct edit buttons is printed to the page.<p>
  
  @return {@link #EVAL_BODY_INCLUDE}
  
  @throws JspException in case something goes wrong