書いたあとで見つけたんですが、同じjs実装で圧倒的にスマートな例が別の湯婆婆のコメント欄にありました。
https://qiita.com/TD12734/items/743e90fb867fee8c562e#comment-5abe544380a4b2d29af3
上記、@shinji709様のコードが先となりますorz
はじめに
「Javaで湯婆婆を実装してみる」のフォロワーネタです。
JavaScript版は既出なので、ブックマークレットにしました。
ブックマークレットは昔ゲーム・オブ・スローンズの画面が(演出上)暗くて見えにくい事にイライラして、アマプラの動画の輝度を調整するChromeExtensionを作ろうとした時にちょっと勉強した記憶があります。
(輝度調整のChrome拡張機能は既にあった)
コード
javascript:(function(){let n=window.prompt("契約書だよ。そこに名前を書きな。");if (!n.trim()) n=null;window.alert(`フン。${n}というのかい。贅沢な名だねぇ。`);n=n.substr(Math.floor(Math.random() * Math.floor(n.length)), 1);window.alert(`今からお前の名前は${n}だ。いいかい、${n}だよ。分かったら返事をするんだ、${n}!!`)})()
適当なサイトなどでブックマークを作り、リンク先を上記コードに置き換えるとブックマークレットとして動作します。
faviconを湯婆婆に変えるとよりそれっぽくなるかもしれません。
注記
ブックマークレットは、開いているページ内容(タブ)に影響します。
(文字列置換ブックマークレットとかありますよね)
Chromeの「新しいタブ」など、サイトではなくChromeシステム配下のページではJavaScriptは動作しないようです。
参考:http://mk.miko.jp/blog/archives/4497
yahooやqiitaなど適当なサイトを開き、そのタブで実行してください。
コードの解説
// ブックマークレットは今開いているサイトのスコープと干渉するので即時関数にする
(
function(){
let n=window.prompt("契約書だよ。そこに名前を書きな。");
// 名無しの場合は異常終了させるためにnullを代入。Cannot read property 'substr' of nullで落ちます。
if (!n.trim()) n=null;
window.alert(`フン。${n}というのかい。贅沢な名だねぇ。`);
// 抽選。先に抽選すればダイアログ2個で済みますが、あえて分けました。
n=n.substr(Math.floor(Math.random() * Math.floor(n.length)), 1);
window.alert(`今からお前の名前は${n}だ。いいかい、${n}だよ。分かったら返事をするんだ、${n}!!`)
}
)()
実行結果
最後に
大昔にいじったDelphiとか引っ張り出そうかと思いましたが流石にめんどうでやめましたw