1
1
// ==UserScript==
2
- // @name twinsに 「記事リンク」ボタンを追加するスクリプト
2
+ // @name 筑波大学のtwinsに 「記事リンク」ボタンを追加するスクリプト
3
3
// @namespace https://github.com/shuuji3/userscript-twins-insert-article-url-button
4
- // @version 0.1
5
- // @description twinsに、他人と共有可能な記事URLにリンクされた「記事リンク」ボタンを追加します 。
4
+ // @version 0.2
5
+ // @description 📋 筑波大学のtwinsに「個別のお知らせページを開くボタン」と「他人と共有できるURLをコピーするボタン」を追加します 。
6
6
// @author TAKAHASHI Shuuji <shuuji3@gmail.com>
7
7
// @match https://twins.tsukuba.ac.jp/campusweb/*
8
8
// @grant none
23
23
}
24
24
25
25
/**
26
- * 記事名をクリックしたときに初めて、iframeが非同期に読み込まれるため、pollingを行っています。
26
+ * ニュース記事へのURLを取得します。
27
+ * 記事名をクリックしたときに初めてiframeが非同期に読み込まれるため、pollingを行っています。
27
28
*/
28
29
async function getArticleURL ( ) {
29
30
let buttonInserted = false ;
69
70
return button
70
71
}
71
72
73
+ function isClipboardJSLoaded ( ) {
74
+ try {
75
+ // Before loaded clipboard.js, instantiate Clipboard should be failed.
76
+ new Clipboard ( ) ;
77
+ } catch ( e ) {
78
+ if ( e . name === 'TypeError' ) {
79
+ return false ;
80
+ }
81
+ }
82
+ return true ;
83
+ }
84
+
85
+ /**
86
+ * clipboard.jsを読み込んで初期化します。
87
+ */
88
+ async function initClipboardJS ( ) {
89
+ const script = document . createElement ( 'script' ) ;
90
+ script . src = 'https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.4.0/clipboard.min.js' ;
91
+ document . body . appendChild ( script ) ;
92
+ while ( ! isClipboardJSLoaded ( ) ) {
93
+ await sleep ( 100 ) ;
94
+ }
95
+ new Clipboard ( '.btn' ) ;
96
+ }
97
+
72
98
// main
73
99
async function main ( ) {
74
100
const url = await getArticleURL ( ) ;
79
105
target . parentNode . insertBefore ( linkButton , target ) ;
80
106
target . parentNode . insertBefore ( copyButton , target ) ;
81
107
82
- // Initialize Clipboard.js
83
- const script = document . createElement ( 'script' ) ;
84
- script . src = 'https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.4.0/clipboard.min.js' ;
85
- document . body . appendChild ( script ) ;
86
- await sleep ( 1000 ) ; // darty...
87
- new Clipboard ( '.btn' ) ;
108
+ initClipboardJS ( ) ;
88
109
}
89
110
90
111
await main ( ) ;
91
112
92
- } ) ( ) ;
113
+ } ) ( ) ;
0 commit comments