PortalExt
CISTポータル用のChrome拡張機能
MITライセンスで公開
https://github.com/coolwind0202/portalext
機能
✅ CISTポータルのMyPageの時間割リンクを別タブで開けるようにする
動作しない場合がある(原因は分かっていない)
✅ CISTポータルの振り返りの文字数制限を超えても入力できるようにする
✅ CISTポータルで現在閲覧中のタブをクリックできるようにする
✅ CISTポータルで現在閲覧中のタブのボタンのスタイルを変える
✅CISTポータルの振り返り画面で目標設定を同時に確認できるようにする
不安定な機能
⌛ CIST Solomonで解答を修正したことが分かるようにする
試験を複数回実施することはできず、一機能の開発のためだけに試験を使い捨てる結果になった
開発の継続が難しいため、一旦廃止とする
Solomonを模倣したテスト用のWebサーバーを作成し動作確認ができた
2024/01/18 動作しなかったt6o_o6t.icon
一度目以降、Background scriptが、Contens script側からのメッセージを受け取れていない?
あるいはContent scriptが、iframe内での回答決定ボタンの押下を検知できていない
開発予定
CISTポータルのfaviconを設定する
これを誰かにやってほしいt6o_o6t.icon
PR募集中
CISTポータルの添付ファイルをプレビュー可能にする
Undispositionで解決t6o_o6t.icon
CISTポータルの掲示を未読既読の区別なく1ページに表示する
既読は灰色で表示する
CISTポータルの掲示のヘッダ行をtbodyに変更することが必要
CBTのデザインを改善する
問題と解答欄を分ける
未入力を赤色、入力済を緑色とする
モーダルを画面幅、高さの80%まで拡大する
間違ったときは何を間違ったのか表示する
問題文と、間違った解答を表示する
cf. CBT画面のHTML構造
iframeのサイズを可変にする
もともと大きくする
シアターモードがあったら良い
CISTポータルの画面に適切なクラスを振る
trなど
現在は、javascriptが実行されるので、別タブで開くとabout#blockedが開いてしまう
メンテナンス時表示
PortalExtのアーキテクチャで可能になるのではないか
CISTポータルの時間割から課題未提出の授業を一目で分かるようにする
課題を提出した授業は緑色、未提出の授業は赤色
レポート提出状況を見るボタンからレポートの点数が分かるようにする
ボタンを押したあとの画面だけでなく、講義画面でも見れてほしいような気がするt6o_o6t.icon
CISTポータルにオフラインモードを実装する
CISTポータルのセッションが切れたあとの再ログイン時自動で元のページに戻れるようにする
CISTポータルの講義ページの掲示リストでも未読にして戻れるようにする
CISTポータルの講義から直接教員に連絡できるようにする
教員情報をもっと細かくしたい?
教員名にmailto: を貼ってあげる
安全を期すなら、メールアドレスはポータル内のPDFを都度パースして取得する
CISTポータルの全ての授業画面に遷移したとき自分の学年の授業が最初に表示されるようにする
廃止された機能
CISTポータル内のURLをクリック可能にする
この機能はClickable Linksで解決できるt6o_o6t.icon
自前実装は考慮していないケースを生むと考え廃止した
技術的に難しそうな機能
CISTポータルの掲示のPermalinkを作成するt6o_o6t.icon
現在の掲示システムは、サーバーが認識している状態と実際のクライアントの状態がずれると壊れる
これはバグな気がしてきた
Javaの
状態を表すパラメータが格納されている
パラメータに対して適切なページを表示できていないことになる
状態番号を控えておけば任意の状態のページを呼び出せる?
webRequestを見て画面を丸ごと書き換えても良いかもしれない
APIを噛ませたフロントエンドを作る
APIラッパー
もしバックエンドを作り込めるようになったら、ラッパーとして再実装する
現時点では、単にwebRequestを見て適切な値を返却する関数
□ 掲示ページAPIの実装
code:api_wrapper.ts
interface APIWrapper {
getAnnouncements(option?: { readed?: boolean }): Announcement[]
}
type Announcement = {
updated_at: Date,
expires: Date
/* API は文字列を返しうるという想定 */
reply_count: number,
is_important: boolean
category: string
}
掲示のリストの最新30件分を返す。
現在の実装
ViewUnReadTitlesページのリクエストをスクレイピング