Skip to content

Instantly share code, notes, and snippets.

@cmcculloh-kr
Created November 21, 2018 20:36
Show Gist options
  • Save cmcculloh-kr/0992122ac6efab74ca036ddce2e5bf30 to your computer and use it in GitHub Desktop.
Save cmcculloh-kr/0992122ac6efab74ca036ddce2e5bf30 to your computer and use it in GitHub Desktop.
Create a new git branch name from a GUS ticket
javascript: (function() {
let repoName;
let repoAuthor = document.querySelectorAll('#brandBand_1 .slds-form.slds-form_stacked.slds-grid.slds-page-header__detail-row .slds-page-header__detail-block.forceHighlightsDesktopListRecordItem:nth-of-type(6) a.textUnderline')[0].textContent;
let issueNumber;
if (document.querySelector('#brandBand_1 .slds-form.slds-form_stacked.slds-grid.slds-page-header__detail-row .slds-page-header__detail-block.forceHighlightsDesktopListRecordItem .uiOutputText') !== null) {
issueNumber = document.querySelector('#brandBand_1 .slds-form.slds-form_stacked.slds-grid.slds-page-header__detail-row .slds-page-header__detail-block.forceHighlightsDesktopListRecordItem .uiOutputText').textContent;
} else {
console.error('can not find issue number');
}
let title;
if (document.querySelector('.slds-page-header__title') !== null) {
title = document.querySelector('.slds-page-header__title').textContent.trim();
} else {
console.error('can not find title');
}
console.log(`issueNumber ${issueNumber} title ${title}`);
const replacements = [
{name: 'mdot', replacement: ['·', '']},
{name: 'dot', replacement: [/\./g, '']},
{name: 'midDot', replacement: [/%C2%B7/g, '']},
{name: 'spaceMidDot', replacement: [' %C2%B7 ', '']},
{name: 'author', replacement: [repoAuthor + '\/', '']},
{name: 'repoName', replacement: [repoName, '']},
{name: 'issueNum', replacement: ['Issue #', '']},
{name: 'rBracketSpace', replacement: ['] ', '___']},
{name: 'ampSpace', replacement: [/ \& /g, '_and_']},
{name: 'amp', replacement: [/\&/g, '/']},
{name: 'comma', replacement: [/,/g, '_']},
{name: 'colSpace', replacement: [/: /g, '--']},
{name: 'col', replacement: [/:/g, '--']},
{name: 'dashSpace', replacement: [/ %E2%80%93 /g, '--']},
{name: 'mdashSpace', replacement: [/ %E2%80%94 /g, '---']},
{name: 'dash', replacement: [/%E2%80%93/g, '--']},
{name: 'mdash', replacement: [/%E2%80%94/g, '---']},
{name: 'slash', replacement: [/\//g, '_or_']},
{name: 'percent', replacement: [/\%/g, '-percent']},
{name: 'quot', replacement: [/\"/g, '']},
{name: 'squot', replacement: [/\'/g, '']},
{name: 'tick', replacement: [/`/g, '']},
{name: 'lquot', replacement: [/%E2%80%9C/g, '']},
{name: 'rquot', replacement: [/%E2%80%9D/g, '']},
{name: 'lsquot', replacement: [/%E2%80%98/g, '']},
{name: 'rsquot', replacement: [/%E2%80%99/g, '']},
{name: 'lparen', replacement: [/\(/g, '']},
{name: 'rparen', replacement: [/\)/g, '']},
{name: 'lstash', replacement: [/\{/g, '']},
{name: 'rstash', replacement: [/\}/g, '']},
{name: 'lbracket', replacement: [/\[/g, '']},
{name: 'rbracket', replacement: [/\]/g, '']},
{name: 'at', replacement: [/@/g, '']},
{name: 'dolladolla', replacement: [/\$/g, '']},
{name: 'star', replacement: [/\*/g, '']},
{name: 'pound', replacement: [/\#/g, '']},
{name: 'bang', replacement: [/\!/g, '']},
{name: 'parendash', replacement: [/^([a-z0-9])-/i, '$1-']},
{name: 'space', replacement: [/ /g, '-']},
{name: 'dishuedash', replacement: ['--' + issueNumber + '--', '']},
{name: 'dishue', replacement: ['--' + issueNumber, '']},
];
let filteredTitle = title;
replacements.forEach((r) => {
filteredTitle = filteredTitle.replace(r.replacement[0], r.replacement[1]);
});
const formattedTitle = 'GUS-' + issueNumber + '---' + filteredTitle.toLowerCase() || "would-be-a-title-if-there-was-one";
function promptForCopyToClipboard(text) {
window.prompt("Copy:", text);
}
let newDivForCopy = document.createElement("div");
let newContent = document.createTextNode(formattedTitle);
newDivForCopy.appendChild(newContent);
let showIssueDiv = document.getElementsByTagName('body')[0];
let newChildForCopying = showIssueDiv.appendChild(newDivForCopy);
let range = document.createRange();
range.selectNode(newChildForCopying);
window.getSelection().addRange(range);
try {
let successful = document.execCommand('copy');
let msg = successful ? 'successful' : 'unsuccessful';
console.log(`Copied new Git branch name (${formattedTitle}) to clipboard.`);
} catch (err) {
console.log('Oops, unable to copy automatically, opening prompt.');
promptForCopyToClipboard(formattedTitle);
}
window.getSelection().removeAllRanges();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment