Export M1 Holdings as CSV

Export M1Finance holdings as csv file!

2021-11-11 يوللانغان نەشرى. ئەڭ يېڭى نەشرىنى كۆرۈش.

// ==UserScript==
// @name         Export M1 Holdings as CSV
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Export M1Finance holdings as csv file!
// @match        https://dashboard.m1finance.com/d/research/my-pies/details/*
// @icon         https://www.google.com/s2/favicons?domain=m1finance.com
// @grant        none
// ==/UserScript==

(function () {
  "use strict";

  var createExportButton = function () {
    const exportHoldingsBtn = document.createElement(`exportHoldingsBtn`);
    exportHoldingsBtn.innerHTML = `<button id="exportHoldingsBtn" class="Tab__StyledTab-sc-14kqdmz-0 fglGvd">Export Holdings</button>`;
    document
      .querySelector(".style__root__f7w87")
      .insertAdjacentElement("afterEnd", exportHoldingsBtn);

    // force react to rendor whole page
    var scrollingElement = document.scrollingElement || document.body;
    scrollingElement.scrollTop = scrollingElement.scrollHeight;
    scrollingElement.scrollTop = 0;

    const downloadToFile = (content, filename, contentType) => {
      const a = document.createElement("a");
      const file = new Blob([content], { type: contentType });

      a.href = URL.createObjectURL(file);
      a.download = filename;
      a.click();

      URL.revokeObjectURL(a.href);
    };

    document
      .querySelector("#exportHoldingsBtn")
      .addEventListener("click", () => {
        let list = document.querySelectorAll(".style__slice__3nWPE");
        var stocks = [];
        for (let item of list) {
          var nodes = item.querySelectorAll(".sc-bdnylx");
          var first = nodes[0].innerHTML;
          var last = nodes[nodes.length - 1].innerHTML;
          stocks.push([first, last].join(", "));
        }
        var holdingsString = "STOCK, PERCENTAGE\n" + stocks.join("\n");
        downloadToFile(holdingsString, "holdings.csv", "text/plain");
      });
  };
  setTimeout(createExportButton, 2000);
})();