// The variable that will store all the text, starts with the kanban board settings
var obsidianText = "---\n\nkanban-plugin: basic\n\n---\n\n";
// Something to keep track of just to display when it's copied.
var numberOfLists;
var numberOfCards;
// Get all the lists in trello
var trelloLists = document.getElementsByClassName("js-list");
numberOfLists = trelloLists.length;
// Cycle through all the lists
for (l = 0; l < numberOfLists; l++){
// Get the list name
var trelloListHeader = trelloLists[l].getElementsByTagName("h2")[0].innerText;
// Append the header to obsidianText in markdown
obsidianText += "\n## " + trelloListHeader + "\n";
// Get all the cards in each list
var trelloItems = trelloLists[l].getElementsByClassName("list-card");
numberOfCards = numberOfCards + trelloItems.length;
// Cycle through all the cards in each list
for (i = 0; i < trelloItems.length; i++){
// Get the card title
var trelloItemTitle = trelloItems[i].getElementsByClassName("list-card-title")[0].innerText;
// Grab all of the labels if they have text specified. This does not get labels that are just colors.
var trelloLabels = trelloItems[i].getElementsByTagName("button");
// cycle though all of labels
for (b=0; b<trelloLabels.length; b++){
var ariaLabel = trelloLabels[b].getAttribute("aria-label"); // aria label is formatted as aria-label = "Color:red title: "Label_Text""
var splitAriaValue = ariaLabel.split('title: ')[1]; // Split the string to just get the title, so 0 is trash 1 is the value of 'title' “Label_Text”"
splitAriaValue = splitAriaValue.replace("“", "") // get rid of the smart quotes
splitAriaValue = splitAriaValue.replace("”", "") // both of them
// Append the label to item
if (splitAriaValue != "none"){
trelloItemTitle = trelloItemTitle + " #" + splitAriaValue;
}
}
// Get the date. We can't get the time because trello doesn't display it in the list.
var trelloDate = trelloItems[i].getElementsByClassName("js-due-date-text");
if (trelloDate.length > 0){ // Only work on the ones that have a date.
trelloDate = trelloDate[0].innerText;
var trelloConvertedDate = new Date(trelloDate).toISOString().substring(0, 10);; // Convert it to an actual date so we can change the format
// Append the date to item
trelloItemTitle = trelloItemTitle + " @{" + trelloConvertedDate + "}";
}
// Append the item (with labels and date) to obsidianText in markdown
obsidianText += "- [ ] " + trelloItemTitle + "\n";
}
}
// Append the final expected kanban settins
obsidianText += '\n\n%% kanban:settings\n```\n{"kanban-plugin":"basic"}\n```\n%%';
//Copy text to the clipboard
navigator.clipboard.writeText(obsidianText);
// Flash the time on the page in an overlay so that I know I clicked it.
var elemDiv = document.createElement('div');
elemDiv.innerHTML = "<h1 style='font-size:40px; color:white; text-align:center; margin-top:2em;'>" + "Copied " + numberOfLists + " Lists and " + numberOfCards + " cards. </h1>";
elemDiv.style.cssText = 'position:absolute;width:100%;height:100%;opacity:0.8;z-index:1000;background:#000;top:0';
document.body.appendChild(elemDiv);
// Have it fade out after a bit
setTimeout(function(){ elemDiv.style.display = "none"; }, 2000);