MediaWiki talk:Gadget-hideConversionTab.css

message: 請將 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://zh.wikipedia.org/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)
replies: text: 已完成。--安忆Talk 2021年1月2日 (六) 10:39 (UTC)
thread_title: 編輯請求 2020-12-18

message: 已解决：
--安忆Talk 2021年1月2日 (六) 14:17 (UTC)
replies: text: 下列討論已經關閉，請勿修改。如有任何意見，請至合適的討論頁進行，並不要再次編輯本討論。
----
在 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)

text: 三个选项的顺序好像是固定的？可否直接使用.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)
replies: text: :@AnYiLin：當然可以，只是我的方法會保險一點。--Jason Kwok 2020年12月18日 (五) 10:37 (UTC)
replies: text: ::那我的建议是只使用CSS，我觉得更加保险一点。--安忆Talk 2020年12月18日 (五) 10:39 (UTC)
replies: text: :::@-{AnYiLin}-：我再想了想，只用 CSS 也許的確比較好。這個是最新的設計：

text: :::
#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;
}

text: :::不過用這個設計 MediaWiki:Gadgets-definition 要作出相應的修改：

text: :::
* hideConversionTab[default|type=styles|targets=desktop,mobile]|hideConversionTab.css
--Jason Kwok 2020年12月18日 (五) 13:16 (UTC)
replies: text: ::::确定下来的话，可以直接提出编辑请求。--安忆Talk 2020年12月18日 (五) 14:15 (UTC)
replies: text: :::::@-{AnYiLin}-：已提出編輯請求--Jason Kwok 2020年12月18日 (五) 15:41 (UTC)

text: JasonHK有个小问题，这里一定要 !important 吗？我看不加也能 work，并且原来的代码没加，两边没统一感觉稍微有点奇怪。但是加了应该也不会遇到什么冲突的情况。 --砜中嘌呤的白磷萃取 打谱 2020年12月19日 (六) 14:33 (UTC)
replies: text: :我觉得也不用加，当然加了的话也没什么影响。--安忆Talk 2020年12月19日 (六) 14:40 (UTC)

text: : @-{WhitePhosphorus}-：有個主題不加的話沒法正常隱藏，雖然 Wikipedia 好像沒有那個主題……——Jason Kwok 2020年12月22日 (二) 18:15 (UTC)

text: 哦刚还发现一个大问题……像衡水中学第一个会是英文维基条目，这样只取前三就会隐藏掉英文版、不转换和简体。可能在主流浏览器支持 :has() 之前还是得用 js 辅助？ --砜中嘌呤的白磷萃取 打谱 2020年12月22日 (二) 14:26 (UTC)
replies: text: :没有复现成功…我这面看，那篇条目在minerva上的语言列表-建议的语言，前三个还是“不转换”、“简体”、“繁体”。--安忆Talk 2020年12月22日 (二) 14:40 (UTC)
replies: text: :: 看了一下建议语言的代码注释，似乎是和 Accept-Language 有关。我之前首选语言列表里一直有英文，现在把 en 去掉以后它就不再建议英文条目了。您也可以试试把 en 加进浏览器首选语言试试能否复现。反正看代码的话，这个建议语言还是会打乱顺序的吧，因为它好像设计了一套计算各语言排名先后的算法。 --砜中嘌呤的白磷萃取 打谱 2020年12月22日 (二) 15:59 (UTC)
replies: text: :::的确…真是极为先进的皮肤呢（笑）。看来在有:has之前（我觉得到CSS5都不一定有）不得不用js了。--安忆Talk 2020年12月22日 (二) 16:19 (UTC)
replies: text: :::: 我之後發現 MobileFrontend 的語言選擇必須啟用 JavaScript 才能運作，否則其實是使用 Special:移动版语言/Wikipedia:首页來切換語言的。好像用 JavaScript 也沒差（笑）？——Jason Kwok 2020年12月22日 (二) 18:10 (UTC)
replies: text: :::::据下方说明，固定样式使用：
replies: text: ::::::
#ca-varlang-0, #ca-varlang-1, #ca-varlang-2,
#mw-mf-language-variant-selection li:nth-child(-n + 3) {
	display: none
}
replies: text: :::::::动态列表因项目顺序不固定仍需使用js。 --安忆Talk 2020年12月22日 (二) 18:16 (UTC)
延伸內容

text: :@-{JasonHK}-：请问必须要用#mw-mf-language-variant-selection吗？我看只用.language-searcher .suggested-languages就可以在minerva上隐藏掉三个列表项了。--安忆Talk 2020年12月22日 (二) 14:47 (UTC)
replies: text: ::还是没有发现#mw-mf-language-variant-selection的用途，以下样式在测试后暂未发现问题WhitePhosphorus：
replies: text: :::
#ca-varlang-0, #ca-varlang-1, #ca-varlang-2,
.language-searcher .suggested-languages li:nth-child(-n + 3) {
	display: none
}
replies: text: ::::--安忆Talk 2020年12月22日 (二) 15:38 (UTC)

text: :: @-{AnYiLin}-：那個是在 Special:移动版语言/Wikipedia:首页用的。——Jason Kwok 2020年12月22日 (二) 18:01 (UTC)
replies: text: ::: 了解了。这样看起来，除了suggested-languages需要动态加样式之外，其他的用固定的就可以。 --安忆Talk 2020年12月22日 (二) 18:16 (UTC)
replies: text: :::: @-{AnYiLin}-：編輯請求已更新--Jason Kwok 2020年12月24日 (四) 08:35 (UTC)
----

text: 本討論已經關閉，請勿修改。如有任何意見，請至合適的討論頁進行，並不要再次編輯本討論。
thread_title:  翻新「hideConversionTab」小工具