MediaWiki:Gadget-Collapsible.js:修订间差异

MediaWiki系统消息页面
(导入1个版本:​小工具集导入 来源求闻百科[页面文字原许可:CC BY-SA 4.0])
(Git更新:代码仓库同步更新)
第3行: 第3行:
* _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}'
* _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}'
*
*
* @source <rs.miraheze.org/wiki/MediaWiki:Gadget-collapsible.js>
* @base <https://zh.wikipedia.org/wiki/MediaWiki:Gadget-NavFrame.js>
* @source <https://git.qiuwen.wiki/InterfaceAdmin/Gadgets/src/branch/master/src/Gadgets/NavFrame>
* @dependency ext.gadget.i18n
*/
*/
"use strict";

/**
/**
* Dynamic Navigation Bars.
* 用法说明:
*
*
* Based on script from en.wikipedia.org, 2008-09-15.
* 带有 collapsible 类的元素默认可折叠。
*
* - 对于 navbox,折叠时会保留标题栏,并将折叠按钮添加在标题栏中。
* @base <https://www.mediawiki.org/wiki/MediaWiki:Gadget-NavFrame.js>
* - 对于 table,折叠时会保留 caption 或第一行,并将折叠按钮添加在 caption 末尾
* @maintainer Helder.wiki, 2012–2013
* 或者第一行最后一格末尾。
* @maintainer Krinkle, 2013
* - 对于其他元素,
* @maintainer Fantasticfears, 2013-2014
* - 如果其子元素有带有 collapsible-always-show 类,那么除了该子元素之外的各个
*/
* 子元素都会随折叠隐藏,且折叠按钮添加在该子元素末尾。
/**
* - 如果没有子元素带有 collapsible-always-show 类,那么所有子元素都会被折叠,
* +--------------------------------------------------------+
* 折叠按钮添加在整个 collapsible 元素的开头,且该按钮不会随折叠隐藏。
* | === WARNING: GLOBAL GADGET FILE === |
* - 如果子元素带有 collapsible-cascade 类,那么当折叠时,该元素自身不是隐藏,
* +--------------------------------------------------------+
* 而是隐藏其所有的子元素,这些子元素同样可以受 collapsible-always-show 和
* | All changes should be made in the repository, |
* collapsible-cascade 类的影响。
* | otherwise they will be lost. |
* - 注意必须是子元素,直接的文本节点不会随折叠隐藏,例如:
* +--------------------------------------------------------+
* <div class="collapsible">123<span>456</span></div>
* | Changes to this page affect many users. |
* 折叠时,“456”会随折叠隐藏,但“123”不会。
* | Please discuss changes at Talk page before editing. |
* - 如果带有 collapsible-using-slide 类,那么折叠时,使用滑动动画而非淡入淡出的
* +--------------------------------------------------------+
* 动画。建议当只有一个元素会被隐藏时,才加此类。
* - 带有 collapsible-using-slide 类的元素会自动带有 collapsible 类。
* - 如果带有 collapsible-next 类,那么其折叠的不是其自身的子元素,而是折叠紧随
* 其后的一个元素。
* - 这种情况下,折叠按钮默认附在该 collapsible-next 元素的末尾。
* - 带有 collapsible-next 类的元素会自动带有 collapsible 类。
* - data-collapse-duration 属性可以设置折叠动画的时长,默认为 200 毫秒。
* - 带有 collapsed 类的元素初始就是已折叠的。
* - data-expandtext 和 data-collapsetext 可用于控制折叠按钮的显示文字。不支持
* 繁简转换,但是其默认值是可以正常根据界面语言繁简转换的。
*/
*/
/* <nowiki> */
'use strict';


/**
/**
第68行: 第61行:
* 繁简转换,但是其默认值是可以正常根据界面语言繁简转换的。
* 繁简转换,但是其默认值是可以正常根据界面语言繁简转换的。
*/
*/
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
mw.hook("wikipage.content").add(function ($wikipageContent) {
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
// 为元素添加“隐藏”和“显示”的按钮。
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
var appendToggle = function appendToggle($collapsible, $toggle) {
(function collapsible() {
var appendHere;
mw.hook('wikipage.content').add(function collapsibleMain($content) {
if ($collapsible.hasClass("collapsible-next")) {
// 为元素添加“隐藏”和“显示”的按钮。
// 如果有 collapsible-next 类,那么被折叠的元素不在该元素内,此时直接将折叠按钮添加在末尾。
$collapsible.append($toggle);
var appendToggle = function appendToggle($collapsible, $toggle) {
} else if ((appendHere = $collapsible.find(".collapsible-toggle-append-here").not(".collapsible-toggle-appended")).length) {
var $appendHere = $collapsible.find('.collapsible-toggle-append-here').not('.collapsible-toggle-appended');
if ($collapsible.hasClass('collapsible-next')) {
// 带有 collapsible-toggle-append-here 类的元素,如果存在,则无论可折叠元素是什么,则强制将折叠按钮添加至该元素中。
// 如果有 collapsible-next 类,那么被折叠的元素不在该元素内,此时直接将折叠按钮添加在末尾。
appendHere.append($toggle);
appendHere.addClass("collapsible-toggle-appended");
$collapsible.append($toggle);
} else if ($appendHere.length > 0) {
appendHere.parentsUntil($collapsible).addClass("collapsible-always-show");
// 带有 collapsible-toggle-append-here 类的元素,如果存在,则无论可折叠元素是什么,则强制将折叠按钮添加至该元素中。
} else if ($collapsible.hasClass("navbox")) {
$appendHere.append($toggle);
// navbox 元素的折叠按钮添加至 navbox-title 中,且该 navbox-title 会避免被折叠影响到。
$collapsible.children(".navbox-title").first().addClass("collapsible-always-show").append($toggle);
$appendHere.addClass('collapsible-toggle-appended');
} else if ($collapsible.is("table")) {
$appendHere.parentsUntil($collapsible).addClass('collapsible-always-show');
} else if ($collapsible.hasClass('navbox')) {
// 对于 table 对象,尝试添加到 caption 中,如果 caption 不存在,则添加到第一行的最后一列,并将第一行设为始终显示。
// navbox 元素的折叠按钮添加至 navbox-title 中,且该 navbox-title 会避免被折叠影响到。
var $caption = $collapsible.children("caption");
$collapsible.children('.navbox-title').first().addClass('collapsible-always-show').append($toggle);
if ($caption.length) {
// 有caption的情况
} else if ($collapsible.is('table')) {
// 对于 table 对象,尝试添加到 caption 中,如果 caption 不存在,则添加到第一行的最后一列,并将第一行设为始终显示。
$caption.first().append($toggle);
var $caption = $collapsible.children('caption');
if ($caption.length > 0) {
// 有caption的情况
$caption.first().append($toggle);
} else {
var $trows = $collapsible.children().children('tr');
$trows.first().addClass('collapsible-always-show').children().last().append($toggle);
}
} else {
} else {
// 尝试查找带有 collapsible-always-show 类的子元素,如果存在则将折叠按钮添加至其中。
var $trows = $collapsible.children().children("tr");
// 否则,添加至整个可折叠元素的最前面。
$trows.first().addClass("collapsible-always-show").children().last().append($toggle);
var $toToggle = $collapsible.children('.collapsible-always-show');
if ($toToggle.length > 0) {
$toToggle.first().append($toggle);
} else {
$collapsible.prepend($toggle);
$toggle.addClass('collapsible-always-show');
}
}
}
} else {
};
// 隐藏某个可折叠的元素。
// 尝试查找带有 collapsible-always-show 类的子元素,如果存在则将折叠按钮添加至其中。
var hide = function hide($collapsible, time) {
// 否则,添加至整个可折叠元素的最前面。
var $toToggle = $collapsible.children(".collapsible-always-show");
var useSlide = $collapsible.hasClass('collapsible-using-slide');
if (!$toToggle.length) {
if ($collapsible.hasClass('collapsible-next')) {
$collapsible.prepend($toggle);
var $element = $collapsible.next();
if (useSlide) {
$toggle.addClass("collapsible-always-show");
$element.slideUp(time);
} else {
$element.fadeOut(time);
}
} else {
} else {
($collapsible.is('table') ? $collapsible.children().children('tr') : $collapsible.contents()).each(function (_index, element) {
$toToggle.first().append($toggle);
var $element = $(element);
if ($element.hasClass('collapsible-cascade')) {
hide($element, time);
} else if (!$element.hasClass('collapsible-always-show')) {
if (useSlide) {
$element.slideUp(time);
} else {
$element.fadeOut(time);
}
}
});
}
}
}
};
// 显示某个可折叠的元素。
};
var show = function show($collapsible, time) {

var useSlide = $collapsible.hasClass('collapsible-using-slide');
// 隐藏某个可折叠的元素。
var hide = function hide($collapsible, time) {
if ($collapsible.hasClass('collapsible-next')) {
var usesSlide = $collapsible.hasClass("collapsible-using-slide");
var $element = $collapsible.next();
if (useSlide) {
if ($collapsible.hasClass("collapsible-next")) {
var $element1 = $collapsible.next();
$element.slideDown(time);
if (usesSlide) {
} else {
$element1.slideUp(time);
$element.fadeIn(time);
}
} else {
} else {
($collapsible.is('table') ? $collapsible.children().children('tr') : $collapsible.contents()).each(function (_index, element) {
$element1.fadeOut(time);
var $element = $(element);
if ($element.hasClass('collapsible-cascade')) {
show($element, time);
} else if (!$element.hasClass('collapsible-always-show')) {
if (useSlide) {
$element.slideDown(time);
} else {
$element.fadeIn(time);
}
}
});
}
}
} else {
};
var toggle = function toggle($collapsible) {
($collapsible.is("table") ? $collapsible.children().children("tr") : $collapsible.contents()).each(function (_index, element) {
var $element2 = $(element);
var collapsed = $collapsible.hasClass('collapsed');
var duration = Number.parseInt($collapsible.data('collapse-duration')) || 200;
if ($element2.hasClass("collapsible-cascade")) {
hide($element2, time);
if (collapsed) {
} else if (!$element2.hasClass("collapsible-always-show")) {
show($collapsible, duration);
if (usesSlide) {
$collapsible.removeClass('collapsed');
$element2.slideUp(time);
} else {
$element2.fadeOut(time);
}
}
});
}
};

// 显示某个可折叠的元素。
var show = function show($collapsible, time) {
var usesSlide = $collapsible.hasClass("collapsible-using-slide");
if ($collapsible.hasClass("collapsible-next")) {
var $element = $collapsible.next();
if (usesSlide) {
$element.slideDown(time);
} else {
} else {
$element.fadeIn(time);
hide($collapsible, duration);
$collapsible.addClass('collapsed');
}
}
} else {
};
($collapsible.is("table") ? $collapsible.children().children("tr") : $collapsible.contents()).each(function (_index, element) {
$content.find('.parent-collapsible, .parent-collapsible-using-slide, .parent-collapsible-next').each(function (_index, element) {
var $element3 = $(element);
var $element = $(element);
var $parent = $element.parent();
if ($element3.hasClass("collapsible-cascade")) {
var _iterator = _createForOfIteratorHelper(element.classList),
show($element3, time);
_step;
} else if (!$element3.hasClass("collapsible-always-show")) {
if (usesSlide) {
try {
$element3.slideDown(time);
for (_iterator.s(); !(_step = _iterator.n()).done;) {
} else {
var value = _step.value;
$element3.fadeIn(time);
if (value.slice(0, 18) === 'parent-collapsible') {
// The following classes are used here:
// * collapsible
// * collapsible-using-slide
// * collapsible-next
$parent.addClass(value.replace(/^parent-/, ''));
}
}
}
}
});
} catch (err) {
_iterator.e(err);
}
} finally {
};
_iterator.f();
var toggle = function toggle($collapsible) {
var collapsed = $collapsible.hasClass("collapsed");
var duration = parseInt($collapsible.data("collapse-duration")) || 200;
if (collapsed) {
show($collapsible, duration);
$collapsible.removeClass("collapsed");
} else {
hide($collapsible, duration);
$collapsible.addClass("collapsed");
}
};
$wikipageContent.find(".parent-collapsible, .parent-collapsible-using-slide, .parent-collapsible-next").each(function (_index, element) {
var $element = $(element),
$parent = $element.parent();
element.classList.forEach(function (value) {
if (value.slice(0, 18) === "parent-collapsible") {
$parent.addClass(value.replace(/^parent-/, ""));
}
}
});
});
$content.find('.collapsible-using-slide, .collapsible-next').addClass('collapsible');
});
var $collapsibles = $content.find('.collapsible');
$wikipageContent.find(".collapsible-using-slide, .collapsible-next").addClass("collapsible");
if (!$collapsibles.length) {
var $collapsibles = $wikipageContent.find(".collapsible");
return;
if (!$collapsibles.length) {
return;
}
$collapsibles.each(function () {
var $collapsible = $(this);
if ($collapsible.data("made-collapsible")) {
return true;
}
}
$collapsibles.each(function (_index, element) {
var showText = $collapsible.data("expandtext") || "\u5C55".concat(wgULS("开", "開"));
var hideText = $collapsible.data("collapsetext") || "\u6298".concat(wgULS("叠", "疊"));
var $collapsible = $(element);
if ($collapsible.data('made-collapsible')) {
var $toggleLink = $("<a>").addClass("jsLink");
return;
var $toggle = $("<span>").addClass("collapsetoggle").append("[", $toggleLink, "]");
}

var i18nMessages = function i18nMessages() {
// Set the text back to hide if it's not collapsed to begin with
var _i18n = i18n,
if (!$collapsible.hasClass("collapsed")) {
localize = _i18n.localize;
$toggleLink.text(hideText);
} else {
return {
collapse: localize({
$toggleLink.text(showText);
ja: '折り畳み',
}
'zh-hans': '折叠',
appendToggle($collapsible, $toggle);
'zh-hant': '折疊'

}),
// 初始化隐藏所有元素,该过程没有动画。
expand: localize({
if ($collapsible.hasClass("collapsed")) {
ja: '展開',
hide($collapsible, 0);
'zh-hans': '展开',
}
'zh-hant': '展開'
$toggle.on("click", function () {
toggle($collapsible);
})
};
if (!$collapsible.hasClass("collapsed")) {
};
$toggleLink.text(hideText);
} else {
var messages = i18nMessages();
var message = function message(key) {
return messages[key] || key;
};
var showText = $collapsible.data('expandtext') || message('expand');
var hideText = $collapsible.data('collapsetext') || message('collapse');
var $toggleLink = $('<a>').addClass('jsLink');
var $toggle = $('<span>').addClass('collapsetoggle').append('[', $toggleLink, ']');
// Set the text back to hide if it's not collapsed to begin with
if ($collapsible.hasClass('collapsed')) {
$toggleLink.text(showText);
$toggleLink.text(showText);
} else {
$toggleLink.text(hideText);
}
}
appendToggle($collapsible, $toggle);
// 初始化隐藏所有元素,该过程没有动画。
if ($collapsible.hasClass('collapsed')) {
hide($collapsible, 0);
}
$toggle.on('click', function () {
toggle($collapsible);
if ($collapsible.hasClass('collapsed')) {
$toggleLink.text(showText);
} else {
$toggleLink.text(hideText);
}
});
$collapsible.data('made-collapsible', true);
});
});
$collapsible.data("made-collapsible", true);
});
});
});
})();
/* </nowiki> */

2023年5月24日 (三) 23:39的版本

/**
 * SPDX-License-Identifier: CC-BY-SA-4.0
 * _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}'
 *
 * @base <https://zh.wikipedia.org/wiki/MediaWiki:Gadget-NavFrame.js>
 * @source <https://git.qiuwen.wiki/InterfaceAdmin/Gadgets/src/branch/master/src/Gadgets/NavFrame>
 * @dependency ext.gadget.i18n
 */
/**
 * Dynamic Navigation Bars.
 *
 * Based on script from en.wikipedia.org, 2008-09-15.
 *
 * @base <https://www.mediawiki.org/wiki/MediaWiki:Gadget-NavFrame.js>
 * @maintainer Helder.wiki, 2012–2013
 * @maintainer Krinkle, 2013
 * @maintainer Fantasticfears, 2013-2014
 */
/**
 * +--------------------------------------------------------+
 * |         === WARNING: GLOBAL GADGET FILE ===            |
 * +--------------------------------------------------------+
 * |      All changes should be made in the repository,     |
 * |              otherwise they will be lost.              |
 * +--------------------------------------------------------+
 * |        Changes to this page affect many users.         |
 * |  Please discuss changes at Talk page before editing.   |
 * +--------------------------------------------------------+
 */
/* <nowiki> */
'use strict';

/**
 * 用法说明:
 *
 * 带有 collapsible 类的元素默认可折叠。
 * - 对于 navbox,折叠时会保留标题栏,并将折叠按钮添加在标题栏中。
 * - 对于 table,折叠时会保留 caption 或第一行,并将折叠按钮添加在 caption 末尾
 *   或者第一行最后一格末尾。
 * - 对于其他元素,
 *   - 如果其子元素有带有 collapsible-always-show 类,那么除了该子元素之外的各个
 *   子元素都会随折叠隐藏,且折叠按钮添加在该子元素末尾。
 *   - 如果没有子元素带有 collapsible-always-show 类,那么所有子元素都会被折叠,
 *   折叠按钮添加在整个 collapsible 元素的开头,且该按钮不会随折叠隐藏。
 *   - 如果子元素带有 collapsible-cascade 类,那么当折叠时,该元素自身不是隐藏,
 *   而是隐藏其所有的子元素,这些子元素同样可以受 collapsible-always-show 和
 *   collapsible-cascade 类的影响。
 *   - 注意必须是子元素,直接的文本节点不会随折叠隐藏,例如:
 *     <div class="collapsible">123<span>456</span></div>
 *   折叠时,“456”会随折叠隐藏,但“123”不会。
 * - 如果带有 collapsible-using-slide 类,那么折叠时,使用滑动动画而非淡入淡出的
 *   动画。建议当只有一个元素会被隐藏时,才加此类。
 *   - 带有 collapsible-using-slide 类的元素会自动带有 collapsible 类。
 * - 如果带有 collapsible-next 类,那么其折叠的不是其自身的子元素,而是折叠紧随
 *   其后的一个元素。
 *   - 这种情况下,折叠按钮默认附在该 collapsible-next 元素的末尾。
 *   - 带有 collapsible-next 类的元素会自动带有 collapsible 类。
 * - data-collapse-duration 属性可以设置折叠动画的时长,默认为 200 毫秒。
 * - 带有 collapsed 类的元素初始就是已折叠的。
 * - data-expandtext 和 data-collapsetext 可用于控制折叠按钮的显示文字。不支持
 *   繁简转换,但是其默认值是可以正常根据界面语言繁简转换的。
 */
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
(function collapsible() {
  mw.hook('wikipage.content').add(function collapsibleMain($content) {
    // 为元素添加“隐藏”和“显示”的按钮。
    var appendToggle = function appendToggle($collapsible, $toggle) {
      var $appendHere = $collapsible.find('.collapsible-toggle-append-here').not('.collapsible-toggle-appended');
      if ($collapsible.hasClass('collapsible-next')) {
        // 如果有 collapsible-next 类,那么被折叠的元素不在该元素内,此时直接将折叠按钮添加在末尾。
        $collapsible.append($toggle);
      } else if ($appendHere.length > 0) {
        // 带有 collapsible-toggle-append-here 类的元素,如果存在,则无论可折叠元素是什么,则强制将折叠按钮添加至该元素中。
        $appendHere.append($toggle);
        $appendHere.addClass('collapsible-toggle-appended');
        $appendHere.parentsUntil($collapsible).addClass('collapsible-always-show');
      } else if ($collapsible.hasClass('navbox')) {
        // navbox 元素的折叠按钮添加至 navbox-title 中,且该 navbox-title 会避免被折叠影响到。
        $collapsible.children('.navbox-title').first().addClass('collapsible-always-show').append($toggle);
      } else if ($collapsible.is('table')) {
        // 对于 table 对象,尝试添加到 caption 中,如果 caption 不存在,则添加到第一行的最后一列,并将第一行设为始终显示。
        var $caption = $collapsible.children('caption');
        if ($caption.length > 0) {
          // 有caption的情况
          $caption.first().append($toggle);
        } else {
          var $trows = $collapsible.children().children('tr');
          $trows.first().addClass('collapsible-always-show').children().last().append($toggle);
        }
      } else {
        // 尝试查找带有 collapsible-always-show 类的子元素,如果存在则将折叠按钮添加至其中。
        // 否则,添加至整个可折叠元素的最前面。
        var $toToggle = $collapsible.children('.collapsible-always-show');
        if ($toToggle.length > 0) {
          $toToggle.first().append($toggle);
        } else {
          $collapsible.prepend($toggle);
          $toggle.addClass('collapsible-always-show');
        }
      }
    };
    // 隐藏某个可折叠的元素。
    var hide = function hide($collapsible, time) {
      var useSlide = $collapsible.hasClass('collapsible-using-slide');
      if ($collapsible.hasClass('collapsible-next')) {
        var $element = $collapsible.next();
        if (useSlide) {
          $element.slideUp(time);
        } else {
          $element.fadeOut(time);
        }
      } else {
        ($collapsible.is('table') ? $collapsible.children().children('tr') : $collapsible.contents()).each(function (_index, element) {
          var $element = $(element);
          if ($element.hasClass('collapsible-cascade')) {
            hide($element, time);
          } else if (!$element.hasClass('collapsible-always-show')) {
            if (useSlide) {
              $element.slideUp(time);
            } else {
              $element.fadeOut(time);
            }
          }
        });
      }
    };
    // 显示某个可折叠的元素。
    var show = function show($collapsible, time) {
      var useSlide = $collapsible.hasClass('collapsible-using-slide');
      if ($collapsible.hasClass('collapsible-next')) {
        var $element = $collapsible.next();
        if (useSlide) {
          $element.slideDown(time);
        } else {
          $element.fadeIn(time);
        }
      } else {
        ($collapsible.is('table') ? $collapsible.children().children('tr') : $collapsible.contents()).each(function (_index, element) {
          var $element = $(element);
          if ($element.hasClass('collapsible-cascade')) {
            show($element, time);
          } else if (!$element.hasClass('collapsible-always-show')) {
            if (useSlide) {
              $element.slideDown(time);
            } else {
              $element.fadeIn(time);
            }
          }
        });
      }
    };
    var toggle = function toggle($collapsible) {
      var collapsed = $collapsible.hasClass('collapsed');
      var duration = Number.parseInt($collapsible.data('collapse-duration')) || 200;
      if (collapsed) {
        show($collapsible, duration);
        $collapsible.removeClass('collapsed');
      } else {
        hide($collapsible, duration);
        $collapsible.addClass('collapsed');
      }
    };
    $content.find('.parent-collapsible, .parent-collapsible-using-slide, .parent-collapsible-next').each(function (_index, element) {
      var $element = $(element);
      var $parent = $element.parent();
      var _iterator = _createForOfIteratorHelper(element.classList),
        _step;
      try {
        for (_iterator.s(); !(_step = _iterator.n()).done;) {
          var value = _step.value;
          if (value.slice(0, 18) === 'parent-collapsible') {
            // The following classes are used here:
            // * collapsible
            // * collapsible-using-slide
            // * collapsible-next
            $parent.addClass(value.replace(/^parent-/, ''));
          }
        }
      } catch (err) {
        _iterator.e(err);
      } finally {
        _iterator.f();
      }
    });
    $content.find('.collapsible-using-slide, .collapsible-next').addClass('collapsible');
    var $collapsibles = $content.find('.collapsible');
    if (!$collapsibles.length) {
      return;
    }
    $collapsibles.each(function (_index, element) {
      var $collapsible = $(element);
      if ($collapsible.data('made-collapsible')) {
        return;
      }
      var i18nMessages = function i18nMessages() {
        var _i18n = i18n,
          localize = _i18n.localize;
        return {
          collapse: localize({
            ja: '折り畳み',
            'zh-hans': '折叠',
            'zh-hant': '折疊'
          }),
          expand: localize({
            ja: '展開',
            'zh-hans': '展开',
            'zh-hant': '展開'
          })
        };
      };
      var messages = i18nMessages();
      var message = function message(key) {
        return messages[key] || key;
      };
      var showText = $collapsible.data('expandtext') || message('expand');
      var hideText = $collapsible.data('collapsetext') || message('collapse');
      var $toggleLink = $('<a>').addClass('jsLink');
      var $toggle = $('<span>').addClass('collapsetoggle').append('[', $toggleLink, ']');
      // Set the text back to hide if it's not collapsed to begin with
      if ($collapsible.hasClass('collapsed')) {
        $toggleLink.text(showText);
      } else {
        $toggleLink.text(hideText);
      }
      appendToggle($collapsible, $toggle);
      // 初始化隐藏所有元素,该过程没有动画。
      if ($collapsible.hasClass('collapsed')) {
        hide($collapsible, 0);
      }
      $toggle.on('click', function () {
        toggle($collapsible);
        if ($collapsible.hasClass('collapsed')) {
          $toggleLink.text(showText);
        } else {
          $toggleLink.text(hideText);
        }
      });
      $collapsible.data('made-collapsible', true);
    });
  });
})();
/* </nowiki> */