×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
UserScriptを直した話 unarist 東海道らぐ 2018年3月オフな集まり in 名古屋
Slide 2
Slide 2 text
Mastodon • 日本でのブームからそのうち1年 • 皆様のお手元には今なにがありますか?
Slide 3
Slide 3 text
Mastodon • 日本でのブームからそのうち1年 • 皆様のお手元には今なにがありますか? • 解答例 – ごちゃごちゃしてきた UserStyle – 山のような UserScript
Slide 4
Slide 4 text
• アイコンやテキストを小さく • プロフィール画面のアバター表示の調整 • 長文投稿対策 • サムネを短辺合わせから長辺合わせに • リモートアカウント宛の mention でドメイン の頭文字を表示する • ほかにもいっぱい
Slide 5
Slide 5 text
• 期限付きミュート • 自動 numeronym ※ internationalization → i18n みたいな変換を投稿内の全 英字列に適用する • スラングに
つける • ウィンドウの下に投稿欄を出すやつ • 2カラムレイアウトにするやつ • 色んなURLをWebUIで開くやつ • 開発補助系 • ほかにもいっぱい
Slide 6
Slide 6 text
• 期限付きミュート • 自動numeronym ※ internationalization → i18n みたいな変換を投稿内の全 英字列に適用する • スラングにabbrつける • ウィンドウの下に投稿欄を出すやつ • 2カラムレイアウトにするやつ • 色んなURLをWebUIで開くやつ • 開発補助系 • ほかにもいっぱい この辺の話をします
Slide 7
Slide 7 text
MobileComposer • モバイル表示になった時に、 簡易投稿欄を下に常時表示 する • TL見ながら投稿できる • 画像投稿は未対応 • 独立したクライアントを 埋めこんでいるだけ
Slide 8
Slide 8 text
Add tablet layout • 2カラム表示を実現 • これを使う際に投稿欄への 切り替えが面倒で MobileComposer を作った • window.innerWidth に介入 して、WebUI側での幅判定 をごまかす • いつも左にいる投稿欄は CSSで隠す
Slide 9
Slide 9 text
v2.3.0rc1
Slide 10
Slide 10 text
#6594 Move "compose" on mobile to floating action button
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
ζ*'_')ζ「うなしのUserScript、投稿 欄への動線なくなってない…?」
Slide 13
Slide 13 text
Issue • これまでは上のメニューか ら投稿欄へ移動できた • モバイル表示で投稿欄への 移動がフローティングボタ ンになったので、上のメ ニューから消えてしまった • 新しい投稿ボタンは本来の モバイル判定でないと表示 されない
Slide 14
Slide 14 text
Solution • 自分で要素を再現するしかない • 課題: 通常の
だけではページ全体の遷移が発 生してしまう
Slide 15
Slide 15 text
Solution • 内部ではreact-routerのpush()を使っている c.f. window.history.pushState() • ただし外部には見えない • Reactが要素に生やす独自プロパティから内部オブジェ クトにアクセスし、historyオブジェクトを見つけて叩く
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
Solution • 面白いがつらい
Slide 19
Slide 19 text
Issue • 本来モバイル表示になる幅 なら投稿ボタンが表示され るが… • MobileComposerと重なっ てしまう
Slide 20
Slide 20 text
Solution • 向こうがタイムラインに対する absolute とかで配置し てくれてればよかったが、現実は fixed = ウィンドウの 枠に対する位置指定 • どうしようもない • 自分の height を調べて、その分 margin-bottom で投稿 ボタンを上にずらす
Slide 21
Slide 21 text
※ insertRule→CSSStyleRule取得→CSSStyleDeclaration取得 と段階を踏めば、style.marginBottom = "..." という書き方もできる
Slide 22
Slide 22 text
Known issues • 返信ボタンをクリックしても投稿カラムが表示されない • 内部にフラグがあり、既に投稿カラムが表示されていれ ば新たに切り替えないようになっている • Add tablet layout は表示上隠してるだけなので、内部フ ラグが true のままになっている。。
Slide 23
Slide 23 text
Known issues • 案 – onclick で遷移させる(mention ボタンの判定が難しい) – 内部のフラグを書き換える(今はいいけど…) – 返信イベントを拾って遷移(拾えるのかわからん) • どれも微妙 • とはいえ不便なのでそのうちなんかします
Slide 24
Slide 24 text
Conclusion • 本体の要素の再現はあまりやりたくない – 例えば今後ボタンの構造が変わったら、本体のバージョンに応 じて出しわける必要があるかも… – 部分的に再現するぐらいなら独立した実装を書いた方が安全 • 触りにくい内部状態の存在 • やっぱり本体を改造してしまった方が楽
Slide 25
Slide 25 text
Conclusion • それはそれとして、UserScript や UserStyle でどこまで できるかという挑戦は面白い • 最近の目玉: React の内部にアクセスできた – router の操作(ページ遷移) – store の参照(投稿やアカウントのキャッシュ参照) – React の出力をいじるのは厳しい • ほどよい規模の作品を量産して JS の腕を磨く – 大抵の新作は旧作+ちょっとした工夫