CISTポータルの振り返り画面で目標設定を同時に確認できるようにする
「授業内容に戻る」ボタンのURL取得
code:get_lecture.js
const getLecturePageURL = () => {
const href = document.evaluate(
"//acontains(text(),'授業内容に戻る')/@href",
document,
null,
XPathResult.STRING_TYPE,
null,
)?.stringValue;
return href ?? null;
}
「目標設定」ボタンのURL取得
code:get_goal_page.js
const getGoalSettingPageURL = () => {
const href = document.evaluate(
"//spancontains(text(),'目標設定')/parent::a/@href",
document,
null,
XPathResult.STRING_TYPE,
null,
)?.stringValue;
return href ?? null;
}
XPathで文字列のリストを作るのは難しい?
https://developer.mozilla.org/ja/docs/Web/XPath/Introduction_to_using_XPath_in_JavaScript#返値の型の指定
Iteratorを返すのはノードの場合のみなのだろうか?
振り返りの入力内容取得
code:get_goals.js
const getTextareaContents = (pageDocument) => {
const elements = ...pageDocument.querySelectorAll("textarea");
const contents = elements.map(element => element.textContent);
return contents;
}
const fetchGoalSettingPage = async () => {
const goalSettingPageURL = getGoalSettingPageURL();
const resp = await fetch(goalSettingPageURL);
return resp;
}
const fetchGoalSettings = async () => {
const resp = await fetchGoalSettingPage();
const respText = await resp.text();
const goalSettingPageDocument = DOMParser.parseFromString(respText);
const textareaContents = getTextareaContents(goalSettingPageDocument);
return textareaContents;
}
目標設定の内容リストをtableに埋め込む
TODO:
テーブルの他の行を真似たDOMノードを生成する。
XSSの危険性を恐れるなら、文字列は埋め込むべきではない
先に、insertAdjacentHTMLで要素を追加する
https://developer.mozilla.org/ja/docs/Web/API/Element/insertAdjacentHTML
次に、insertAdjacentTextで、ユーザーが入力した目標設定文字列をテキストノードとして追加する
https://developer.mozilla.org/ja/docs/Web/API/Element/insertAdjacentText
書けたt6o_o6t.icon
https://github.com/coolwind0202/portalext/blob/main/features/lookback_with_goals/lookback.content.js