From 220100c6c60d988922bf335bd276bfb4ddad4a65 Mon Sep 17 00:00:00 2001 From: tinaxd <31384595+tinaxd@users.noreply.github.com> Date: Wed, 26 May 2021 11:51:29 +0900 Subject: [PATCH 001/196] add a dependency: mustache --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 90b934a..934453f 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "dependencies": { "@types/chrome": "^0.0.130", "copy-webpack-plugin": "^7.0.0", + "mustache": "^4.2.0", "ts-loader": "^8.0.17", "typescript": "^4.1.5", "webpack": "^5.22.0" From ce96a909977c6a5d5f45c5de6fc015b45322eed3 Mon Sep 17 00:00:00 2001 From: tinaxd <31384595+tinaxd@users.noreply.github.com> Date: Wed, 26 May 2021 12:52:16 +0900 Subject: [PATCH 002/196] template 1 --- package-lock.json | 14 ++++++ public/views/minipanda.mustache | 75 +++++++++++++++++++++++++++++++++ src/minipanda.ts | 63 ++++++++++----------------- 3 files changed, 112 insertions(+), 40 deletions(-) create mode 100644 public/views/minipanda.mustache diff --git a/package-lock.json b/package-lock.json index 86ffa1c..01202ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@types/chrome": "^0.0.130", "copy-webpack-plugin": "^7.0.0", + "mustache": "^4.2.0", "ts-loader": "^8.0.17", "typescript": "^4.1.5", "webpack": "^5.22.0" @@ -1898,6 +1899,14 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "bin": { + "mustache": "bin/mustache" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4381,6 +4390,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache new file mode 100644 index 0000000..6f08e45 --- /dev/null +++ b/public/views/minipanda.mustache @@ -0,0 +1,75 @@ + +

Version {{VERSION}}

+x + + + + + +

課題取得日時: {{kadaiFetchedTime}}

+

クイズ取得日時: {{quizFetchedTime}}

+
+ {{#showDanger}} +
+
+
+ {{#dangerElements}} +
+ {{lectureName}} + +

{{date}}

+ {{remain}} +

{{title}}

+
+ {{/dangerElements}} +
+ {{/showDanger}} + + {{#showWarning}} +
+
+
+ {{#warningElements}} +
+ {{lectureName}} + +

{{date}}

+ {{remain}} +

{{title}}

+
+ {{/warningElements}} +
+ {{/showWarning}} + + {{#showSuccess}} +
+
+
+ {{#successElements}} +
+ {{lectureName}} + +

{{date}}

+ {{remain}} +

{{title}}

+
+ {{/successElements}} +
+ {{/showSuccess}} + + {{#showOther}} +
+
+
+ {{#otherElements}} +
+ {{lectureName}} + +

{{date}}

+ {{remain}} +

{{title}}

+
+ {{/otherElements}} +
+ {{/showOther}} +
\ No newline at end of file diff --git a/src/minipanda.ts b/src/minipanda.ts index 6a97f30..e6fa5ec 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -37,6 +37,8 @@ import { quizFetchedTime, VERSION, } from "./content_script"; +// @ts-ignore +import Mustache = require('mustache'); function createHanburgerButton(): void { const topbar = document.getElementById("mastLogin"); @@ -47,47 +49,28 @@ function createHanburgerButton(): void { } } -function createMiniPandA(): void { - const miniPandALogo = createElem("img", { - className: "logo", - alt: "logo", - src: chrome.extension.getURL("img/logo.png"), - }); - const version = createElem("p", { classList: "cp-version", innerText: `Version ${VERSION}`}); - - const miniPandACloseBtn = createElem("a", { href: "#", id: "close_btn", textContent: "×" }); - miniPandACloseBtn.classList.add("closebtn", "q"); - miniPandACloseBtn.addEventListener("click", toggleMiniPandA); - - const kadaiTab = createElem("input", { type: "radio", id: "kadaiTab", name: "cp_tab", checked: true }, {"click": toggleKadaiTab}); - const kadaiTabLabel = createElem("label", { htmlFor: "kadaiTab", innerText: " 課題一覧 " }); - const settingsTab = createElem("input", { type: "radio", id: "settingsTab", name: "cp_tab", checked: false }, {"click": toggleSettingsTab}); - const settingsTabLabel = createElem("label", { htmlFor: "settingsTab", innerText: " 詳細設定 " }); - const addMemoButton = createElem("button", { className: "plus-button", innerText: "+" },{"click": toggleMemoBox}); - +function createMiniPandA(kadaiList: Array, lectureIDList: Array): void { const kadaiFetchedTimestamp = new Date( (typeof kadaiFetchedTime === "number")? kadaiFetchedTime : nowTime); - const kadaiFetchedTimeString = createElem("p", { className: "kadai-time" }); - kadaiFetchedTimeString.innerText = "課題取得日時: " + kadaiFetchedTimestamp.toLocaleDateString() + " " + kadaiFetchedTimestamp.getHours() + ":" + ("00" + kadaiFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + kadaiFetchedTimestamp.getSeconds()).slice(-2); + const kadaiFetchedTimeString = "課題取得日時: " + kadaiFetchedTimestamp.toLocaleDateString() + " " + kadaiFetchedTimestamp.getHours() + ":" + ("00" + kadaiFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + kadaiFetchedTimestamp.getSeconds()).slice(-2); const quizFetchedTimestamp = new Date((typeof quizFetchedTime === "number")? quizFetchedTime : nowTime); - const quizFetchedTimeString = createElem("p", { className: "quiz-time" }); - quizFetchedTimeString.innerText = "クイズ取得日時: " + quizFetchedTimestamp.toLocaleDateString() + " " + quizFetchedTimestamp.getHours() + ":" + ("00" + quizFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + quizFetchedTimestamp.getSeconds()).slice(-2); - appendChildAll(miniPandA, [ - miniPandALogo, - version, - miniPandACloseBtn, - kadaiTab, - kadaiTabLabel, - settingsTab, - settingsTabLabel, - addMemoButton, - kadaiFetchedTimeString, - quizFetchedTimeString, - ]); - - const parent = document.getElementById("pageBody"); - const ref = document.getElementById("toolMenuWrap"); - - parent?.insertBefore(miniPandA, ref); + const quizFetchedTimeString = "クイズ取得日時: " + quizFetchedTimestamp.toLocaleDateString() + " " + quizFetchedTimestamp.getHours() + ":" + ("00" + quizFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + quizFetchedTimestamp.getSeconds()).slice(-2); + + const templateVars = { + kadaiFetchedTime: kadaiFetchedTimeString, + quizFetchedTime: quizFetchedTimeString, + minipandaLogo: chrome.extension.getURL("img/logo.png"), + VERSION: VERSION, + }; + + fetch(chrome.extension.getURL("views/minipanda.mustache")) + .then((res) => res.text()) + .then((template) => { + const rendered = Mustache.render(template, templateVars); + miniPandA.innerHTML = rendered; + const parent = document.getElementById("pageBody"); + const ref = document.getElementById("toolMenuWrap"); + parent?.insertBefore(miniPandA, ref); + }); } function appendMemoBox(lectureIDList: Array): void { @@ -120,7 +103,7 @@ function appendMemoBox(lectureIDList: Array): void { } async function displayMiniPandA(mergedKadaiList: Array, lectureIDList: Array): Promise{ - createMiniPandA(); + createMiniPandA(mergedKadaiList, lectureIDList); appendMemoBox(lectureIDList); await createSettingsTab(); updateMiniPandA(mergedKadaiList, lectureIDList); From 5338beaaa0f157f9dc865f689e0ab236187ef0b6 Mon Sep 17 00:00:00 2001 From: tinaxd <31384595+tinaxd@users.noreply.github.com> Date: Wed, 26 May 2021 13:06:13 +0900 Subject: [PATCH 003/196] kadai title duedate lectureName --- public/views/minipanda.mustache | 4 +++ src/minipanda.ts | 48 ++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache index 6f08e45..8161bca 100644 --- a/public/views/minipanda.mustache +++ b/public/views/minipanda.mustache @@ -11,6 +11,7 @@
{{#showDanger}}
+ 締め切り24時間以内
{{#dangerElements}} @@ -27,6 +28,7 @@ {{#showWarning}}
+ 締め切り5日以内
{{#warningElements}} @@ -43,6 +45,7 @@ {{#showSuccess}}
+ 締め切り14日以内
{{#successElements}} @@ -59,6 +62,7 @@ {{#showOther}}
+ その他
{{#otherElements}} diff --git a/src/minipanda.ts b/src/minipanda.ts index e6fa5ec..e68a304 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -54,12 +54,58 @@ function createMiniPandA(kadaiList: Array, lectureIDList: Array = []; + const warningElements: Array = []; + const successElements: Array = []; + const otherElements: Array = []; + // loop over lectures + kadaiList.forEach(item => { + const lectureName = lectureIDMap.get(item.lectureID); + // loop over kadais + item.kadaiEntries.forEach(kadai => { + const dispDue = formatTimestamp(kadai.dueDateTimestamp); + const timeRemain = getTimeRemain((kadai.dueDateTimestamp*1000-nowTime) / 1000); + const daysUntilDue = getDaysUntil(nowTime, kadai.dueDateTimestamp*1000); + + const remainTimeText = `あと${timeRemain[0]}日${timeRemain[1]}時間${timeRemain[2]}分`; + const kadaiDueDateText = "" + dispDue; + const kadaiTitle = "" + kadai.assignmentTitle; + const kadaiChecked = kadai.isFinished; + + const vars = { + lectureName: lectureName, + date: kadaiDueDateText, + remain: remainTimeText, + title: kadaiTitle + }; + + if (daysUntilDue > 0 && daysUntilDue <= 1) { + dangerElements.push(vars); + } else if (daysUntilDue > 1 && daysUntilDue <= 5) { + warningElements.push(vars); + } else if (daysUntilDue > 5 && daysUntilDue <= 14) { + successElements.push(vars); + } else { + otherElements.push(vars); + } + }); + }); + const templateVars = { kadaiFetchedTime: kadaiFetchedTimeString, quizFetchedTime: quizFetchedTimeString, minipandaLogo: chrome.extension.getURL("img/logo.png"), VERSION: VERSION, + dangerElements: dangerElements, + showDanger: dangerElements.length > 0, + warningElements: warningElements, + showWarning: warningElements.length > 0, + successElements: successElements, + showSuccess: successElements.length > 0, + otherElements: otherElements, + showOther: otherElements.length > 0 }; fetch(chrome.extension.getURL("views/minipanda.mustache")) From cafa767e5756f8b14526b112536ea3afa59424fc Mon Sep 17 00:00:00 2001 From: tinaxd <31384595+tinaxd@users.noreply.github.com> Date: Wed, 26 May 2021 13:15:10 +0900 Subject: [PATCH 004/196] quiz and memo badge --- public/views/minipanda.mustache | 28 ++++++++++++++++++++++++++++ src/minipanda.ts | 4 +++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache index 8161bca..a081d69 100644 --- a/public/views/minipanda.mustache +++ b/public/views/minipanda.mustache @@ -20,6 +20,13 @@

{{date}}

{{remain}} + {{#isMemo}} + メモ + × + {{/isMemo}} + {{#isQuiz}} + クイズ + {{/isQuiz}}

{{title}}

{{/dangerElements}} @@ -37,6 +44,13 @@

{{date}}

{{remain}} + {{#isMemo}} + メモ + × + {{/isMemo}} + {{#isQuiz}} + クイズ + {{/isQuiz}}

{{title}}

{{/warningElements}} @@ -54,6 +68,13 @@

{{date}}

{{remain}} + {{#isMemo}} + メモ + × + {{/isMemo}} + {{#isQuiz}} + クイズ + {{/isQuiz}}

{{title}}

{{/successElements}} @@ -71,6 +92,13 @@

{{date}}

{{remain}} + {{#isMemo}} + メモ + × + {{/isMemo}} + {{#isQuiz}} + クイズ + {{/isQuiz}}

{{title}}

{{/otherElements}} diff --git a/src/minipanda.ts b/src/minipanda.ts index e68a304..9e9fef7 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -78,7 +78,9 @@ function createMiniPandA(kadaiList: Array, lectureIDList: Array 0 && daysUntilDue <= 1) { From a91e20a2e0722c425b2a324df2a12dd8680d12d3 Mon Sep 17 00:00:00 2001 From: tinaxd <31384595+tinaxd@users.noreply.github.com> Date: Wed, 26 May 2021 22:30:35 +0900 Subject: [PATCH 005/196] minipanda mustache --- public/views/minipanda.mustache | 52 +++++--- src/dom.ts | 1 - src/minipanda.ts | 202 +++++++++----------------------- src/subpanda.ts | 4 +- 4 files changed, 91 insertions(+), 168 deletions(-) diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache index a081d69..9213f83 100644 --- a/public/views/minipanda.mustache +++ b/public/views/minipanda.mustache @@ -9,25 +9,39 @@

課題取得日時: {{kadaiFetchedTime}}

クイズ取得日時: {{quizFetchedTime}}

+ + {{#showDanger}}
締め切り24時間以内
{{#dangerElements}} -
+
{{lectureName}} - + +

{{date}}

{{remain}} - {{#isMemo}} - メモ - × - {{/isMemo}} - {{#isQuiz}} - クイズ - {{/isQuiz}} -

{{title}}

+

+ {{#isMemo}} + メモ + × + {{/isMemo}} + {{#isQuiz}} + クイズ + {{/isQuiz}} + {{title}} +

{{/dangerElements}}
@@ -39,9 +53,10 @@
{{#warningElements}} -
+
{{lectureName}} - + +

{{date}}

{{remain}} {{#isMemo}} @@ -63,9 +78,10 @@
{{#successElements}} -
+
{{lectureName}} - + +

{{date}}

{{remain}} {{#isMemo}} @@ -87,9 +103,10 @@
{{#otherElements}} -
+
{{lectureName}} - + +

{{date}}

{{remain}} {{#isMemo}} @@ -104,4 +121,7 @@ {{/otherElements}}
{{/showOther}} +
+ +
\ No newline at end of file diff --git a/src/dom.ts b/src/dom.ts index 0c70d28..2cb6185 100644 --- a/src/dom.ts +++ b/src/dom.ts @@ -41,7 +41,6 @@ miniPandA.classList.add("cp_tab"); export const subPandA = createElem("div", { id: "subPandA" }); export const kadaiDiv = createElem("div", { className: "kadai-tab" }); -export const settingsDiv = createElem("div", { className: "settings-tab" }); export const hamburger = createElem("div", { className: "loader" }, {"click": toggleMiniPandA}); diff --git a/src/minipanda.ts b/src/minipanda.ts index 9e9fef7..90ad8a3 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -7,16 +7,10 @@ import { nowTime, } from "./utils"; import { - addAttributes, appendChildAll, cloneElem, - createElem, - DueGroupDom, hamburger, - kadaiDiv, - KadaiEntryDom, miniPandA, - settingsDiv, SettingsDom } from "./dom"; import { @@ -51,9 +45,11 @@ function createHanburgerButton(): void { function createMiniPandA(kadaiList: Array, lectureIDList: Array): void { const kadaiFetchedTimestamp = new Date( (typeof kadaiFetchedTime === "number")? kadaiFetchedTime : nowTime); - const kadaiFetchedTimeString = "課題取得日時: " + kadaiFetchedTimestamp.toLocaleDateString() + " " + kadaiFetchedTimestamp.getHours() + ":" + ("00" + kadaiFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + kadaiFetchedTimestamp.getSeconds()).slice(-2); + const kadaiFetchedTimeString = kadaiFetchedTimestamp.toLocaleDateString() + " " + kadaiFetchedTimestamp.getHours() + ":" + ("00" + kadaiFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + kadaiFetchedTimestamp.getSeconds()).slice(-2); const quizFetchedTimestamp = new Date((typeof quizFetchedTime === "number")? quizFetchedTime : nowTime); - const quizFetchedTimeString = "クイズ取得日時: " + quizFetchedTimestamp.toLocaleDateString() + " " + quizFetchedTimestamp.getHours() + ":" + ("00" + quizFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + quizFetchedTimestamp.getSeconds()).slice(-2); + const quizFetchedTimeString = quizFetchedTimestamp.toLocaleDateString() + " " + quizFetchedTimestamp.getHours() + ":" + ("00" + quizFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + quizFetchedTimestamp.getSeconds()).slice(-2); + + const addMemoBoxLectures: Array = []; const lectureIDMap = createLectureIDMap(lectureIDList); const dangerElements: Array = []; @@ -80,7 +76,10 @@ function createMiniPandA(kadaiList: Array, lectureIDList: Array 0 && daysUntilDue <= 1) { @@ -93,6 +92,11 @@ function createMiniPandA(kadaiList: Array, lectureIDList: Array, lectureIDList: Array 0, otherElements: otherElements, - showOther: otherElements.length > 0 + showOther: otherElements.length > 0, + addMemoBoxLectures: addMemoBoxLectures }; fetch(chrome.extension.getURL("views/minipanda.mustache")) @@ -118,46 +123,37 @@ function createMiniPandA(kadaiList: Array, lectureIDList: Array): void { - const memoEditBox = createElem("div", {className: "settingsBox addMemoBox", style: "none"}); - const memoLabel = createElem("label", {style: "block"}); - const todoLecLabel = cloneElem(memoLabel, {innerText: "講義名"}); - const todoLecSelect = createElem("select", { className: "todoLecName" }); - const todoLecOption = createElem("option"); - - for (const lecture of lectureIDList) { - const c_todoLecOption = cloneElem(todoLecOption, {text: lecture.lectureName, id: lecture.lectureID}); - todoLecSelect.appendChild(c_todoLecOption); - } - - todoLecLabel.appendChild(todoLecSelect); - - const todoContentLabel = cloneElem(memoLabel, { innerText: "メモ" }); - const todoContentInput = createElem("input", { type: "text", className: "todoContent" }); - todoContentLabel.appendChild(todoContentInput); - - const todoDueLabel = cloneElem(memoLabel, {innerText: "期限"}); - const todoDueInput = createElem("input", { type: "datetime-local", className: "todoDue" }); - todoDueInput.value = new Date(`${new Date().toISOString().substr(0, 16)}-10:00`).toISOString().substr(0, 16); - todoDueLabel.appendChild(todoDueInput); +async function createSettingsTab(root: Element): Promise { + createSettingItem(root, "完了済の課題も色付けする", CPsettings.displayCheckedKadai ?? true, "displayCheckedKadai"); + createSettingItem(root, "課題キャッシュ時間 [秒]", CPsettings.kadaiCacheInterval ?? kadaiCacheInterval, "kadaiCacheInterval"); + createSettingItem(root, "クイズキャッシュ時間 [秒]", CPsettings.quizCacheInterval ?? quizCacheInterval, "quizCacheInterval"); + createSettingItem(root, "デバッグモード", CPsettings.makePandAGreatAgain ?? false, "makePandAGreatAgain", false); - const todoSubmitButton = createElem("button", { type: "submit", id: "todo-add", innerText: "追加" }, {"click": addKadaiMemo}); + createSettingItem(root, "カラー① 締切24時間前", CPsettings.topColorDanger ?? "#f78989", "topColorDanger"); + createSettingItem(root, "カラー① 締切5日前", CPsettings.topColorWarning ?? "#fdd783", "topColorWarning"); + createSettingItem(root, "カラー① 締切14日前", CPsettings.topColorSuccess ?? "#8bd48d", "topColorSuccess"); - appendChildAll(memoEditBox, [todoLecLabel, todoContentLabel, todoDueLabel, todoSubmitButton]); - kadaiDiv.appendChild(memoEditBox); -} + createSettingItem(root, "カラー② 締切24時間前", CPsettings.miniColorDanger ?? "#e85555", "miniColorDanger"); + createSettingItem(root, "カラー② 締切5日前", CPsettings.miniColorWarning ?? "#d7aa57", "miniColorWarning"); + createSettingItem(root, "カラー② 締切14日前", CPsettings.miniColorSuccess ?? "#62b665", "miniColorSuccess"); -async function displayMiniPandA(mergedKadaiList: Array, lectureIDList: Array): Promise{ - createMiniPandA(mergedKadaiList, lectureIDList); - appendMemoBox(lectureIDList); - await createSettingsTab(); - updateMiniPandA(mergedKadaiList, lectureIDList); + createSettingItem(root, "デフォルト色に戻す", "reset", "reset"); + // @ts-ignore + root.querySelector('.settings-tab')?.style.display = "none"; } -function createSettingItem(itemDescription: string, value: boolean | number | string | null, id: string, display = true) { +function createSettingItem(root: Element, itemDescription: string, value: boolean | number | string | null, id: string, display = true) { + const settingsDiv = root.querySelector('.settings-tab'); + if (settingsDiv == null) { + console.log('.settings-tab not found'); + return; + } const mainDiv = SettingsDom.mainDiv.cloneNode(true); const label = SettingsDom.label.cloneNode(true); const p = SettingsDom.p.cloneNode(true); @@ -191,112 +187,23 @@ function createSettingItem(itemDescription: string, value: boolean | number | st settingsDiv.appendChild(mainDiv); } -async function createSettingsTab(): Promise { - createSettingItem("完了済の課題も色付けする", CPsettings.displayCheckedKadai ?? true, "displayCheckedKadai"); - createSettingItem("課題キャッシュ時間 [秒]", CPsettings.kadaiCacheInterval ?? kadaiCacheInterval, "kadaiCacheInterval"); - createSettingItem("クイズキャッシュ時間 [秒]", CPsettings.quizCacheInterval ?? quizCacheInterval, "quizCacheInterval"); - createSettingItem("デバッグモード", CPsettings.makePandAGreatAgain ?? false, "makePandAGreatAgain", false); - - createSettingItem("カラー① 締切24時間前", CPsettings.topColorDanger ?? "#f78989", "topColorDanger"); - createSettingItem("カラー① 締切5日前", CPsettings.topColorWarning ?? "#fdd783", "topColorWarning"); - createSettingItem("カラー① 締切14日前", CPsettings.topColorSuccess ?? "#8bd48d", "topColorSuccess"); - - createSettingItem("カラー② 締切24時間前", CPsettings.miniColorDanger ?? "#e85555", "miniColorDanger"); - createSettingItem("カラー② 締切5日前", CPsettings.miniColorWarning ?? "#d7aa57", "miniColorWarning"); - createSettingItem("カラー② 締切14日前", CPsettings.miniColorSuccess ?? "#62b665", "miniColorSuccess"); - - createSettingItem("デフォルト色に戻す", "reset", "reset"); - settingsDiv.style.display = "none"; +function registerEventHandlers(root: Element) { + root.querySelector('#kadaiTab')?.addEventListener('click', () => toggleKadaiTab()); + root.querySelector('#settingsTab')?.addEventListener('click', () => toggleSettingsTab()); + root.querySelectorAll('.todo-check').forEach(c => c.addEventListener('change', (e) => toggleKadaiFinishedFlag(e))); + root.querySelector('#close_btn')?.addEventListener('click', () => toggleMiniPandA()); + root.querySelector('.plus-button')?.addEventListener('click', () => toggleMemoBox()); + root.querySelector('#todo-add')?.addEventListener('click', () => addKadaiMemo()); + root.querySelectorAll('.del-button').forEach(b => b.addEventListener('click', (e) => deleteKadaiMemo(e))); } -function updateMiniPandA(kadaiList: Array, lectureIDList: Array): void { - const dueGroupHeaderName = ["締め切り24時間以内", "締め切り5日以内", "締め切り14日以内", "その他"]; - const dueGroupColor = ["danger", "warning", "success", "other"]; - const initLetter = ["a", "b", "c", "d"]; - const lectureIDMap = createLectureIDMap(lectureIDList); - - // 0: <24h, 1: <5d, 2: <14d, 3: >14d - for (let i = 0; i < 4; i++) { - let entryCount = 0; - // 色別のグループを作成する - const dueGroupHeader = cloneElem(DueGroupDom.header, {className: `sidenav-${dueGroupColor[i]}`, style:"none"}); - const dueGroupHeaderTitle = cloneElem(DueGroupDom.headerTitle, {textContent: `${dueGroupHeaderName[i]}`}); - const dueGroupContainer = cloneElem(DueGroupDom.container, {style:"none"}); - dueGroupHeader.appendChild(dueGroupHeaderTitle); - dueGroupContainer.classList.add(`sidenav-list-${dueGroupColor[i]}`); - - // 各講義についてループ - for (const item of kadaiList) { - // 課題アイテムを入れるやつを作成 - const dueGroupBody = cloneElem(DueGroupDom.body, {className: `kadai-${dueGroupColor[i]}`, id:initLetter[i] + item.lectureID}); - const dueGroupLectureName = DueGroupDom.lectureName.cloneNode(true) as HTMLAnchorElement; - dueGroupLectureName.classList.add(`lecture-${dueGroupColor[i]}`, "lecture-name") - dueGroupLectureName.textContent = "" + lectureIDMap.get(item.lectureID); - dueGroupBody.appendChild(dueGroupLectureName); - const topSite = item.getTopSite(); - if (topSite != null) dueGroupLectureName.href = topSite; - - // 各講義の課題一覧についてループ - let cnt = 0; - for (const kadai of item.kadaiEntries) { - let kadaiCheckbox = cloneElem(KadaiEntryDom.checkbox); - const kadaiLabel = cloneElem(KadaiEntryDom.label); - const kadaiDueDate = cloneElem(KadaiEntryDom.dueDate); - const kadaiRemainTime = cloneElem(KadaiEntryDom.remainTime); - const kadaiTitle = cloneElem(KadaiEntryDom.title); - const memoBadge = createElem("span", {classList: "add-badge add-badge-success", innerText: "メモ"}); - const quizBadge = createElem("span", {classList: "add-badge add-badge-quiz", innerText: "クイズ"}); - const deleteBadge = createElem("span", {className: "del-button", id: kadai.kadaiID, innerText:"×"}, {"click": deleteKadaiMemo}); - - const dispDue = formatTimestamp(kadai.dueDateTimestamp); - const timeRemain = getTimeRemain((kadai.dueDateTimestamp * 1000 - nowTime) / 1000); - - const daysUntilDue = getDaysUntil(nowTime, kadai.dueDateTimestamp * 1000); - if ((daysUntilDue > 0 && daysUntilDue <= 1 && i === 0) || (daysUntilDue > 1 && daysUntilDue <= 5 && i === 1) || (daysUntilDue > 5 && daysUntilDue <= 14 && i === 2) || (daysUntilDue > 14 && i === 3)) { - kadaiDueDate.textContent = "" + dispDue; - kadaiRemainTime.textContent = `あと${timeRemain[0]}日${timeRemain[1]}時間${timeRemain[2]}分`; - kadaiTitle.textContent = "" + kadai.assignmentTitle; - if (kadai.isFinished) kadaiCheckbox.checked = true; - kadaiCheckbox = addAttributes(kadaiCheckbox, {id: kadai.kadaiID, lectureID:item.lectureID}, {"change": toggleKadaiFinishedFlag}) - kadaiLabel.htmlFor = kadai.kadaiID; - - const addBadge = function (badge: any, deleteBadge?: any) { - kadaiTitle.textContent = ""; - kadaiTitle.appendChild(badge); - kadaiTitle.append(kadai.assignmentTitle); - if (deleteBadge) kadaiTitle.appendChild(deleteBadge); - }; - - if (kadai.isMemo) addBadge(memoBadge, deleteBadge); - if (kadai.isQuiz) addBadge(quizBadge); - - appendChildAll(dueGroupBody, [kadaiCheckbox, kadaiLabel, kadaiDueDate, kadaiRemainTime, kadaiTitle]); - cnt++; - } - } - // 各講義の課題で該当するものがある場合はグループに追加 - if (cnt > 0) { - dueGroupContainer.appendChild(dueGroupBody); - entryCount++; - } - } - if (entryCount > 0) { - dueGroupHeader.style.display = ""; - dueGroupContainer.style.display = ""; - } - appendChildAll(miniPandA, [kadaiDiv, settingsDiv]); - appendChildAll(kadaiDiv, [dueGroupHeader, dueGroupContainer]); - } +function initState(root: Element) { + // @ts-ignore + root.querySelector('#kadaiTab')?.checked = true; +} - // 何もない時はRelaxPandAを表示する - if (kadaiList.length === 0) { - const kadaiTab = kadaiDiv; - const relaxDiv = createElem("div", { className: "relaxpanda" }); - const relaxPandaP = createElem("p", { className: "relaxpanda-p", innerText: "現在表示できる課題はありません" }); - const relaxPandaImg = createElem("img", { className: "relaxpanda-img", alt: "logo", src: chrome.extension.getURL("img/relaxPanda.png")}); - appendChildAll(relaxDiv, [relaxPandaP, relaxPandaImg]); - kadaiTab.appendChild(relaxDiv); - } +async function displayMiniPandA(mergedKadaiList: Array, lectureIDList: Array): Promise{ + createMiniPandA(mergedKadaiList, lectureIDList); } function deleteNavBarNotification(): void { @@ -395,10 +302,7 @@ function overrideCSSColor() { export { createHanburgerButton, createMiniPandA, - appendMemoBox, - createSettingsTab, - updateMiniPandA, displayMiniPandA, deleteNavBarNotification, - createNavBarNotification, + createNavBarNotification }; diff --git a/src/subpanda.ts b/src/subpanda.ts index 8251642..8c2507e 100644 --- a/src/subpanda.ts +++ b/src/subpanda.ts @@ -1,4 +1,4 @@ -import { appendChildAll, createElem, DueGroupDom, settingsDiv, kadaiDiv, KadaiEntryDom, subPandA } from './dom'; +import { appendChildAll, createElem, DueGroupDom, kadaiDiv, KadaiEntryDom, subPandA } from './dom'; import { toggleKadaiFinishedFlag } from './eventListener'; import { Kadai, LectureInfo } from './kadai'; import { loadFromStorage } from './storage' @@ -134,7 +134,7 @@ function updateSubPandA(kadaiList: Array, lectureIDList: Array Date: Wed, 26 May 2021 23:13:22 +0900 Subject: [PATCH 006/196] subpanda & memo badge fix --- public/css/subpanda.css | 17 +++- public/popup.html | 2 +- public/views/minipanda.mustache | 62 +++++++------ src/dom.ts | 2 - src/minipanda.ts | 25 ++++-- src/subpanda.ts | 155 +++----------------------------- 6 files changed, 84 insertions(+), 179 deletions(-) diff --git a/public/css/subpanda.css b/public/css/subpanda.css index 5412d62..47c8ce1 100644 --- a/public/css/subpanda.css +++ b/public/css/subpanda.css @@ -9,6 +9,7 @@ body { span { font-family: "Open Sans", sans-serif; } + .kadai-title { font-family: "Open Sans", sans-serif; font-size: 12px !important; @@ -38,10 +39,24 @@ span { color: #464646; font-size: small; } -.subpanda-logo { + +.quiz-time { + font-family: "Open Sans", sans-serif; + padding-top: 5px; + padding-bottom: 5px; + padding-left: 10px; + margin: 10px; + border: inset; + font-weight: bold; + color: #464646; + font-size: small; +} + +.logo { top: 7px; left: 2px; height: 40px; + position: unset; } .cp-version{ diff --git a/public/popup.html b/public/popup.html index ca0a97b..6b8fe8c 100644 --- a/public/popup.html +++ b/public/popup.html @@ -14,7 +14,7 @@ -
+
diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache index 9213f83..a678f4c 100644 --- a/public/views/minipanda.mustache +++ b/public/views/minipanda.mustache @@ -1,14 +1,17 @@

Version {{VERSION}}

+{{^subset}} x +{{/subset}}

課題取得日時: {{kadaiFetchedTime}}

クイズ取得日時: {{quizFetchedTime}}

+ {{^subset}} + {{/subset}} {{#showDanger}}
@@ -59,14 +63,16 @@

{{date}}

{{remain}} - {{#isMemo}} - メモ - × - {{/isMemo}} - {{#isQuiz}} - クイズ - {{/isQuiz}} -

{{title}}

+

+ {{#isMemo}} + メモ + × + {{/isMemo}} + {{#isQuiz}} + クイズ + {{/isQuiz}} + {{title}} +

{{/warningElements}}
@@ -84,14 +90,16 @@

{{date}}

{{remain}} - {{#isMemo}} - メモ - × - {{/isMemo}} - {{#isQuiz}} - クイズ - {{/isQuiz}} -

{{title}}

+

+ {{#isMemo}} + メモ + × + {{/isMemo}} + {{#isQuiz}} + クイズ + {{/isQuiz}} + {{title}} +

{{/successElements}}
@@ -109,19 +117,23 @@

{{date}}

{{remain}} - {{#isMemo}} - メモ - × - {{/isMemo}} - {{#isQuiz}} - クイズ - {{/isQuiz}} -

{{title}}

+

+ {{#isMemo}} + メモ + × + {{/isMemo}} + {{#isQuiz}} + クイズ + {{/isQuiz}} + {{title}} +

{{/otherElements}} {{/showOther}} +{{^subset}}
-
\ No newline at end of file + +{{/subset}} \ No newline at end of file diff --git a/src/dom.ts b/src/dom.ts index 2cb6185..ad249f9 100644 --- a/src/dom.ts +++ b/src/dom.ts @@ -38,8 +38,6 @@ export const miniPandA = createElem("div", { id: "miniPandA" }); miniPandA.classList.add("sidenav"); miniPandA.classList.add("cp_tab"); -export const subPandA = createElem("div", { id: "subPandA" }); - export const kadaiDiv = createElem("div", { className: "kadai-tab" }); export const hamburger = createElem("div", { className: "loader" }, {"click": toggleMiniPandA}); diff --git a/src/minipanda.ts b/src/minipanda.ts index 90ad8a3..891056e 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -43,7 +43,7 @@ function createHanburgerButton(): void { } } -function createMiniPandA(kadaiList: Array, lectureIDList: Array): void { +export function createMiniPandAGeneralized(root: Element, kadaiList: Array, lectureIDList: Array, subset: boolean, insertionProcess: (rendered: string) => void): void { const kadaiFetchedTimestamp = new Date( (typeof kadaiFetchedTime === "number")? kadaiFetchedTime : nowTime); const kadaiFetchedTimeString = kadaiFetchedTimestamp.toLocaleDateString() + " " + kadaiFetchedTimestamp.getHours() + ":" + ("00" + kadaiFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + kadaiFetchedTimestamp.getSeconds()).slice(-2); const quizFetchedTimestamp = new Date((typeof quizFetchedTime === "number")? quizFetchedTime : nowTime); @@ -112,23 +112,30 @@ function createMiniPandA(kadaiList: Array, lectureIDList: Array 0, otherElements: otherElements, showOther: otherElements.length > 0, - addMemoBoxLectures: addMemoBoxLectures + addMemoBoxLectures: addMemoBoxLectures, + subset: subset }; fetch(chrome.extension.getURL("views/minipanda.mustache")) .then((res) => res.text()) .then((template) => { const rendered = Mustache.render(template, templateVars); - miniPandA.innerHTML = rendered; - const parent = document.getElementById("pageBody"); - const ref = document.getElementById("toolMenuWrap"); - parent?.insertBefore(miniPandA, ref); - registerEventHandlers(miniPandA); - createSettingsTab(miniPandA); - initState(miniPandA); + insertionProcess(rendered); + registerEventHandlers(root); + if (!subset) createSettingsTab(root); + initState(root); }); } +function createMiniPandA(kadaiList: Array, lectureIDList: Array): void { + createMiniPandAGeneralized(miniPandA, kadaiList, lectureIDList, false, (rendered) => { + miniPandA.innerHTML = rendered; + const parent = document.getElementById("pageBody"); + const ref = document.getElementById("toolMenuWrap"); + parent?.insertBefore(miniPandA, ref); + }); +} + async function createSettingsTab(root: Element): Promise { createSettingItem(root, "完了済の課題も色付けする", CPsettings.displayCheckedKadai ?? true, "displayCheckedKadai"); createSettingItem(root, "課題キャッシュ時間 [秒]", CPsettings.kadaiCacheInterval ?? kadaiCacheInterval, "kadaiCacheInterval"); diff --git a/src/subpanda.ts b/src/subpanda.ts index ed33cc7..f5f96e8 100644 --- a/src/subpanda.ts +++ b/src/subpanda.ts @@ -1,170 +1,43 @@ -import { appendChildAll, createElem, DueGroupDom, kadaiDiv, KadaiEntryDom, subPandA } from './dom'; -import { toggleKadaiFinishedFlag } from './eventListener'; import { Kadai, LectureInfo } from './kadai'; import { loadFromStorage } from './storage' import { convertArrayToKadai, - createLectureIDMap, - getDaysUntil, - getTimeRemain, mergeIntoKadaiList, - nowTime, sortKadaiList } from "./utils"; import { - VERSION + lectureIDList } from "./content_script" +import { createMiniPandAGeneralized } from "./minipanda" const subpandaRoot = document.querySelector("#subpanda"); -async function dumpCache() { - if (subpandaRoot == null) return; +async function updateSubPandA(root: Element) { let mergedKadaiList: Array; const kadais = await loadFromStorage("TSkadaiList") as Array; const quizList = await loadFromStorage("TSQuizList") as Array; const kadaiMemoList = convertArrayToKadai(await loadFromStorage("TSkadaiMemoList")); + const lectureIDs = await loadFromStorage("TSlectureids") as Array; mergedKadaiList = mergeIntoKadaiList(kadais, quizList); mergedKadaiList = mergeIntoKadaiList(mergedKadaiList, kadaiMemoList); - const lectureIDs = await loadFromStorage("TSlectureids") as Array; - const fetchedTime = await loadFromStorage("TSkadaiFetchedTime") as number; - const quizFetchedTime = await loadFromStorage("TSquizFetchedTime") as number; - updateSubPandA(sortKadaiList(mergedKadaiList), lectureIDs, fetchedTime, quizFetchedTime); -} + mergedKadaiList = sortKadaiList(mergedKadaiList); -function addSubPandAToPopup() { - if (subpandaRoot == null) return; - const subPandALogo = createElem("img", { - className: "subpanda-logo", - alt: "logo", - src: chrome.extension.getURL("img/logo.png"), + createMiniPandAGeneralized(root, mergedKadaiList, lectureIDs, true, (rendered) => { + console.log(rendered); + root.innerHTML = rendered; }); - appendChildAll(subPandA, [subPandALogo]) - subpandaRoot.appendChild(subPandA); } -function updateSubPandA(kadaiList: Array, lectureIDList: Array, fetchedTime: number, quizFetchedTime: number): void { - const version = createElem("p", { classList: "cp-version", innerText: `Version ${VERSION}`}); - - const fetchedTimestamp = new Date(fetchedTime); - const fetchedTimeString = createElem("p", { className: "kadai-time" }); - fetchedTimeString.innerText = "取得日時: " + fetchedTimestamp.toLocaleDateString() + " " + fetchedTimestamp.getHours() + ":" + ("00" + fetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + fetchedTimestamp.getSeconds()).slice(-2); - const quizFetchedTimestamp = new Date((typeof quizFetchedTime === "number")? quizFetchedTime : nowTime); - const quizFetchedTimeString = createElem("p", { className: "kadai-time" }); - quizFetchedTimeString.innerText = "クイズ取得日時: " + quizFetchedTimestamp.toLocaleDateString() + " " + quizFetchedTimestamp.getHours() + ":" + ("00" + quizFetchedTimestamp.getMinutes()).slice(-2) + ":" + ("00" + quizFetchedTimestamp.getSeconds()).slice(-2); - - const dueGroupHeaderName = ["締め切り24時間以内", "締め切り5日以内", "締め切り14日以内", "その他"]; - const dueGroupColor = ["danger", "warning", "success", "other"]; - const initLetter = ["a", "b", "c", "d"]; - const lectureIDMap = createLectureIDMap(lectureIDList); - - // 0: <24h, 1: <5d, 2: <14d, 3: >14d - for (let i = 0; i < 4; i++) { - let entryCount = 0; - // 色別のグループを作成する - const dueGroupHeader = DueGroupDom.header.cloneNode(true); - const dueGroupHeaderTitle = DueGroupDom.headerTitle.cloneNode(true); - dueGroupHeader.className = `sidenav-${dueGroupColor[i]}`; - dueGroupHeader.style.display = "none"; - dueGroupHeaderTitle.textContent = `${dueGroupHeaderName[i]}`; - dueGroupHeader.appendChild(dueGroupHeaderTitle); - const dueGroupContainer = DueGroupDom.container.cloneNode(true); - dueGroupContainer.classList.add(`sidenav-list-${dueGroupColor[i]}`); - dueGroupContainer.style.display = "none"; - - // 各講義についてループ - for (const item of kadaiList) { - // 課題アイテムを入れるやつを作成 - const dueGroupBody = DueGroupDom.body.cloneNode(true); - dueGroupBody.className = `kadai-${dueGroupColor[i]}`; - dueGroupBody.id = initLetter[i] + item.lectureID; - const dueGroupLectureName = DueGroupDom.lectureName.cloneNode(true) as HTMLAnchorElement; - dueGroupLectureName.classList.add(`lecture-${dueGroupColor[i]}`, "lecture-name") - dueGroupLectureName.textContent = "" + (lectureIDMap.get(item.lectureID) || "???"); - // const topSite = item.getTopSite(); - // if (topSite != null) { - // dueGroupLectureName.href = topSite; - // } - dueGroupBody.appendChild(dueGroupLectureName); - - // 各講義の課題一覧についてループ - let cnt = 0; - for (const kadai of item.kadaiEntries) { - let kadaiCheckbox = KadaiEntryDom.checkbox.cloneNode(true); - const kadaiLabel = KadaiEntryDom.label.cloneNode(true); - const kadaiDueDate = KadaiEntryDom.dueDate.cloneNode(true); - const kadaiRemainTime = KadaiEntryDom.remainTime.cloneNode(true); - const kadaiTitle = KadaiEntryDom.title.cloneNode(true); - const memoBadge = document.createElement("span"); - memoBadge.classList.add("add-badge", "add-badge-success"); - memoBadge.innerText = "メモ"; - const quizBadge = document.createElement("span"); - quizBadge.classList.add("add-badge", "add-badge-quiz"); - quizBadge.innerText = "クイズ"; - - const _date = new Date(kadai.dueDateTimestamp * 1000); - const dispDue = _date.toLocaleDateString() + " " + _date.getHours() + ":" + ("00" + _date.getMinutes()).slice(-2); - const timeRemain = getTimeRemain((kadai.dueDateTimestamp * 1000 - nowTime) / 1000); - - const daysUntilDue = getDaysUntil(nowTime, kadai.dueDateTimestamp * 1000); - if ((daysUntilDue > 0 && daysUntilDue <= 1 && i === 0) || (daysUntilDue > 1 && daysUntilDue <= 5 && i === 1) || (daysUntilDue > 5 && daysUntilDue <= 14 && i === 2) || (daysUntilDue > 14 && i === 3)) { - kadaiDueDate.textContent = "" + dispDue; - kadaiRemainTime.textContent = `あと${timeRemain[0]}日${timeRemain[1]}時間${timeRemain[2]}分`; - kadaiTitle.textContent = "" + kadai.assignmentTitle; - if (kadai.isFinished) kadaiCheckbox.checked = true; - kadaiCheckbox.id = kadai.kadaiID; - kadaiCheckbox.lectureID = item.lectureID; - kadaiCheckbox.addEventListener("change", toggleKadaiFinishedFlag, false); - kadaiLabel.htmlFor = kadai.kadaiID; - - if (kadai.isMemo) { - kadaiTitle.textContent = ""; - kadaiTitle.appendChild(memoBadge); - kadaiTitle.append(kadai.assignmentTitle); - } - - if (kadai.isQuiz) { - kadaiTitle.textContent = ""; - kadaiTitle.appendChild(quizBadge); - kadaiTitle.append(kadai.assignmentTitle); - } - - appendChildAll(dueGroupBody, [kadaiCheckbox, kadaiLabel, kadaiDueDate, kadaiRemainTime, kadaiTitle]); - cnt++; - } - } - // 各講義の課題で該当するものがある場合はグループに追加 - if (cnt > 0) { - dueGroupContainer.appendChild(dueGroupBody); - entryCount++; - } - } - if (entryCount > 0) { - dueGroupHeader.style.display = ""; - dueGroupContainer.style.display = ""; - } - appendChildAll(subPandA, [version, fetchedTimeString, quizFetchedTimeString, kadaiDiv]); - appendChildAll(kadaiDiv, [dueGroupHeader, dueGroupContainer]); - } - - // 何もない時はRelaxPandAを表示する - if (kadaiList.length === 0) { - const kadaiTab = kadaiDiv; - const relaxDiv = createElem("div", { className: "relaxpanda" }); - const relaxPandaP = createElem("p", { className: "relaxpanda-p", innerText: "現在表示できる課題はありません" }); - const relaxPandaImg = createElem("img", { - className: "relaxpanda-img", - alt: "logo", - src: chrome.extension.getURL("img/relaxPanda.png"), - }); - appendChildAll(relaxDiv, [relaxPandaP, relaxPandaImg]); - kadaiTab.appendChild(relaxDiv); - } +function addSubPandAToPopup(): Element | null { + if (subpandaRoot == null) return null; + console.log(subpandaRoot); + return subpandaRoot; } function initSubPandA() { - addSubPandAToPopup(); - dumpCache(); + const root = addSubPandAToPopup(); + root && updateSubPandA(root); } initSubPandA(); From c6a23188473e8c6a57e474779e52334a8bc3772c Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 26 May 2021 23:14:41 +0900 Subject: [PATCH 007/196] =?UTF-8?q?fix:=20mustache=E3=82=92accessible?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/manifest.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/manifest.json b/public/manifest.json index 10daabe..4aad3e5 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -40,6 +40,7 @@ "web_accessible_resources": [ "css/custom-panda.css", "img/logo.png", - "img/relaxPanda.png" + "img/relaxPanda.png", + "views/minipanda.mustache" ] } \ No newline at end of file From 2fd733ff732fc98e6034051b9789acc197234db6 Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 26 May 2021 23:24:27 +0900 Subject: [PATCH 008/196] =?UTF-8?q?=E3=83=A1=E3=83=A2=E3=81=AE=E6=9C=9F?= =?UTF-8?q?=E9=99=90=E3=81=AE=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88?= =?UTF-8?q?=E5=80=A4=E3=82=92=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/minipanda.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/minipanda.ts b/src/minipanda.ts index 891056e..2480b22 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -207,6 +207,8 @@ function registerEventHandlers(root: Element) { function initState(root: Element) { // @ts-ignore root.querySelector('#kadaiTab')?.checked = true; + // @ts-ignore + root.querySelector('.todoDue')?.value = new Date(`${new Date().toISOString().substr(0, 16)}-10:00`).toISOString().substr(0, 16); } async function displayMiniPandA(mergedKadaiList: Array, lectureIDList: Array): Promise{ From 4b10ae701667460de85e8be5956da9de2ffa94f4 Mon Sep 17 00:00:00 2001 From: das08 Date: Thu, 27 May 2021 11:41:19 +0900 Subject: [PATCH 009/196] =?UTF-8?q?template=E3=81=AE=E7=B7=A8=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/views/minipanda.mustache | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache index a678f4c..25bc4fd 100644 --- a/public/views/minipanda.mustache +++ b/public/views/minipanda.mustache @@ -32,6 +32,7 @@ {{#dangerElements}}
{{lectureName}} + {{#entries}}

{{date}}

@@ -46,6 +47,7 @@ {{/isQuiz}} {{title}}

+ {{/entries}}
{{/dangerElements}} @@ -59,6 +61,7 @@ {{#warningElements}}
{{lectureName}} + {{#entries}}

{{date}}

@@ -73,6 +76,7 @@ {{/isQuiz}} {{title}}

+ {{/entries}}
{{/warningElements}} @@ -86,6 +90,7 @@ {{#successElements}}
{{lectureName}} + {{#entries}}

{{date}}

@@ -100,6 +105,7 @@ {{/isQuiz}} {{title}}

+ {{/entries}}
{{/successElements}} @@ -113,6 +119,7 @@ {{#otherElements}}
{{lectureName}} + {{#entries}}

{{date}}

@@ -127,6 +134,7 @@ {{/isQuiz}} {{title}}

+ {{/entries}}
{{/otherElements}} From ba16ab5048b2248031d40bf5a38dbc1f5061f6c4 Mon Sep 17 00:00:00 2001 From: das08 Date: Thu, 27 May 2021 11:42:43 +0900 Subject: [PATCH 010/196] =?UTF-8?q?=E5=90=8C=E4=B8=80=E8=AC=9B=E7=BE=A9?= =?UTF-8?q?=E5=90=8D=E3=81=AE=E8=AA=B2=E9=A1=8C=E3=82=92=E3=81=BE=E3=81=A8?= =?UTF-8?q?=E3=82=81=E3=81=9F=EF=BC=8B=E3=82=BD=E3=83=BC=E3=83=88=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/minipanda.ts | 49 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/src/minipanda.ts b/src/minipanda.ts index 2480b22..46b7994 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -70,8 +70,8 @@ export function createMiniPandAGeneralized(root: Element, kadaiList: Array) => { + // @ts-ignore + const lecName = elements.map(e => e.lectureName); + if (lecName.includes(lectureName)){ + const idx = lecName.indexOf(lectureName); + // @ts-ignore + elements[idx].entries.push(entry); + // @ts-ignore ソートする + elements[idx].entries.sort((a, b) => {return a.timestamp - b.timestamp}) + } else { + elements.push(vars); + } }; if (daysUntilDue > 0 && daysUntilDue <= 1) { - dangerElements.push(vars); + appendElement(lectureName, dangerElements); } else if (daysUntilDue > 1 && daysUntilDue <= 5) { - warningElements.push(vars); + appendElement(lectureName, warningElements); } else if (daysUntilDue > 5 && daysUntilDue <= 14) { - successElements.push(vars); + appendElement(lectureName, successElements); } else { - otherElements.push(vars); + appendElement(lectureName, otherElements); } }); @@ -99,18 +117,27 @@ export function createMiniPandAGeneralized(root: Element, kadaiList: Array) => { + elements.sort((a, b) => { + // @ts-ignore + const timestamp = (o) => Math.min(...o.entries.map((p) => p.timestamp)); + return timestamp(a) - timestamp(b); + }); + return elements; + }; + const templateVars = { kadaiFetchedTime: kadaiFetchedTimeString, quizFetchedTime: quizFetchedTimeString, minipandaLogo: chrome.extension.getURL("img/logo.png"), VERSION: VERSION, - dangerElements: dangerElements, + dangerElements: sortElements(dangerElements), showDanger: dangerElements.length > 0, - warningElements: warningElements, + warningElements: sortElements(warningElements), showWarning: warningElements.length > 0, - successElements: successElements, + successElements: sortElements(successElements), showSuccess: successElements.length > 0, - otherElements: otherElements, + otherElements: sortElements(otherElements), showOther: otherElements.length > 0, addMemoBoxLectures: addMemoBoxLectures, subset: subset From 3abd750d99f5dc3f971b7cfa76603a7004a3a04f Mon Sep 17 00:00:00 2001 From: tinaxd <31384595+tinaxd@users.noreply.github.com> Date: Sat, 5 Jun 2021 22:11:52 +0900 Subject: [PATCH 011/196] =?UTF-8?q?=E8=AC=9B=E7=BE=A9=E5=90=8D=E3=82=B8?= =?UTF-8?q?=E3=83=A3=E3=83=B3=E3=83=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/minipanda.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/minipanda.ts b/src/minipanda.ts index 46b7994..7f31429 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -80,6 +80,7 @@ export function createMiniPandAGeneralized(root: Element, kadaiList: Array Date: Tue, 15 Jun 2021 13:16:27 +0900 Subject: [PATCH 012/196] =?UTF-8?q?=E8=AA=B2=E9=A1=8C=E3=82=B8=E3=83=A3?= =?UTF-8?q?=E3=83=B3=E3=83=97=E3=81=AE=E5=BE=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/views/minipanda.mustache | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache index 25bc4fd..64458b0 100644 --- a/public/views/minipanda.mustache +++ b/public/views/minipanda.mustache @@ -31,8 +31,8 @@
{{#dangerElements}}
- {{lectureName}} {{#entries}} + {{lectureName}}

{{date}}

@@ -60,8 +60,8 @@
{{#warningElements}}
- {{lectureName}} {{#entries}} + {{lectureName}}

{{date}}

@@ -89,8 +89,8 @@
{{#successElements}}
- {{lectureName}} {{#entries}} + {{lectureName}}

{{date}}

@@ -118,8 +118,8 @@
{{#otherElements}}
- {{lectureName}} {{#entries}} + {{lectureName}}

{{date}}

From 270cdcb2fb1f332ff70166f88d4ed605139eccac Mon Sep 17 00:00:00 2001 From: tinaxd <31384595+tinaxd@users.noreply.github.com> Date: Fri, 18 Jun 2021 12:54:04 +0900 Subject: [PATCH 013/196] relaxpanda --- public/views/minipanda.mustache | 7 +++++++ src/minipanda.ts | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache index 64458b0..7442f4f 100644 --- a/public/views/minipanda.mustache +++ b/public/views/minipanda.mustache @@ -139,6 +139,13 @@ {{/otherElements}}
{{/showOther}} + + {{#showRelaxPandA}} +
+

現在表示できる課題はありません

+ logo +
+ {{/showRelaxPandA}}
{{^subset}} diff --git a/src/minipanda.ts b/src/minipanda.ts index 7f31429..e392a86 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -127,6 +127,13 @@ export function createMiniPandAGeneralized(root: Element, kadaiList: Array 0, addMemoBoxLectures: addMemoBoxLectures, - subset: subset + subset: subset, + showRelaxPandA: relaxPandA }; fetch(chrome.extension.getURL("views/minipanda.mustache")) From 88fbddbc0a495260a636946606d663876694f641 Mon Sep 17 00:00:00 2001 From: tinaxd <31384595+tinaxd@users.noreply.github.com> Date: Fri, 18 Jun 2021 13:06:03 +0900 Subject: [PATCH 014/196] dom-refactoring-lecture-merge-fix --- public/views/minipanda.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/views/minipanda.mustache b/public/views/minipanda.mustache index 7442f4f..b5442dd 100644 --- a/public/views/minipanda.mustache +++ b/public/views/minipanda.mustache @@ -118,8 +118,8 @@
{{#otherElements}}
+ {{lectureName}} {{#entries}} - {{lectureName}}

{{date}}

From 0347b41ed8df0457a432c5afc93b8a1a5151229b Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 12:03:18 +0900 Subject: [PATCH 015/196] =?UTF-8?q?fix:=20README=E3=81=AE=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 78 ++++------------------------------------------- README_en.md | 85 ++-------------------------------------------------- package.json | 6 ++-- 3 files changed, 11 insertions(+), 158 deletions(-) diff --git a/README.md b/README.md index 3b0f77d..19e9b9f 100644 --- a/README.md +++ b/README.md @@ -1,79 +1,13 @@ -# ComfortablePandATS -PandAを快適にするブラウザ拡張機能です. +# Comfortable Sakai +京都大学発の拡張機能「Comfortable PandA」をSakai Communityへコントリビューションするプロジェクトです。 -# ダウンロードリンク -- [Google Chrome](https://chrome.google.com/webstore/detail/comfortable-panda/cecjhdkagakhonnmddjgncmdldmppnoe) -- [Firefox](https://tinaxd.github.io/comfortable-panda-firefox-updates/index.html) -- [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/njbljhcmnodocldppoiejkcmcebpmljc) -# 使い方 -1. 拡張機能をブラウザにインストールします. -1. PandAにログインします. -1. PandAの右上に☰ボタンが追加されていたら導入成功です. - -# 機能紹介 -## タブの色付け -課題やクイズの締め切り期日に応じて講義タブが色付けされます. -- ![#f03c15](https://via.placeholder.com/15/e85555/000000?text=+) - 締め切り24時間以内 -- ![#f03c15](https://via.placeholder.com/15/d7aa57/000000?text=+) - 締め切り5日以内 -- ![#f03c15](https://via.placeholder.com/15/62b665/000000?text=+) - 締め切り14日以内 - -## 新規課題通知 -前回アクセス時から新たに追加された課題があった場合,講義タブの左上に赤丸の通知バッジを表示します. -通知バッジが表示されているサイトを開くと通知バッジは消えます. - -## miniPandA -右上の☰を押すとminiPandAが開きます. -公開されている課題とクイズの一覧が表示されます. -また,メモ機能を使うことでminiPandA上に課題メモを追加することができます. - - -# キャッシュ機能 -PandAへの負荷を軽減するために課題・クイズ取得にキャッシュ機能を導入しています. -デフォルトのキャッシュ間隔は以下のとおりです. -- 課題取得---2分間 -- クイズ取得---10分間 -キャッシュ時間は設定から変更することができます - - -# Screenshot -![](https://user-images.githubusercontent.com/41512077/90533356-5504e080-e1b3-11ea-8065-bc10ec624ddf.png) - -# 更新履歴 -- 2020/05/20 v0.9.0 Prototype release -- 2020/05/21 v1.0.0 一般公開 -- 2020/05/22 v1.0.1 小さなバグを修正。 -- 2020/05/26 v1.0.2 通知バッジに関するバグを修正。 -- 2020/06/10 v1.1.0 全ての課題を表示するサイドメニューを追加。 -- 2020/06/11 v1.1.3 小さなバグを修正。 -- 2020/06/13 v1.2.0 課題チェックボタンを追加。 -- 2020/06/23 v1.3.0 クイズ・試験タブを追加。 -- 2020/06/24 v1.3.1 バグを修正。 -- 2020/06/30 v1.4.0 カスタムToDo機能を追加。 -- 2020/08/16 v1.4.1 冗長な行を削除。 -- 2020/08/17 v1.5.0 relax PandA と更新中インジケーターを追加。 -- 2020/10/02 v1.5.2 通知バッジがリセットされるバグを修正。 -- 2020/10/25 v1.6.0 キャッシュを使用するようになった。 -- 2020/10/28 v1.6.1 Storage アクセスを非同期化。 -- 2020/12/22 v1.7.0 締め切り順に課題がソートされるようになった。 -- 2021/03/28 v2.0.0 Sakai 21 のサポート -- 2021/04/10 v2.1.0 エラー修正。 -- 2021/04/13 v3.0.0 Typescript で一から作り直し。 -- 2021/04/13 v3.0.4 バグ修正。 -- 2021/04/13 v3.1.0 バグ修正。 -- 2021/05/05 v3.2.0 SubPandA 実装。 -- 2021/05/15 v3.3.0 クイズを取得可能にした。 -- 2021/05/16 v3.4.0 設定画面を追加。 -- 2021/05/16 v3.4.1 小さなバグを修正。 -- 2021/05/16 v3.4.3 小さなバグを修正。 -- 2021/05/17 v3.5.0 カラーユニバーサルデザインに対応 -- 2021/05/17 v3.5.2 締切が14日以上の課題も色付けするように +# 動作保証 +- Sakai 20, 21(安定) +- Sakai 12(β版) # コンパイル方法 -Run +`comfortable-sakai`ディレクトリで下記コマンドを実行する。 ``` npx webpack ``` diff --git a/README_en.md b/README_en.md index 3d4b1a2..5800e9a 100644 --- a/README_en.md +++ b/README_en.md @@ -1,83 +1,2 @@ -# ComfortablePandATS -A browser extention that makes PandA life comfortable - -# Installation links -- [Google Chrome](https://chrome.google.com/webstore/detail/comfortable-panda/cecjhdkagakhonnmddjgncmdldmppnoe) -- [Firefox](https://tinaxd.github.io/comfortable-panda-firefox-updates/index.html) -- [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/njbljhcmnodocldppoiejkcmcebpmljc) - - -# Manual installation(not recommended) -1. Go to `chrome://extensions/` on your GoogleChrome -1. Enable **developer mode**. -1. Click **LOAD UNPACKED** button on upper left hand corner. -1. Select this folder(comfortable-panda) and install. -1. You are all set:) - -# How to compile -Run -``` -npx webpack -``` -in the root directory of cloned repository. - -# Usage -1. Login to PandA -1. Proceed to main page. -1. Done. Your upper tab color is changed and ☰ icon is displayed. - -# Features -## Tab coloring -Colors lecture tab according to due date. -- ![#f03c15](https://via.placeholder.com/15/e85555/000000?text=+) - Due date <= 1 Day ahead -- ![#f03c15](https://via.placeholder.com/15/d7aa57/000000?text=+) - Due date <= 5 Days ahead -- ![#f03c15](https://via.placeholder.com/15/62b665/000000?text=+) - Due date <= 14 Days ahead - -## Notification Badge -Tells your unchecked latest assignments. - -If you open lecture page with notification badge on, the badge will disappear. - -## miniPandA (Side-menu) -Click ☰ to open miniPandA. -All available assignments as well as quizzes will be displayed. -You can add your custom assignment to miniPandA with PLUS button located on the upper right hand side. - -Also check box is available for you to distinguish completed assignments from working assignments. - -# Screenshot -![](https://user-images.githubusercontent.com/41512077/90533356-5504e080-e1b3-11ea-8065-bc10ec624ddf.png) - -# Update Log -- 2020/05/20 v0.9.0 Prototype release -- 2020/05/21 v1.0.0 Release -- 2020/05/22 v1.0.1 Fixed some minor bugs & refactored -- 2020/05/26 v1.0.2 Fixed notification badge related bug -- 2020/06/10 v1.1.0 Added side menu for displaying all available kadais. -- 2020/06/11 v1.1.3 Minor bug fix & enhancement. -- 2020/06/13 v1.2.0 Added check button. -- 2020/06/23 v1.3.0 Added quiz/exam tab. -- 2020/06/24 v1.3.1 Fixed bug. -- 2020/06/30 v1.4.0 Add custom todo. -- 2020/08/16 v1.4.1 Removed redundant lines. -- 2020/08/17 v1.5.0 Added relax PandA and spinning wheel. -- 2020/10/02 v1.5.2 Fixed badge reset bug. -- 2020/10/25 v1.6.0 Add cache. -- 2020/10/28 v1.6.1 Using async on storage.get -- 2020/12/22 v1.7.0 Order assignments by closestTime. -- 2021/03/28 v2.0.0 Support for Sakai21. -- 2021/04/10 v2.1.0 Fixed errors. -- 2021/04/13 v3.0.0 Re-wrote everything using Typescript. -- 2021/04/13 v3.0.4 Bug fix. -- 2021/04/13 v3.1.0 Bug fix. -- 2021/05/05 v3.2.0 SubPandA first release. -- 2021/05/15 v3.3.0 Add quiz-fetch feature. -- 2021/05/16 v3.4.0 Add setting tab. -- 2021/05/16 v3.4.1 Fixed minor bugs. -- 2021/05/17 v3.5.0 Support for color universal design. - -# License -Apache-2.0 License +# Comfortable Sakai +tbd diff --git a/package.json b/package.json index 82cdf1e..33e7c42 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "comfortable-panda-ts", + "name": "comfortable-sakai", "version": "1.0.0", - "description": "The TypeScript version of Comfortable PandA", + "description": "Comfortable Sakai is a browser extension for managing assignments and quizzes on Sakai LMS.", "main": "index.ts", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", @@ -9,7 +9,7 @@ "build": "webpack" }, "author": "", - "license": "MIT", + "license": "Apache-2.0", "dependencies": { "@types/chrome": "^0.0.144", "copy-webpack-plugin": "^9.0.0", From a9d1ede6a80f57117df807f3c910451e24a31f8b Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 12:08:55 +0900 Subject: [PATCH 016/196] =?UTF-8?q?fix:=20package=E3=81=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 5 ++--- package.json | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a117a6..eadb363 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,12 @@ { - "name": "comfortable-panda-ts", + "name": "comfortable-sakai", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "comfortable-panda-ts", "version": "1.0.0", - "license": "MIT", + "license": "Apache-2.0", "dependencies": { "@types/chrome": "^0.0.144", "copy-webpack-plugin": "^9.0.0", diff --git a/package.json b/package.json index 33e7c42..6157092 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "tsc": "tsc", "build": "webpack" }, - "author": "", + "author": "das08(Kyoto University)", "license": "Apache-2.0", "dependencies": { "@types/chrome": "^0.0.144", From c66d3526a5ecf1b36868b6af24558aa7bf0e189d Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 12:10:40 +0900 Subject: [PATCH 017/196] =?UTF-8?q?fix:=20=E5=90=8D=E7=A7=B0=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/manifest.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/public/manifest.json b/public/manifest.json index 10daabe..957158e 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,7 +1,7 @@ { - "name": "Comfortable PandA", - "description": "Makes our PandA life more comfortable!", - "version": "3.5.2", + "name": "Comfortable Sakai", + "description": "Comfortable Sakai is a browser extension for managing assignments and quizzes on Sakai LMS.", + "version": "1.0.0", "manifest_version": 2, "icons": { "16": "img/icon16.png", @@ -14,7 +14,7 @@ "24": "img/icon24.png", "32": "img/icon32.png" }, - "default_title": "Comfortable PandA", + "default_title": "Comfortable Sakai", "default_popup": "popup.html" }, "content_scripts": [ From 4053e820be6b4f2e36c7a7128acebe9973a1f62c Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 12:13:48 +0900 Subject: [PATCH 018/196] =?UTF-8?q?fix:=20eslint=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 7b84a70..4220ebd 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,7 +4,7 @@ "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", - "prettier/@typescript-eslint" + "prettier" ], "plugins": [ "@typescript-eslint" From 71930d986b3ff161782141d976e385864357743c Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 12:15:06 +0900 Subject: [PATCH 019/196] =?UTF-8?q?fix:=20=E3=83=90=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=81=AE=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content_script.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content_script.ts b/src/content_script.ts index 5e1b8fd..f9a1196 100644 --- a/src/content_script.ts +++ b/src/content_script.ts @@ -21,7 +21,7 @@ import { import { Settings } from "./settings"; const baseURL = "https://panda.ecs.kyoto-u.ac.jp"; -export const VERSION = "3.5.2"; +export const VERSION = "1.0.0"; export let kadaiCacheInterval = 60 * 2; export let quizCacheInterval = 60 * 10; export let kadaiFetchedTime: number; From 8fa9f153ca371c0c3e15f8f5c3f113028ff2dc68 Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 13:22:23 +0900 Subject: [PATCH 020/196] =?UTF-8?q?fix:=20manifest.json=E3=81=AE=E5=A0=B4?= =?UTF-8?q?=E6=89=80=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/manifest.json => manifest.json | 0 webpack.config.js | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) rename public/manifest.json => manifest.json (100%) diff --git a/public/manifest.json b/manifest.json similarity index 100% rename from public/manifest.json rename to manifest.json diff --git a/webpack.config.js b/webpack.config.js index 627974f..4a3c1c4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -28,7 +28,8 @@ module.exports = { plugins: [ new CopyPlugin({ patterns:[ - {from: "./public", to: "./"} + {from: "./public", to: "./"}, + {from: "./manifest.json", } ], }), ] From 20c31d638a348461fdeb3b99dca579e3db02d50f Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 13:48:57 +0900 Subject: [PATCH 021/196] =?UTF-8?q?add:=20locale=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AE=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _locales/en/messages.json | 3 +++ _locales/ja/messages.json | 3 +++ manifest.json | 3 ++- webpack.config.js | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 _locales/en/messages.json create mode 100644 _locales/ja/messages.json diff --git a/_locales/en/messages.json b/_locales/en/messages.json new file mode 100644 index 0000000..55945d8 --- /dev/null +++ b/_locales/en/messages.json @@ -0,0 +1,3 @@ +{ + "EXTENSION_DESCRIPTION": {"message": "Comfortable Sakai is a browser extension for managing assignments and quizzes on Sakai LMS."} +} \ No newline at end of file diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json new file mode 100644 index 0000000..e0b87aa --- /dev/null +++ b/_locales/ja/messages.json @@ -0,0 +1,3 @@ +{ + "EXTENSION_DESCRIPTION": {"message":"Comfortable SakaiはSakai LMS上の課題やクイズを管理するための拡張機能です。"} +} \ No newline at end of file diff --git a/manifest.json b/manifest.json index 957158e..121a37c 100644 --- a/manifest.json +++ b/manifest.json @@ -1,8 +1,9 @@ { "name": "Comfortable Sakai", - "description": "Comfortable Sakai is a browser extension for managing assignments and quizzes on Sakai LMS.", + "description": "__MSG_EXTENSION_DESCRIPTION__", "version": "1.0.0", "manifest_version": 2, + "default_locale": "en", "icons": { "16": "img/icon16.png", "48": "img/icon48.png", diff --git a/webpack.config.js b/webpack.config.js index 4a3c1c4..9a1854d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -29,6 +29,7 @@ module.exports = { new CopyPlugin({ patterns:[ {from: "./public", to: "./"}, + {from: "./_locales", to: "./_locales"}, {from: "./manifest.json", } ], }), From f48c3af23d40f85175f10f593631814d6b9f3d63 Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 14:18:43 +0900 Subject: [PATCH 022/196] =?UTF-8?q?add:=20locale=E3=81=AB=E5=BF=9C?= =?UTF-8?q?=E3=81=98=E3=81=A6=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=881?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _locales/en/messages.json | 10 +++++++++- _locales/ja/messages.json | 10 +++++++++- src/minipanda.ts | 19 +++++++++---------- src/network.ts | 4 +--- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 55945d8..545dbfb 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1,3 +1,11 @@ { - "EXTENSION_DESCRIPTION": {"message": "Comfortable Sakai is a browser extension for managing assignments and quizzes on Sakai LMS."} + "EXTENSION_DESCRIPTION": {"message": "Comfortable Sakai is a browser extension for managing assignments and quizzes on Sakai LMS."}, + "tab_assignments": {"message": "Assignments"}, + "tab_settings": {"message": "Settings"}, + "todo_box_course_name": {"message": "Course Name"}, + "todo_box_memo": {"message": "Memo"}, + "todo_box_due_date": {"message": "Due Date"}, + "todo_box_add": {"message": "Add"}, + "badge_quiz": {"message": "Quiz"}, + "badge_memo": {"message": "Memo"} } \ No newline at end of file diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json index e0b87aa..67107d1 100644 --- a/_locales/ja/messages.json +++ b/_locales/ja/messages.json @@ -1,3 +1,11 @@ { - "EXTENSION_DESCRIPTION": {"message":"Comfortable SakaiはSakai LMS上の課題やクイズを管理するための拡張機能です。"} + "EXTENSION_DESCRIPTION": {"message":"Comfortable SakaiはSakai LMS上の課題やクイズを管理するための拡張機能です。"}, + "tab_assignments": {"message": "課題一覧"}, + "tab_settings": {"message": "詳細設定"}, + "todo_box_course_name": {"message": "講義名"}, + "todo_box_memo": {"message": "メモ内容"}, + "todo_box_due_date": {"message": "期限"}, + "todo_box_add": {"message": "追加する"}, + "badge_quiz": {"message": "クイズ"}, + "badge_memo": {"message": "メモ"} } \ No newline at end of file diff --git a/src/minipanda.ts b/src/minipanda.ts index 6a97f30..42a0d11 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -60,9 +60,9 @@ function createMiniPandA(): void { miniPandACloseBtn.addEventListener("click", toggleMiniPandA); const kadaiTab = createElem("input", { type: "radio", id: "kadaiTab", name: "cp_tab", checked: true }, {"click": toggleKadaiTab}); - const kadaiTabLabel = createElem("label", { htmlFor: "kadaiTab", innerText: " 課題一覧 " }); + const kadaiTabLabel = createElem("label", { htmlFor: "kadaiTab", innerText: chrome.i18n.getMessage('tab_assignments') }); const settingsTab = createElem("input", { type: "radio", id: "settingsTab", name: "cp_tab", checked: false }, {"click": toggleSettingsTab}); - const settingsTabLabel = createElem("label", { htmlFor: "settingsTab", innerText: " 詳細設定 " }); + const settingsTabLabel = createElem("label", { htmlFor: "settingsTab", innerText: chrome.i18n.getMessage('tab_settings') }); const addMemoButton = createElem("button", { className: "plus-button", innerText: "+" },{"click": toggleMemoBox}); const kadaiFetchedTimestamp = new Date( (typeof kadaiFetchedTime === "number")? kadaiFetchedTime : nowTime); @@ -93,7 +93,7 @@ function createMiniPandA(): void { function appendMemoBox(lectureIDList: Array): void { const memoEditBox = createElem("div", {className: "settingsBox addMemoBox", style: "none"}); const memoLabel = createElem("label", {style: "block"}); - const todoLecLabel = cloneElem(memoLabel, {innerText: "講義名"}); + const todoLecLabel = cloneElem(memoLabel, {innerText: chrome.i18n.getMessage('todo_box_course_name')}); const todoLecSelect = createElem("select", { className: "todoLecName" }); const todoLecOption = createElem("option"); @@ -104,16 +104,16 @@ function appendMemoBox(lectureIDList: Array): void { todoLecLabel.appendChild(todoLecSelect); - const todoContentLabel = cloneElem(memoLabel, { innerText: "メモ" }); + const todoContentLabel = cloneElem(memoLabel, { innerText: chrome.i18n.getMessage('todo_box_memo') }); const todoContentInput = createElem("input", { type: "text", className: "todoContent" }); todoContentLabel.appendChild(todoContentInput); - const todoDueLabel = cloneElem(memoLabel, {innerText: "期限"}); + const todoDueLabel = cloneElem(memoLabel, { innerText: chrome.i18n.getMessage('todo_box_due_date') }); const todoDueInput = createElem("input", { type: "datetime-local", className: "todoDue" }); todoDueInput.value = new Date(`${new Date().toISOString().substr(0, 16)}-10:00`).toISOString().substr(0, 16); todoDueLabel.appendChild(todoDueInput); - const todoSubmitButton = createElem("button", { type: "submit", id: "todo-add", innerText: "追加" }, {"click": addKadaiMemo}); + const todoSubmitButton = createElem("button", { type: "submit", id: "todo-add", innerText: chrome.i18n.getMessage('todo_box_add') }, {"click": addKadaiMemo}); appendChildAll(memoEditBox, [todoLecLabel, todoContentLabel, todoDueLabel, todoSubmitButton]); kadaiDiv.appendChild(memoEditBox); @@ -164,8 +164,7 @@ async function createSettingsTab(): Promise { createSettingItem("完了済の課題も色付けする", CPsettings.displayCheckedKadai ?? true, "displayCheckedKadai"); createSettingItem("課題キャッシュ時間 [秒]", CPsettings.kadaiCacheInterval ?? kadaiCacheInterval, "kadaiCacheInterval"); createSettingItem("クイズキャッシュ時間 [秒]", CPsettings.quizCacheInterval ?? quizCacheInterval, "quizCacheInterval"); - createSettingItem("デバッグモード", CPsettings.makePandAGreatAgain ?? false, "makePandAGreatAgain", false); - + createSettingItem("カラー① 締切24時間前", CPsettings.topColorDanger ?? "#f78989", "topColorDanger"); createSettingItem("カラー① 締切5日前", CPsettings.topColorWarning ?? "#fdd783", "topColorWarning"); createSettingItem("カラー① 締切14日前", CPsettings.topColorSuccess ?? "#8bd48d", "topColorSuccess"); @@ -213,8 +212,8 @@ function updateMiniPandA(kadaiList: Array, lectureIDList: Array, baseURL: string, siteID: string): Array { - let assignment_collection = data.assignment_collection; - if (!CPsettings.makePandAGreatAgain) - assignment_collection = assignment_collection.filter((json: any) => json.openTime.epochSecond * 1000 < nowTime) + const assignment_collection = data.assignment_collection; return assignment_collection .filter((json: any) => json.dueTime.epochSecond * 1000 >= nowTime) .map((json: any) => { From 373b7db9cbd2344f76e64ab400687bdd29b8e00b Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 14:44:50 +0900 Subject: [PATCH 023/196] =?UTF-8?q?add:=20locale=E3=81=AB=E5=BF=9C?= =?UTF-8?q?=E3=81=98=E3=81=A6=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=882?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _locales/en/messages.json | 18 +++++++++++++++++- _locales/ja/messages.json | 18 +++++++++++++++++- src/minipanda.ts | 26 +++++++++++++------------- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 545dbfb..889f437 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -7,5 +7,21 @@ "todo_box_due_date": {"message": "Due Date"}, "todo_box_add": {"message": "Add"}, "badge_quiz": {"message": "Quiz"}, - "badge_memo": {"message": "Memo"} + "badge_memo": {"message": "Memo"}, + "settings_assignment_cache": {"message": "Assignment Cache [s]"}, + "settings_quizzes_cache": {"message": "Test&Quizzes Cache [s]"}, + "settings_color_checked_item": {"message": "Color course tabs including checked items"}, + "settings_reset_colors": {"message": "Reset to default colors"}, + "settings_colors_hour": { "message": "Color #$color$ $time$ hours before due", + "placeholders": { + "color": { "content": "$1" }, + "time": { "content": "$2" } + } + }, + "settings_colors_day": { "message": "Color #$color$ $time$ days before due", + "placeholders": { + "color": { "content": "$1" }, + "time": { "content": "$2" } + } + } } \ No newline at end of file diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json index 67107d1..c24f2b0 100644 --- a/_locales/ja/messages.json +++ b/_locales/ja/messages.json @@ -7,5 +7,21 @@ "todo_box_due_date": {"message": "期限"}, "todo_box_add": {"message": "追加する"}, "badge_quiz": {"message": "クイズ"}, - "badge_memo": {"message": "メモ"} + "badge_memo": {"message": "メモ"}, + "settings_assignment_cache": {"message": "課題キャッシュ時間 [秒]"}, + "settings_quizzes_cache": {"message": "クイズキャッシュ時間 [秒]"}, + "settings_color_checked_item": {"message": "チェック済の課題も色付けする"}, + "settings_reset_colors": {"message": "デフォルト色に戻す"}, + "settings_colors_hour": { "message": "カラー #$color$ 締切$time$時間前", + "placeholders": { + "color": { "content": "$1" }, + "time": { "content": "$2" } + } + }, + "settings_colors_day": { "message": "カラー #$color$ 締切$time$日前", + "placeholders": { + "color": { "content": "$1" }, + "time": { "content": "$2" } + } + } } \ No newline at end of file diff --git a/src/minipanda.ts b/src/minipanda.ts index 42a0d11..32aad22 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -161,19 +161,19 @@ function createSettingItem(itemDescription: string, value: boolean | number | st } async function createSettingsTab(): Promise { - createSettingItem("完了済の課題も色付けする", CPsettings.displayCheckedKadai ?? true, "displayCheckedKadai"); - createSettingItem("課題キャッシュ時間 [秒]", CPsettings.kadaiCacheInterval ?? kadaiCacheInterval, "kadaiCacheInterval"); - createSettingItem("クイズキャッシュ時間 [秒]", CPsettings.quizCacheInterval ?? quizCacheInterval, "quizCacheInterval"); - - createSettingItem("カラー① 締切24時間前", CPsettings.topColorDanger ?? "#f78989", "topColorDanger"); - createSettingItem("カラー① 締切5日前", CPsettings.topColorWarning ?? "#fdd783", "topColorWarning"); - createSettingItem("カラー① 締切14日前", CPsettings.topColorSuccess ?? "#8bd48d", "topColorSuccess"); - - createSettingItem("カラー② 締切24時間前", CPsettings.miniColorDanger ?? "#e85555", "miniColorDanger"); - createSettingItem("カラー② 締切5日前", CPsettings.miniColorWarning ?? "#d7aa57", "miniColorWarning"); - createSettingItem("カラー② 締切14日前", CPsettings.miniColorSuccess ?? "#62b665", "miniColorSuccess"); - - createSettingItem("デフォルト色に戻す", "reset", "reset"); + createSettingItem(chrome.i18n.getMessage('settings_color_checked_item'), CPsettings.displayCheckedKadai ?? true, "displayCheckedKadai"); + createSettingItem(chrome.i18n.getMessage('settings_assignment_cache'), CPsettings.kadaiCacheInterval ?? kadaiCacheInterval, "kadaiCacheInterval"); + createSettingItem(chrome.i18n.getMessage('settings_quizzes_cache'), CPsettings.quizCacheInterval ?? quizCacheInterval, "quizCacheInterval"); + + createSettingItem(chrome.i18n.getMessage('settings_colors_hour', ['1', 24]), CPsettings.topColorDanger ?? "#f78989", "topColorDanger"); + createSettingItem(chrome.i18n.getMessage('settings_colors_day', ['1', 5]), CPsettings.topColorWarning ?? "#fdd783", "topColorWarning"); + createSettingItem(chrome.i18n.getMessage('settings_colors_day', ['1', 14]), CPsettings.topColorSuccess ?? "#8bd48d", "topColorSuccess"); + + createSettingItem(chrome.i18n.getMessage('settings_colors_hour', ['2', 24]), CPsettings.miniColorDanger ?? "#e85555", "miniColorDanger"); + createSettingItem(chrome.i18n.getMessage('settings_colors_day', ['2', 5]), CPsettings.miniColorWarning ?? "#d7aa57", "miniColorWarning"); + createSettingItem(chrome.i18n.getMessage('settings_colors_day', ['2', 14]), CPsettings.miniColorSuccess ?? "#62b665", "miniColorSuccess"); + + createSettingItem(chrome.i18n.getMessage('settings_reset_colors'), "reset", "reset"); settingsDiv.style.display = "none"; } From 472ffc5a64acca5f92b915c96a75acda19b122dc Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 1 Sep 2021 14:46:19 +0900 Subject: [PATCH 024/196] =?UTF-8?q?del:=20=E4=B8=8D=E8=A6=81=E3=81=AA?= =?UTF-8?q?=E3=82=82=E3=81=AE=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/settings.ts | 2 -- src/subpanda.ts | 4 ---- 2 files changed, 6 deletions(-) diff --git a/src/settings.ts b/src/settings.ts index e74d6b6..e266e0a 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -2,7 +2,6 @@ export class Settings { kadaiCacheInterval?: number; quizCacheInterval?: number; displayCheckedKadai?: boolean; - makePandAGreatAgain?: boolean; topColorDanger?: string; topColorWarning?: string; topColorSuccess?: string; @@ -15,7 +14,6 @@ export class DefaultSettings extends Settings { static kadaiCacheInterval = 120; static quizCacheInterval = 600; static displayCheckedKadai = true; - static makePandAGreatAgain = false; static topColorDanger = "#f78989"; static topColorWarning = "#fdd783"; static topColorSuccess = "#8bd48d"; diff --git a/src/subpanda.ts b/src/subpanda.ts index ed33cc7..b211e70 100644 --- a/src/subpanda.ts +++ b/src/subpanda.ts @@ -81,10 +81,6 @@ function updateSubPandA(kadaiList: Array, lectureIDList: Array Date: Wed, 1 Sep 2021 14:58:21 +0900 Subject: [PATCH 025/196] =?UTF-8?q?add:=20locale=E3=81=AB=E5=BF=9C?= =?UTF-8?q?=E3=81=98=E3=81=A6=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=883?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _locales/en/messages.json | 8 +++++--- _locales/ja/messages.json | 9 ++++++--- src/minipanda.ts | 4 ++-- src/subpanda.ts | 4 ++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 889f437..5af0c84 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -6,8 +6,8 @@ "todo_box_memo": {"message": "Memo"}, "todo_box_due_date": {"message": "Due Date"}, "todo_box_add": {"message": "Add"}, - "badge_quiz": {"message": "Quiz"}, - "badge_memo": {"message": "Memo"}, + "quiz": {"message": "Quiz"}, + "memo": {"message": "Memo"}, "settings_assignment_cache": {"message": "Assignment Cache [s]"}, "settings_quizzes_cache": {"message": "Test&Quizzes Cache [s]"}, "settings_color_checked_item": {"message": "Color course tabs including checked items"}, @@ -23,5 +23,7 @@ "color": { "content": "$1" }, "time": { "content": "$2" } } - } + }, + "assignment_acquisition_date": {"message": "Assignment Acquisition Date: "}, + "testquiz_acquisition_date": {"message": "Test&Quiz Acquisition Date: "} } \ No newline at end of file diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json index c24f2b0..13cce98 100644 --- a/_locales/ja/messages.json +++ b/_locales/ja/messages.json @@ -6,8 +6,8 @@ "todo_box_memo": {"message": "メモ内容"}, "todo_box_due_date": {"message": "期限"}, "todo_box_add": {"message": "追加する"}, - "badge_quiz": {"message": "クイズ"}, - "badge_memo": {"message": "メモ"}, + "quiz": {"message": "クイズ"}, + "memo": {"message": "メモ"}, "settings_assignment_cache": {"message": "課題キャッシュ時間 [秒]"}, "settings_quizzes_cache": {"message": "クイズキャッシュ時間 [秒]"}, "settings_color_checked_item": {"message": "チェック済の課題も色付けする"}, @@ -23,5 +23,8 @@ "color": { "content": "$1" }, "time": { "content": "$2" } } - } + }, + , + "assignment_acquisition_date": {"message": "課題取得日時: "}, + "testquiz_acquisition_date": {"message": "クイズ取得日時: "} } \ No newline at end of file diff --git a/src/minipanda.ts b/src/minipanda.ts index 32aad22..f0aef23 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -212,8 +212,8 @@ function updateMiniPandA(kadaiList: Array, lectureIDList: Array, lectureIDList: Array Date: Wed, 8 Sep 2021 11:11:36 +0900 Subject: [PATCH 026/196] Merge branch 'cpanda-mustache' into mustache # Conflicts: # package-lock.json # package.json # src/minipanda.ts # src/subpanda.ts --- .eslintrc.json | 3 ++- _locales/ja/messages.json | 1 - ...{minipanda.mustache => minisakai.mustache} | 0 src/minipanda.ts | 22 +++++++++---------- 4 files changed, 13 insertions(+), 13 deletions(-) rename public/views/{minipanda.mustache => minisakai.mustache} (100%) diff --git a/.eslintrc.json b/.eslintrc.json index 4220ebd..ceb7098 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,6 +16,7 @@ "project": "./tsconfig.json" }, "rules": { - "@typescript-eslint/ban-ts-comment": "off" + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-namespace": "off" } } diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json index 13cce98..df03f3a 100644 --- a/_locales/ja/messages.json +++ b/_locales/ja/messages.json @@ -24,7 +24,6 @@ "time": { "content": "$2" } } }, - , "assignment_acquisition_date": {"message": "課題取得日時: "}, "testquiz_acquisition_date": {"message": "クイズ取得日時: "} } \ No newline at end of file diff --git a/public/views/minipanda.mustache b/public/views/minisakai.mustache similarity index 100% rename from public/views/minipanda.mustache rename to public/views/minisakai.mustache diff --git a/src/minipanda.ts b/src/minipanda.ts index e392a86..c1d4d35 100644 --- a/src/minipanda.ts +++ b/src/minipanda.ts @@ -31,8 +31,8 @@ import { quizFetchedTime, VERSION, } from "./content_script"; -// @ts-ignore -import Mustache = require('mustache'); +// @ts-ignore// @ts-ignore +import Mustache = require("mustache"); function createHanburgerButton(): void { const topbar = document.getElementById("mastLogin"); @@ -152,7 +152,7 @@ export function createMiniPandAGeneralized(root: Element, kadaiList: Array res.text()) .then((template) => { const rendered = Mustache.render(template, templateVars); @@ -165,18 +165,18 @@ export function createMiniPandAGeneralized(root: Element, kadaiList: Array, lectureIDList: Array): void { createMiniPandAGeneralized(miniPandA, kadaiList, lectureIDList, false, (rendered) => { - miniPandA.innerHTML = rendered; - const parent = document.getElementById("pageBody"); - const ref = document.getElementById("toolMenuWrap"); - parent?.insertBefore(miniPandA, ref); - }); + miniPandA.innerHTML = rendered; + const parent = document.getElementById("pageBody"); + const ref = document.getElementById("toolMenuWrap"); + parent?.insertBefore(miniPandA, ref); + } + ); } async function createSettingsTab(root: Element): Promise { createSettingItem(root, "完了済の課題も色付けする", CPsettings.displayCheckedKadai ?? true, "displayCheckedKadai"); createSettingItem(root, "課題キャッシュ時間 [秒]", CPsettings.kadaiCacheInterval ?? kadaiCacheInterval, "kadaiCacheInterval"); createSettingItem(root, "クイズキャッシュ時間 [秒]", CPsettings.quizCacheInterval ?? quizCacheInterval, "quizCacheInterval"); - createSettingItem(root, "デバッグモード", CPsettings.makePandAGreatAgain ?? false, "makePandAGreatAgain", false); createSettingItem(root, "カラー① 締切24時間前", CPsettings.topColorDanger ?? "#f78989", "topColorDanger"); createSettingItem(root, "カラー① 締切5日前", CPsettings.topColorWarning ?? "#fdd783", "topColorWarning"); @@ -188,13 +188,13 @@ async function createSettingsTab(root: Element): Promise { createSettingItem(root, "デフォルト色に戻す", "reset", "reset"); // @ts-ignore - root.querySelector('.settings-tab')?.style.display = "none"; + root.querySelector(".settings-tab")?.style.display = "none"; } function createSettingItem(root: Element, itemDescription: string, value: boolean | number | string | null, id: string, display = true) { const settingsDiv = root.querySelector('.settings-tab'); if (settingsDiv == null) { - console.log('.settings-tab not found'); + console.log(".settings-tab not found"); return; } const mainDiv = SettingsDom.mainDiv.cloneNode(true); From 4b5a870568fb739e7fd8a5dba707b5f571d0975f Mon Sep 17 00:00:00 2001 From: das08 Date: Wed, 8 Sep 2021 11:31:26 +0900 Subject: [PATCH 027/196] =?UTF-8?q?add:=20i18n=E5=8C=96=E2=91=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.json | 2 +- public/views/minisakai.mustache | 8 ++++---- src/minipanda.ts | 36 +++++++++++++++++++-------------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/manifest.json b/manifest.json index 4f06590..6087c0a 100644 --- a/manifest.json +++ b/manifest.json @@ -42,6 +42,6 @@ "css/custom-panda.css", "img/logo.png", "img/relaxPanda.png", - "views/minipanda.mustache" + "views/minisakai.mustache" ] } \ No newline at end of file diff --git a/public/views/minisakai.mustache b/public/views/minisakai.mustache index b5442dd..258be43 100644 --- a/public/views/minisakai.mustache +++ b/public/views/minisakai.mustache @@ -3,13 +3,13 @@ {{^subset}} x - + - + {{/subset}} -

課題取得日時: {{kadaiFetchedTime}}

-

クイズ取得日時: {{quizFetchedTime}}

+

{{title.kadaiFetchedTime}}: {{kadaiFetchedTime}}

+

{{title.quizFetchedTime}}: {{quizFetchedTime}}

{{^subset}}