跳至內容

MediaWiki討論:Gadget-hideConversionTab.css

頁面內容不支援其他語言。
維基百科,自由的百科全書

編輯請求 2020-12-18[編輯]

請求已處理

請將 MediaWiki:Gadget-hideConversionTab.css

li#ca-0,
li#ca-1,
li#ca-2,
li#ca-varlang-0,
li#ca-varlang-1,
li#ca-varlang-2{
    display: none;
}

修改成

#ca-varlang-0,
#ca-varlang-1,
#ca-varlang-2,
#mw-mf-language-variant-selection > li:nth-child(-n + 3)
{
    display: none !important;
}

以及請加入頁面 MediaWiki:Gadget-hideConversionTab.js

/**
 * The script used to simplify the language options for the [Minerva Neue](https://www.mediawiki.org/wiki/Skin:Minerva_Neue)
 * skin.
 * 
 * @author Jason Kwok (https://wikicn.playgoteam.workers.dev/wiki/User:JasonHK)
 */

// Alter this constant to hide other languages.
var HIDDEN_LANGUAGE_SELECTOR = ".zh, .zh-hans, .zh-hant";

// Check if the current skin is Minerva Neue and `MutationObserver` is available, otherwise this
// script will not be executed.
if (document.body.classList.contains("skin-minerva") && (typeof MutationObserver === "function"))
{
  var observer = new MutationObserver(
    (function(records)
    {
      // Iterate through the mutation records.
      for (var i = 0; i < records.length; i++)
      {
        var record = records[i];

        // Execute further if the record is child list mutations.
        if (record.type === "childList")
        {
          // Iterate through the added nodes.
          for (var j = 0; j < record.addedNodes.length; j++)
          {
            var addedNode = record.addedNodes[j];

            // Execute further if the node is the language searcher overlay.
            if ((addedNode instanceof Element) && addedNode.classList.contains("language-searcher"))
            {
              // Query all language options with the specified language codes.
              var selectedNodes = addedNode.querySelectorAll(HIDDEN_LANGUAGE_SELECTOR);
              for (var k = 0; k < selectedNodes.length; k++)
              {
                // Hide its parent element.
                var parentElement = selectedNodes[k].parentElement;
                if (parentElement && (parentElement instanceof HTMLElement))
                {
                  parentElement.style.display = "none";
                }
              }
            }
          }
        }
      }
    }));

  // Activate the `MutationObserver`.
  observer.observe(
    document.body,
    {
      childList: true,
      subtree: true,
    });
}

另外亦請將 MediaWiki:Gadgets-definition

* hideConversionTab[default]|hideConversionTab.css

修改成

* hideConversionTab[default|ResourceLoader|type=styles|targets=desktop,mobile]|hideConversionTab.js|hideConversionTab.css

詳情請參見 Wikipedia:互助客棧/技術#翻新「hideConversionTab」小工具。--Jason Kwok 2020年12月18日 (五) 15:36 (UTC)[回覆]

@JasonHK已完成。--安憶Talk 2021年1月2日 (六) 10:39 (UTC)[回覆]

翻新「hideConversionTab」小工具[編輯]

下列討論已經關閉,請勿修改。如有任何意見,請至合適的討論頁進行,並不要再次編輯本討論。

在 2009 年,為了簡化繁簡轉換的標籤,中文維基百科增加了 hideConversionTab 小工具。然而,這個小工具在「Minerva」主題沒有起到任何作用。

為此,我設計了一個新版的 hideConversionTab 小工具。不過由於 CSS Selectors Level 4 仍在草案階段(無法使用 :has() pseudo-class),因此新版必須配合 JavaScript 使用。

li#ca-0,
li#ca-1,
li#ca-2,
li#ca-varlang-0,
li#ca-varlang-1,
li#ca-varlang-2,
body.skin-minerva .language-searcher .zh,
body.skin-minerva .language-searcher .zh-hans,
body.skin-minerva .language-searcher .zh-hant
{
  display: none !important;
}

以上的 CSS 樣式表並不能完全隱藏 Minerva 的那幾個繁簡轉換選項,只是在用戶禁用 JavaScript 下的折衷方案。而因為 Minerva 的轉換選項是在客戶端動態産生的,因此下面的 JavaScript 程式碼使用了 MutationObserver

if (document.body.classList.contains("skin-minerva") && (typeof MutationObserver === "function"))
{
  var observer = new MutationObserver(
    (function(records)
    {
      for (var i = 0; i < records.length; i++)
      {
        var record = records[i];
        if (record.type === "childList")
        {
          for (var j = 0; j < record.addedNodes.length; j++)
          {
            var addedNode = record.addedNodes[j];
            if ((addedNode instanceof Element) && addedNode.classList.contains("language-searcher"))
            {
              var selectedNodes = addedNode.querySelectorAll(".zh, .zh-hans, .zh-hant");
              for (var k = 0; k < selectedNodes.length; k++)
              {
                var parentElement = selectedNodes[k].parentElement;
                if (parentElement && (parentElement instanceof HTMLElement))
                {
                  parentElement.style.display = "none";
                }
              }
            }
          }
        }
      }
    }));

  observer.observe(
    document.body,
    {
      childList: true,
      subtree: true,
    });
}

--Jason Kwok 2020年12月18日 (五) 09:45 (UTC)[回覆]

三個選項的順序好像是固定的?可否直接使用.skin-minerva .site-link-list.suggested-languages li:nth-child(1), .skin-minerva .site-link-list.suggested-languages li:nth-child(2), .skin-minerva .site-link-list.suggested-languages li:nth-child(3) { display: none }?--安憶Talk 2020年12月18日 (五) 10:19 (UTC)[回覆]
@AnYiLin:當然可以,只是我的方法會保險一點。--Jason Kwok 2020年12月18日 (五) 10:37 (UTC)[回覆]
那我的建議是只使用CSS,我覺得更加保險一點。--安憶Talk 2020年12月18日 (五) 10:39 (UTC)[回覆]
@AnYiLin:我再想了想,只用 CSS 也許的確比較好。這個是最新的設計:
#ca-varlang-0,
#ca-varlang-1,
#ca-varlang-2,
#mw-mf-language-variant-selection > li:nth-child(-n + 3),
.skin-minerva .language-searcher .suggested-languages > li:nth-child(-n + 3)
{
    display: none !important;
}
不過用這個設計 MediaWiki:Gadgets-definition 要作出相應的修改:
* hideConversionTab[default|type=styles|targets=desktop,mobile]|hideConversionTab.css
--Jason Kwok 2020年12月18日 (五) 13:16 (UTC)[回覆]
確定下來的話,可以直接提出編輯請求。--安憶Talk 2020年12月18日 (五) 14:15 (UTC)[回覆]
@AnYiLin:已提出編輯請求--Jason Kwok 2020年12月18日 (五) 15:41 (UTC)[回覆]
JasonHK有個小問題,這裡一定要 !important 嗎?我看不加也能 work,並且原來的代碼沒加,兩邊沒統一感覺稍微有點奇怪。但是加了應該也不會遇到什麼衝突的情況。 --碸中嘌呤的白磷萃取 打譜 2020年12月19日 (六) 14:33 (UTC)[回覆]
我覺得也不用加,當然加了的話也沒什麼影響。--安憶Talk 2020年12月19日 (六) 14:40 (UTC)[回覆]
@WhitePhosphorus:有個主題不加的話沒法正常隱藏,雖然 Wikipedia 好像沒有那個主題……——Jason Kwok 2020年12月22日 (二) 18:15 (UTC)[回覆]
哦剛還發現一個大問題……像衡水中學第一個會是英文維基條目,這樣只取前三就會隱藏掉英文版、不轉換和簡體。可能在主流瀏覽器支持 :has() 之前還是得用 js 輔助? --碸中嘌呤的白磷萃取 打譜 2020年12月22日 (二) 14:26 (UTC)[回覆]
沒有復現成功…我這面看,那篇條目在minerva上的語言列表-建議的語言,前三個還是「不轉換」、「簡體」、「繁體」。--安憶Talk 2020年12月22日 (二) 14:40 (UTC)[回覆]
看了一下建議語言的代碼注釋,似乎是和 Accept-Language 有關。我之前首選語言列表里一直有英文,現在把 en 去掉以後它就不再建議英文條目了。您也可以試試把 en 加進瀏覽器首選語言試試能否復現。反正看代碼的話,這個建議語言還是會打亂順序的吧,因為它好像設計了一套計算各語言排名先後的算法。 --碸中嘌呤的白磷萃取 打譜 2020年12月22日 (二) 15:59 (UTC)[回覆]
的確…真是極為先進的皮膚呢(笑)。看來在有:has之前(我覺得到CSS5都不一定有)不得不用js了。--安憶Talk 2020年12月22日 (二) 16:19 (UTC)[回覆]
我之後發現 MobileFrontend 的語言選擇必須啟用 JavaScript 才能運作,否則其實是使用 Special:移動版語言/Wikipedia:首頁來切換語言的。好像用 JavaScript 也沒差(笑)?——Jason Kwok 2020年12月22日 (二) 18:10 (UTC)[回覆]
據下方說明,固定樣式使用:
#ca-varlang-0, #ca-varlang-1, #ca-varlang-2,
#mw-mf-language-variant-selection li:nth-child(-n + 3) {
	display: none
}
動態列表因項目順序不固定仍需使用js。 --安憶Talk 2020年12月22日 (二) 18:16 (UTC)[回覆]
延伸內容
@JasonHK:請問必須要用#mw-mf-language-variant-selection嗎?我看只用.language-searcher .suggested-languages就可以在minerva上隱藏掉三個列表項了。--安憶Talk 2020年12月22日 (二) 14:47 (UTC)[回覆]
還是沒有發現#mw-mf-language-variant-selection的用途,以下樣式在測試後暫未發現問題WhitePhosphorus
#ca-varlang-0, #ca-varlang-1, #ca-varlang-2,
.language-searcher .suggested-languages li:nth-child(-n + 3) {
	display: none
}
--安憶Talk 2020年12月22日 (二) 15:38 (UTC)[回覆]
@AnYiLin:那個是在 Special:移動版語言/Wikipedia:首頁用的。——Jason Kwok 2020年12月22日 (二) 18:01 (UTC)[回覆]
了解了。這樣看起來,除了suggested-languages需要動態加樣式之外,其他的用固定的就可以。 --安憶Talk 2020年12月22日 (二) 18:16 (UTC)[回覆]
@AnYiLin編輯請求已更新--Jason Kwok 2020年12月24日 (四) 08:35 (UTC)[回覆]

本討論已經關閉,請勿修改。如有任何意見,請至合適的討論頁進行,並不要再次編輯本討論。