docs: function () {
      // Avoid parsing too large documents, as per configuration option
      if (this._maxElemsToParse > 0) {
        var numTags = this._doc.getElementsByTagName("*").length;
        if (numTags > this._maxElemsToParse) {
          throw new Error("Aborting parsing document; " + numTags + " elements found");
        }
      }
  
      if (typeof this._doc.documentElement.firstElementChild === "undefined") {
        this._getNextNode = this._getNextNodeNoElementProperties;
      }
      // Remove script tags from the document.
      this._removeScripts(this._doc);
  
      this._prepDocument();
  
      var metadata = this._getArticleMetadata();
      this._articleTitle = metadata.title;
  
      var articleContent = this._grabArticle();
      if (!articleContent)
        return null;
  
      this.log("Grabbed: " + articleContent.innerHTML);
  
      this._postProcessContent(articleContent);
  
      // If we haven't found an excerpt in the article's metadata, use the article's
      // first paragraph as the excerpt. This is used for displaying a preview of
      // the article's content.
      if (!metadata.excerpt) {
        var paragraphs = articleContent.getElementsByTagName("p");
        if (paragraphs.length > 0) {
          metadata.excerpt = paragraphs[0].textContent.trim();
        }
      }
  
      var textContent = articleContent.textContent;
      return {
        title: this._articleTitle,
        byline: metadata.byline || this._articleByline,
        dir: this._articleDir,
        content: articleContent.innerHTML,
        textContent: textContent,
        length: textContent.length,
        excerpt: metadata.excerpt,
      };
    }