Greasy Fork 还支持 简体中文。

Add Cards on Quizlet

Uses a button to add multiple cards at once on Quizlet, instead of having to click the add button for each card individually.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Add Cards on Quizlet
// @namespace    https://greasyfork.org/en/scripts/448702-automatically-add-cards-on-quizlet
// @version      1.5.0
// @description  Uses a button to add multiple cards at once on Quizlet, instead of having to click the add button for each card individually.
// @author       Andriani Perez
// @match        https://quizlet.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=quizlet.com
// @grant        none

// Chrome extension: https://chromewebstore.google.com/detail/multi-card-add-for-quizle/kjcpipbleckofommimigmbehkmpjdahg
// ==/UserScript==

function sleep(milliseconds) {
  return new Promise((resolve) => setTimeout(resolve, milliseconds));
}

function updateAddCardButton(className, index) {
  let addcard = document.querySelector(
    `div.${className} [data-term-luid="${index}"]`
  );
  return addcard;
}

// List of studiable items are all the flash cards and appending makes it go to the very end of that list
function getStudiableItems() {
  let studiableItems = document.querySelector("div.StudiableItems");
  console.log(studiableItems);
  return studiableItems;
}

function AddCardsElement(endOfStudiableItems) {
  // Create button
  var multiAddContainer = document.createElement("div");
  //Give class to match other cards styling
  multiAddContainer.className =
    "TermContent-inner AssemblyButtonBase--xlarge AssemblyButtonBase--padding ";
  multiAddContainer.style =
    "margin-top: 1rem; margin-bottmom: 4rem; display: flex; flex-direction: row; align-items: center; justify-content: center; gap: 1rem; cursor: default; height: 5rem;";
  endOfStudiableItems.appendChild(multiAddContainer);

  // Button/Label
  var multiAddButton = document.createElement("label");
  multiAddButton.innerText = "+ Multi-Add Cards";
  multiAddButton.className = "UILinkButton";
  multiAddButton.draggable = false;
  multiAddButton.id = "multiAddButton";

  multiAddContainer.appendChild(multiAddButton);
  // INPUT
  var multiAddInput = document.createElement("input");
  multiAddInput.className =
    "RichTextEditor ProseMirror PMEditor lang-en ugck83a notranslate pc1cm7j";
  multiAddInput.id = "multiAddInput";
  multiAddInput.style =
    "border: none; background:transparent; border-bottom: 0.275rem solid white; justify-content:center; outline: none; height: 2.25rem;";

  multiAddInput.placeholder = "# of cards to add";
  // Create a style element
  var style = document.createElement("style");

  // Define the CSS rule for the placeholder
  var placeholderStyles = `
  #multiAddInput::placeholder {
    color: grey; /* Example: Change the color */
    opacity: 0.7
    font-style: italic; /* Example: Make it italic */
    /* Add any other desired styles here */
    ;
  }
  #multi
`;
  document.head.appendChild(style);

  // Append the CSS rule to the style element
  style.appendChild(document.createTextNode(placeholderStyles));

  // Append the style element to the head of the document
  multiAddContainer.appendChild(multiAddInput);

  return multiAddButton;
}

function getMultiAddButton() {
  return document.getElementById("multiAddButton");
}

function getMultiInputvalue(getElementById) {
  let multiAddInput = document.getElementById(getElementById);
  return multiAddInput.value;
}
function addRow() {
  return document.getElementById("addRow");
}

window.onload = function () {
  let endOfStudiableItems = getStudiableItems();
  AddCardsElement(endOfStudiableItems);
  let multiAddButton = getMultiAddButton();
  multiAddButton.addEventListener("click", async function () {
    let numberOfCardsRequested = getMultiInputvalue("multiAddInput");
    for (var i = 0; i < numberOfCardsRequested; i++) {
      addRow().click();
      await sleep(1);
    }
  });
};