<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://u-stella.wiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
	<title>MediaWiki:Common.js - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://u-stella.wiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="https://u-stella.wiki/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-06-06T20:25:23Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://u-stella.wiki/index.php?title=MediaWiki:Common.js&amp;diff=3004&amp;oldid=prev</id>
		<title>2025年4月25日 (金) 16:17にU-Stellaによる</title>
		<link rel="alternate" type="text/html" href="https://u-stella.wiki/index.php?title=MediaWiki:Common.js&amp;diff=3004&amp;oldid=prev"/>
		<updated>2025-04-25T16:17:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function ($content) {&lt;br /&gt;
  // すべての中身をここに入れて動かす&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
  // Citizenスキンの「案内」セクションを検出して削除&lt;br /&gt;
  $(&amp;quot;.mw-portlet h3&amp;quot;).each(function () {&lt;br /&gt;
    const heading = $(this);&lt;br /&gt;
    if (heading.text().trim() === &amp;quot;案内&amp;quot;) {&lt;br /&gt;
      heading.closest(&amp;quot;.mw-portlet&amp;quot;).remove();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
$(function () {&lt;br /&gt;
  $(&amp;quot;.sidebar-group&amp;quot;).each(function () {&lt;br /&gt;
    const group = $(this);&lt;br /&gt;
    const heading = group.find(&amp;quot;h2&amp;quot;).first().text().trim();&lt;br /&gt;
    if (heading === &amp;quot;案内&amp;quot;) {&lt;br /&gt;
      group.remove();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
$(function () {&lt;br /&gt;
  $(&amp;quot;.citizen-menu__heading&amp;quot;).each(function () {&lt;br /&gt;
    if ($(this).text().trim() === &amp;quot;案内&amp;quot;) {&lt;br /&gt;
      $(this).next(&amp;quot;.citizen-menu__content&amp;quot;).remove(); // 中身消す&lt;br /&gt;
      $(this).remove(); // 見出しも消す&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//メインページだけ読了目安を無効化&lt;br /&gt;
$(function () {&lt;br /&gt;
  if ( mw.config.get(&amp;#039;ReadingTimeDisabled&amp;#039;) ) {&lt;br /&gt;
    $(&amp;#039;.read-time-box, .citizen-page-info-readtime&amp;#039;).remove();&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//折り畳み機能&lt;br /&gt;
$(function () {&lt;br /&gt;
  $(&amp;quot;.mw-collapsible&amp;quot;).each(function () {&lt;br /&gt;
    const $block = $(this);&lt;br /&gt;
    const $toggle = $(&amp;#039;&amp;lt;a href=&amp;quot;#&amp;quot; style=&amp;quot;float:right;&amp;quot;&amp;gt;[開く]&amp;lt;/a&amp;gt;&amp;#039;);&lt;br /&gt;
    $toggle.on(&amp;quot;click&amp;quot;, function (e) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      $block.toggleClass(&amp;quot;collapsed&amp;quot;);&lt;br /&gt;
      $block.find(&amp;quot;ul&amp;quot;).slideToggle();&lt;br /&gt;
      $toggle.text($block.hasClass(&amp;quot;collapsed&amp;quot;) ? &amp;quot;[開く]&amp;quot; : &amp;quot;[閉じる]&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
    $block.prepend($toggle);&lt;br /&gt;
    if ($block.hasClass(&amp;quot;mw-collapsed&amp;quot;)) {&lt;br /&gt;
      $block.addClass(&amp;quot;collapsed&amp;quot;);&lt;br /&gt;
      $block.find(&amp;quot;ul&amp;quot;).hide();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
  $(&amp;quot;.u-stella-box&amp;quot;).each(function () {&lt;br /&gt;
    const $block = $(this);&lt;br /&gt;
    const $toggle = $(&amp;#039;&amp;lt;a href=&amp;quot;#&amp;quot; style=&amp;quot;float:right; font-size:90%;&amp;quot;&amp;gt;[＋]&amp;lt;/a&amp;gt;&amp;#039;);&lt;br /&gt;
    $toggle.on(&amp;quot;click&amp;quot;, function (e) {&lt;br /&gt;
      e.preventDefault();&lt;br /&gt;
      $block.toggleClass(&amp;quot;collapsed&amp;quot;);&lt;br /&gt;
      $block.find(&amp;quot;ul&amp;quot;).slideToggle();&lt;br /&gt;
      $toggle.text($block.hasClass(&amp;quot;collapsed&amp;quot;) ? &amp;quot;[＋]&amp;quot; : &amp;quot;[－]&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
    $block.prepend($toggle);&lt;br /&gt;
    if ($block.hasClass(&amp;quot;collapsed&amp;quot;)) {&lt;br /&gt;
      $block.find(&amp;quot;ul&amp;quot;).hide();&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  // 全角スペースを黒四角に&lt;br /&gt;
mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function ($content) {&lt;br /&gt;
  $content.find(&amp;#039;.mw-parser-output&amp;#039;).each(function () {&lt;br /&gt;
    const $this = $(this);&lt;br /&gt;
    const html = $this.html().replace(/　/g, &amp;#039;■&amp;#039;);&lt;br /&gt;
    $this.html(html);&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  // スクロール進捗バー&lt;br /&gt;
$(function(){&lt;br /&gt;
  var progressBar = $(&amp;#039;&amp;lt;div id=&amp;quot;progress-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;).css({&lt;br /&gt;
    position:&amp;#039;fixed&amp;#039;, top:&amp;#039;0&amp;#039;, left:&amp;#039;0&amp;#039;, height:&amp;#039;4px&amp;#039;,&lt;br /&gt;
    background:&amp;#039;#6cf&amp;#039;, width:&amp;#039;0%&amp;#039;, zIndex:1000&lt;br /&gt;
  }).appendTo(&amp;#039;body&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  $(window).scroll(function(){&lt;br /&gt;
    var winScroll = $(window).scrollTop();&lt;br /&gt;
    var height = $(document).height() - $(window).height();&lt;br /&gt;
    var scrolled = (winScroll / height) * 100;&lt;br /&gt;
    progressBar.css(&amp;#039;width&amp;#039;, scrolled + &amp;#039;%&amp;#039;);&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
  &lt;br /&gt;
// 読了時間表示（メインページは除外）&lt;br /&gt;
$(function () {&lt;br /&gt;
  // メインページなら何もしない&lt;br /&gt;
  if (mw.config.get(&amp;#039;wgPageName&amp;#039;) === &amp;#039;メインページ&amp;#039;) return;&lt;br /&gt;
&lt;br /&gt;
  var text = $(&amp;#039;#mw-content-text&amp;#039;).text();&lt;br /&gt;
  var minutes = Math.ceil(text.length / 500); // 500文字/分で計算&lt;br /&gt;
  $(&amp;#039;&amp;lt;div id=&amp;quot;read-time&amp;quot;&amp;gt;⏳ 読了目安: &amp;#039; + minutes + &amp;#039;分&amp;lt;/div&amp;gt;&amp;#039;).css({&lt;br /&gt;
    padding: &amp;#039;5px&amp;#039;,&lt;br /&gt;
    background: &amp;#039;#e2f0ff&amp;#039;,&lt;br /&gt;
    borderRadius: &amp;#039;5px&amp;#039;,&lt;br /&gt;
    display: &amp;#039;inline-block&amp;#039;,&lt;br /&gt;
    marginBottom: &amp;#039;10px&amp;#039;&lt;br /&gt;
  }).prependTo(&amp;#039;#mw-content-text&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  // スムーズスクロール&lt;br /&gt;
$(function(){&lt;br /&gt;
  $(&amp;#039;a[href^=&amp;quot;#&amp;quot;]&amp;#039;).click(function(e){&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    var target = $(this.hash);&lt;br /&gt;
    if(target.length){&lt;br /&gt;
      $(&amp;#039;html, body&amp;#039;).animate({scrollTop:target.offset().top},600);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
  &lt;br /&gt;
  // ツールチップ機能&lt;br /&gt;
$(function(){&lt;br /&gt;
  $(&amp;#039;[data-tooltip]&amp;#039;).hover(function(){&lt;br /&gt;
    var tooltip = $(&amp;#039;&amp;lt;div class=&amp;quot;tooltip&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;).text($(this).attr(&amp;#039;data-tooltip&amp;#039;)).css({&lt;br /&gt;
      position: &amp;#039;absolute&amp;#039;,&lt;br /&gt;
      background: &amp;#039;#444&amp;#039;,&lt;br /&gt;
      color: &amp;#039;#fff&amp;#039;,&lt;br /&gt;
      padding: &amp;#039;4px 8px&amp;#039;,&lt;br /&gt;
      borderRadius: &amp;#039;5px&amp;#039;,&lt;br /&gt;
      zIndex: 1000,&lt;br /&gt;
      whiteSpace: &amp;#039;nowrap&amp;#039;&lt;br /&gt;
    }).appendTo(&amp;#039;body&amp;#039;).hide().fadeIn(200);&lt;br /&gt;
&lt;br /&gt;
    $(this).mousemove(function(e){&lt;br /&gt;
      tooltip.css({top:e.pageY+10, left:e.pageX+10});&lt;br /&gt;
    });&lt;br /&gt;
  }, function(){&lt;br /&gt;
    $(&amp;#039;.tooltip&amp;#039;).fadeOut(200,function(){ $(this).remove(); });&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
// ユーザー名歓迎表示（メインページ限定）&lt;br /&gt;
mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function () {&lt;br /&gt;
  if (&lt;br /&gt;
    mw.config.get(&amp;#039;wgUserName&amp;#039;) &amp;amp;&amp;amp;&lt;br /&gt;
    mw.config.get(&amp;#039;wgPageName&amp;#039;) === &amp;#039;メインページ&amp;#039;&lt;br /&gt;
  ) {&lt;br /&gt;
    const msg = &amp;#039;おかえりなさい、&amp;#039; + mw.config.get(&amp;#039;wgUserName&amp;#039;) + &amp;#039; さん！&amp;#039;;&lt;br /&gt;
    $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;)&lt;br /&gt;
      .text(msg)&lt;br /&gt;
      .css({&lt;br /&gt;
        textAlign: &amp;#039;center&amp;#039;,&lt;br /&gt;
        fontSize: &amp;#039;20px&amp;#039;,&lt;br /&gt;
        background: &amp;#039;#43C2E8&amp;#039;,&lt;br /&gt;
        color: &amp;#039;#fff&amp;#039;,&lt;br /&gt;
        padding: &amp;#039;8px&amp;#039;,&lt;br /&gt;
        borderRadius: &amp;#039;8px&amp;#039;,&lt;br /&gt;
        marginBottom: &amp;#039;10px&amp;#039;&lt;br /&gt;
      })&lt;br /&gt;
      .prependTo(&amp;#039;#mw-content-text&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  // 折りたたみ可能セクション&lt;br /&gt;
$(function() {&lt;br /&gt;
  $(&amp;#039;.mw-headline&amp;#039;).click(function() {&lt;br /&gt;
    $(this).parent().nextUntil(&amp;#039;h2, h3, h4, h5, h6&amp;#039;).slideToggle();&lt;br /&gt;
  }).css(&amp;#039;cursor&amp;#039;, &amp;#039;pointer&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
// 目次トグル機能追加&lt;br /&gt;
$(function(){&lt;br /&gt;
  var toc = $(&amp;#039;#toc&amp;#039;);&lt;br /&gt;
  if(toc.length){&lt;br /&gt;
    toc.before(&amp;#039;&amp;lt;button id=&amp;quot;toggle-toc&amp;quot;&amp;gt;目次を開閉&amp;lt;/button&amp;gt;&amp;#039;);&lt;br /&gt;
    $(&amp;#039;#toggle-toc&amp;#039;).css({&lt;br /&gt;
      margin: &amp;#039;5px&amp;#039;, padding: &amp;#039;3px 6px&amp;#039;, cursor: &amp;#039;pointer&amp;#039;&lt;br /&gt;
    }).click(function(){&lt;br /&gt;
      toc.slideToggle();&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 外部リンクを新規タブで開く&lt;br /&gt;
$(function() {&lt;br /&gt;
  $(&amp;#039;a.external&amp;#039;).attr(&amp;#039;target&amp;#039;, &amp;#039;_blank&amp;#039;);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ユーステラ風✨星キラキラカーソル（頻度調整＋水色強化版）&lt;br /&gt;
var lastStarTime = 0;&lt;br /&gt;
$(document).mousemove(function(e) {&lt;br /&gt;
    var now = Date.now();&lt;br /&gt;
    if (now - lastStarTime &amp;lt; 100) return; // 出現頻度を調整（100を大きくすればさらに少なくなる）&lt;br /&gt;
    lastStarTime = now;&lt;br /&gt;
&lt;br /&gt;
    var colors = [&amp;#039;#6ff&amp;#039;, &amp;#039;#9cf&amp;#039;, &amp;#039;#cff&amp;#039;, &amp;#039;#8df&amp;#039;, &amp;#039;#7af&amp;#039;]; // より水色っぽく調整&lt;br /&gt;
    var star = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).text(&amp;#039;✦&amp;#039;).css({&lt;br /&gt;
        position: &amp;#039;absolute&amp;#039;,&lt;br /&gt;
        top: e.pageY - 10,&lt;br /&gt;
        left: e.pageX - 10,&lt;br /&gt;
        color: colors[Math.floor(Math.random() * colors.length)],&lt;br /&gt;
        fontSize: &amp;#039;14px&amp;#039;,&lt;br /&gt;
        pointerEvents: &amp;#039;none&amp;#039;,&lt;br /&gt;
        opacity: 1,&lt;br /&gt;
        zIndex: 9999,&lt;br /&gt;
        userSelect: &amp;#039;none&amp;#039;,&lt;br /&gt;
        textShadow: &amp;#039;0 0 6px #8df, 0 0 12px #6ff&amp;#039;&lt;br /&gt;
    }).appendTo(&amp;#039;body&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    star.animate({&lt;br /&gt;
        top: e.pageY - (Math.random() * 40 - 20),&lt;br /&gt;
        left: e.pageX - (Math.random() * 40 - 20),&lt;br /&gt;
        opacity: 0,&lt;br /&gt;
        fontSize: &amp;#039;4px&amp;#039;&lt;br /&gt;
    }, 1000, function() {&lt;br /&gt;
        $(this).remove();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// h2-h4の埋め込みリンクを剥がす&lt;br /&gt;
$(function () {&lt;br /&gt;
  // 対象：h3〜h4の .mw-headline 内にあるリンクだけ&lt;br /&gt;
  $(&amp;#039;h3 .mw-headline &amp;gt; a, h4 .mw-headline &amp;gt; a&amp;#039;).each(function () {&lt;br /&gt;
    const text = $(this).text();          // リンクの中身を取り出して&lt;br /&gt;
    $(this).replaceWith(text);           // リンクをプレーンテキストに置き換える&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//転送先Popups&lt;br /&gt;
mw.loader.using([&amp;#039;jquery&amp;#039;, &amp;#039;mediawiki.api&amp;#039;]).then(function () {&lt;br /&gt;
  $(document).on(&amp;#039;mouseover&amp;#039;, &amp;#039;a&amp;#039;, function () {&lt;br /&gt;
    const $link = $(this);&lt;br /&gt;
    const title = $link.attr(&amp;#039;title&amp;#039;);&lt;br /&gt;
    if (!title || $link.hasClass(&amp;#039;mw-redirect&amp;#039;)) return; // 転送元だけ対応&lt;br /&gt;
&lt;br /&gt;
    const api = new mw.Api();&lt;br /&gt;
    api.get({&lt;br /&gt;
      action: &amp;#039;query&amp;#039;,&lt;br /&gt;
      titles: title,&lt;br /&gt;
      redirects: 1,&lt;br /&gt;
      format: &amp;#039;json&amp;#039;&lt;br /&gt;
    }).then(function (data) {&lt;br /&gt;
      const pages = data.query.pages;&lt;br /&gt;
      const page = Object.values(pages)[0];&lt;br /&gt;
&lt;br /&gt;
      if (page.redirects &amp;amp;&amp;amp; page.redirects.length &amp;gt; 0) {&lt;br /&gt;
        const target = page.redirects[0].to;&lt;br /&gt;
&lt;br /&gt;
        // Popupsの data-title を書き換えて、強制的に転送先にする&lt;br /&gt;
        $link.attr(&amp;#039;data-title&amp;#039;, target);&lt;br /&gt;
        $link.attr(&amp;#039;title&amp;#039;, target);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//未ログインユーザーは強制ライト&lt;br /&gt;
mw.loader.using(&amp;#039;mediawiki.user&amp;#039;).then(function () {&lt;br /&gt;
  if (!mw.config.get(&amp;#039;wgUserName&amp;#039;)) {&lt;br /&gt;
    document.documentElement.setAttribute(&amp;#039;data-theme&amp;#039;, &amp;#039;light&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//関連記事を全記事のフッターに自動表示する機能　停止中&lt;br /&gt;
&lt;br /&gt;
//FANBOX支援ボタン&lt;br /&gt;
mw.loader.using([&amp;#039;mediawiki.util&amp;#039;]).then(function () {&lt;br /&gt;
  function insertFanboxButton() {&lt;br /&gt;
    var footer = document.querySelector(&amp;#039;.citizen-footer&amp;#039;);&lt;br /&gt;
    if (!footer) {&lt;br /&gt;
      console.warn(&amp;#039;footer未検出、再試行します...&amp;#039;);&lt;br /&gt;
      setTimeout(insertFanboxButton, 300);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 二重挿入防止&lt;br /&gt;
    if (document.querySelector(&amp;#039;.fanbox-button&amp;#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    var btn = document.createElement(&amp;#039;a&amp;#039;);&lt;br /&gt;
    btn.href = &amp;#039;https://u-stella.fanbox.cc/&amp;#039;;&lt;br /&gt;
    btn.target = &amp;#039;_blank&amp;#039;;&lt;br /&gt;
    btn.rel = &amp;#039;noopener&amp;#039;;&lt;br /&gt;
    btn.textContent = &amp;#039; 💎 100円から応援できて、特典いっぱい！ いつも支えてくれて本当にありがとう。ユーステラは、FANBOXで全部が動いてるよ。&amp;#039;;&lt;br /&gt;
    btn.className = &amp;#039;fanbox-button&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    // 古い方法でスタイルを直書き&lt;br /&gt;
    btn.style.display = &amp;#039;inline-block&amp;#039;;&lt;br /&gt;
    btn.style.backgroundColor = &amp;#039;#43C2E8&amp;#039;;&lt;br /&gt;
    btn.style.color = &amp;#039;white&amp;#039;;&lt;br /&gt;
    btn.style.padding = &amp;#039;0.6em 1.4em&amp;#039;;&lt;br /&gt;
    btn.style.borderRadius = &amp;#039;999px&amp;#039;;&lt;br /&gt;
    btn.style.textDecoration = &amp;#039;none&amp;#039;;&lt;br /&gt;
    btn.style.fontWeight = &amp;#039;bold&amp;#039;;&lt;br /&gt;
    btn.style.margin = &amp;#039;1em auto&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    footer.appendChild(btn);&lt;br /&gt;
    console.log(&amp;#039;✅ FANBOXボタン追加済み&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function () {&lt;br /&gt;
    insertFanboxButton();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>U-Stella</name></author>
	</entry>
</feed>