import select from 'select-dom';
import elementReady from 'element-ready';
import * as pageDetect from 'github-url-detection';
import * as textFieldEdit from 'text-field-edit';
import features from '../feature-manager.js';
import looseParseInt from '../helpers/loose-parse-int.js';
function interpretNode(node: ChildNode): string | void {
switch (node instanceof Element && node.tagName) {
case false:
case 'A': {
return node.textContent!;
}
case 'CODE': {
// Restore backticks that GitHub loses when rendering them
return '`' + node.textContent! + '`';
}
default:
// Ignore other nodes, like `...` that appears when commits have a body
}
}
function getFirstCommit(): {title: string; body: string | undefined} {
const titleParts = select('.js-commits-list-item:first-child p')!.childNodes;
const body = select('.js-commits-list-item:first-child .Details-content--hidden pre')
?.textContent!.trim() ?? undefined;
const title = [...titleParts]
.map(node => interpretNode(node))
.join('')
.trim();
return {title, body};
}
async function init(): Promise {
const requestedContent = new URL(location.href).searchParams;
const commitCountIcon = await elementReady('div.Box.mb-3 .octicon-git-commit');
const commitCount = commitCountIcon?.nextElementSibling;
if (!commitCount || looseParseInt(commitCount) < 2 || !select.exists('#new_pull_request')) {
return false;
}
const firstCommit = getFirstCommit();
if (!requestedContent.has('pull_request[title]')) {
textFieldEdit.set(
select('.discussion-topic-header input')!,
firstCommit.title,
);
}
if (firstCommit.body && !requestedContent.has('pull_request[body]')) {
textFieldEdit.insert(
select('#new_pull_request textarea[aria-label="Comment body"]')!,
firstCommit.body,
);
}
}
void features.add(import.meta.url, {
include: [
pageDetect.isCompare,
],
deduplicate: 'has-rgh',
init,
});
/*
Test URLs
https://github.com/refined-github/sandbox/compare/linked-commit-title?expand=1
https://github.com/refined-github/sandbox/compare/rendered-commit-title?expand=1
https://github.com/refined-github/sandbox/compare/github-moji?expand=1
*/