Skip to content

Instantly share code, notes, and snippets.

@mtib
Last active April 19, 2023 12:56
Show Gist options
  • Select an option

  • Save mtib/b64391657cab1cffdb6447e0de76caf1 to your computer and use it in GitHub Desktop.

Select an option

Save mtib/b64391657cab1cffdb6447e0de76caf1 to your computer and use it in GitHub Desktop.
Arc Boost to annotate tasks with their ID.
const addedElementRootIdentifier = 'boost-branch-id-row';
const addBranchName = () => {
// Example URL
// https://app.asana.com/0/1201323259943344/1203874541847641
// https://app.asana.com/0/1201323259943344/1203874541847641/f
const taskRegex = /^\/\d+\/\d+\/(\d+)/
const taskMatch = taskRegex.exec(window.location.pathname);
if (!taskMatch) {
return;
}
if (document.getElementById(addedElementRootIdentifier)) {
return;
}
const taskId = taskMatch[1];
const titleElement = document.querySelector('#asana_full_page > div.FocusModePage > div > article > div.UploadDropTargetAttachmentWrappingTextEditor.TaskPane-attachmentDropTarget > div.DynamicBorderScrollable.DynamicBorderScrollable--canScrollDown.TaskPane-scrollable > div > div > div.TaskPane-resizeListenerContainer > div.ObjectTitleInput.TaskPane-titleRow.TaskPane-titleRowInput > div > textarea')
|| document.querySelector('#asana_main_page > div.ProjectPage > div.ProjectPage-board > div > div > div > div.FullWidthPageStructureWithDetailsOverlay-detailsOverlay.FullWidthPageStructureWithDetailsOverlay-detailsOverlay--visible > article > div.UploadDropTargetAttachmentWrappingTextEditor.TaskPane-attachmentDropTarget > div.DynamicBorderScrollable.DynamicBorderScrollable--canScrollDown.TaskPane-scrollable > div > div > div.TaskPane-resizeListenerContainer > div.ObjectTitleInput.TaskPane-titleRow.TaskPane-titleRowInput > div > textarea')
|| document.querySelector('#asana_full_page > div.FocusModePage > div > article > div.UploadDropTargetAttachmentWrappingTextEditor.TaskPane-attachmentDropTarget > div.DynamicBorderScrollable.TaskPane-scrollable > div > div > div.TaskPane-resizeListenerContainer > div.ObjectTitleInput.TaskPane-titleRow.TaskPane-titleRowInput > div > textarea');
const containerElement = document.querySelector('#asana_full_page > div.FocusModePage > div > article > div.UploadDropTargetAttachmentWrappingTextEditor.TaskPane-attachmentDropTarget > div.DynamicBorderScrollable.DynamicBorderScrollable--canScrollDown.TaskPane-scrollable > div > div > div.TaskPane-resizeListenerContainer')
|| document.querySelector('#asana_main_page > div.ProjectPage > div.ProjectPage-board > div > div > div > div.FullWidthPageStructureWithDetailsOverlay-detailsOverlay.FullWidthPageStructureWithDetailsOverlay-detailsOverlay--visible > article > div.UploadDropTargetAttachmentWrappingTextEditor.TaskPane-attachmentDropTarget > div.DynamicBorderScrollable.DynamicBorderScrollable--canScrollDown.TaskPane-scrollable > div > div > div.TaskPane-resizeListenerContainer')
|| document.querySelector('#asana_full_page > div.FocusModePage > div > article > div.UploadDropTargetAttachmentWrappingTextEditor.TaskPane-attachmentDropTarget > div.DynamicBorderScrollable.TaskPane-scrollable > div > div > div.TaskPane-resizeListenerContainer');
if (!containerElement) {
throw new Error('Cannot find required DOM elements: containerElement');
}
if (!titleElement) {
throw new Error('Cannot find required DOM elements: titleElement');
}
const title = titleElement.innerHTML;
const branchName = [...(title.toLocaleLowerCase().replace(/[^a-z0-9 ]/ig, '').split(' ')), taskId].join('-');
const addedRowElement = document.createElement('div');
addedRowElement.id = addedElementRootIdentifier;
addedRowElement.style.marginBottom = '10px';
addedRowElement.style.display = 'flex';
addedRowElement.style.gap = '10px';
addedRowElement.style.alignItems = 'center';
const buttonElement = document.createElement('button');
const buttonElementBg = '#336';
buttonElement.onmouseenter = () => {
buttonElement.style.backgroundColor = '#447';
}
buttonElement.onmouseleave = () => {
buttonElement.style.backgroundColor = buttonElementBg;
}
buttonElement.innerHTML = branchName;
buttonElement.style.border = '1px solid #338';
buttonElement.style.borderRadius = '4px';
buttonElement.style.backgroundColor = buttonElementBg;
buttonElement.style.padding = '3px 5px';
buttonElement.onclick = () => {
navigator.clipboard.writeText(branchName);
}
const spanElement = document.createElement('span');
spanElement.innerHTML = 'Recommended branch name:';
addedRowElement.appendChild(spanElement);
addedRowElement.appendChild(buttonElement);
containerElement.appendChild(addedRowElement);
}
window.setInterval(() => {
addBranchName();
}, 1000);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment