<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://test.zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-PreviewWithVariant2017.js</id>
	<title>MediaWiki:Gadget-PreviewWithVariant2017.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://test.zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-PreviewWithVariant2017.js"/>
	<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-PreviewWithVariant2017.js&amp;action=history"/>
	<updated>2026-07-18T06:13:39Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-PreviewWithVariant2017.js&amp;diff=294&amp;oldid=prev</id>
		<title>鹿野耕云：​创建页面，内容为“/**  * SPDX-License-Identifier: MIT  * _addText: &#039;{{Gadget Header|license=MIT|attribution=Diskdance, et. al.}}&#039;  *  * @base {@link https://zh.wikipedia.org/wiki/MediaWiki:Gadget-PreviewWithVariant2017.js}  * @base {@link https://zh.wikipedia.org/wiki/MediaWiki:Gadget-PreviewWithVariant2017.css}  * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/PreviewWithVariant2017}  * @license MIT {@link https://zh.wikipedia.org/wi…”</title>
		<link rel="alternate" type="text/html" href="https://test.zybkcn.com/w/index.php?title=MediaWiki:Gadget-PreviewWithVariant2017.js&amp;diff=294&amp;oldid=prev"/>
		<updated>2026-06-14T07:26:01Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“/**  * SPDX-License-Identifier: MIT  * _addText: &amp;#039;{{Gadget Header|license=MIT|attribution=Diskdance, et. al.}}&amp;#039;  *  * @base {@link https://zh.wikipedia.org/wiki/MediaWiki:Gadget-PreviewWithVariant2017.js}  * @base {@link https://zh.wikipedia.org/wiki/MediaWiki:Gadget-PreviewWithVariant2017.css}  * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/PreviewWithVariant2017}  * @license MIT {@link https://zh.wikipedia.org/wi…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * SPDX-License-Identifier: MIT&lt;br /&gt;
 * _addText: &amp;#039;{{Gadget Header|license=MIT|attribution=Diskdance, et. al.}}&amp;#039;&lt;br /&gt;
 *&lt;br /&gt;
 * @base {@link https://zh.wikipedia.org/wiki/MediaWiki:Gadget-PreviewWithVariant2017.js}&lt;br /&gt;
 * @base {@link https://zh.wikipedia.org/wiki/MediaWiki:Gadget-PreviewWithVariant2017.css}&lt;br /&gt;
 * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/PreviewWithVariant2017}&lt;br /&gt;
 * @license MIT {@link https://zh.wikipedia.org/wiki/MediaWiki:Gadget-PreviewWithVariant2017.js}&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Copyright Diskdance&lt;br /&gt;
 *&lt;br /&gt;
 * Permission is hereby granted, free of charge, to any person obtaining&lt;br /&gt;
 * a copy of this software and associated documentation files (the&lt;br /&gt;
 * &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including&lt;br /&gt;
 * without limitation the rights to use, copy, modify, merge, publish,&lt;br /&gt;
 * distribute, sublicense, and/or sell copies of the Software, and to&lt;br /&gt;
 * permit persons to whom the Software is furnished to do so, subject to&lt;br /&gt;
 * the following conditions:&lt;br /&gt;
 *&lt;br /&gt;
 * The above copyright notice and this permission notice shall be&lt;br /&gt;
 * included in all copies or substantial portions of the Software.&lt;br /&gt;
 *&lt;br /&gt;
 * THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND,&lt;br /&gt;
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF&lt;br /&gt;
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND&lt;br /&gt;
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE&lt;br /&gt;
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION&lt;br /&gt;
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION&lt;br /&gt;
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * +------------------------------------------------------------+&lt;br /&gt;
 * |            === WARNING: GLOBAL GADGET FILE ===             |&lt;br /&gt;
 * +------------------------------------------------------------+&lt;br /&gt;
 * |       All changes should be made in the repository,        |&lt;br /&gt;
 * |                otherwise they will be lost.                |&lt;br /&gt;
 * +------------------------------------------------------------+&lt;br /&gt;
 * |        Changes to this page may affect many users.         |&lt;br /&gt;
 * | Please discuss changes by opening an issue before editing. |&lt;br /&gt;
 * +------------------------------------------------------------+&lt;br /&gt;
 */&lt;br /&gt;
/* &amp;lt;nowiki&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
(() =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// dist/PreviewWithVariant2017/PreviewWithVariant2017.js&lt;br /&gt;
//! src/PreviewWithVariant2017/PreviewWithVariant2017.ts&lt;br /&gt;
function _createForOfIteratorHelper(r, e) {&lt;br /&gt;
  var t = &amp;quot;undefined&amp;quot; != typeof Symbol &amp;amp;&amp;amp; r[Symbol.iterator] || r[&amp;quot;@@iterator&amp;quot;];&lt;br /&gt;
  if (!t) {&lt;br /&gt;
    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e &amp;amp;&amp;amp; r &amp;amp;&amp;amp; &amp;quot;number&amp;quot; == typeof r.length) {&lt;br /&gt;
      t &amp;amp;&amp;amp; (r = t);&lt;br /&gt;
      var n = 0, F = function() {&lt;br /&gt;
      };&lt;br /&gt;
      return { s: F, n: function() {&lt;br /&gt;
        return n &amp;gt;= r.length ? { done: true } : { done: false, value: r[n++] };&lt;br /&gt;
      }, e: function(r2) {&lt;br /&gt;
        throw r2;&lt;br /&gt;
      }, f: F };&lt;br /&gt;
    }&lt;br /&gt;
    throw new TypeError(&amp;quot;Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  var o, a = true, u = false;&lt;br /&gt;
  return { s: function() {&lt;br /&gt;
    t = t.call(r);&lt;br /&gt;
  }, n: function() {&lt;br /&gt;
    var r2 = t.next();&lt;br /&gt;
    return a = r2.done, r2;&lt;br /&gt;
  }, e: function(r2) {&lt;br /&gt;
    u = true, o = r2;&lt;br /&gt;
  }, f: function() {&lt;br /&gt;
    try {&lt;br /&gt;
      a || null == t.return || t.return();&lt;br /&gt;
    } finally {&lt;br /&gt;
      if (u) throw o;&lt;br /&gt;
    }&lt;br /&gt;
  } };&lt;br /&gt;
}&lt;br /&gt;
function _unsupportedIterableToArray(r, a) {&lt;br /&gt;
  if (r) {&lt;br /&gt;
    if (&amp;quot;string&amp;quot; == typeof r) return _arrayLikeToArray(r, a);&lt;br /&gt;
    var t = {}.toString.call(r).slice(8, -1);&lt;br /&gt;
    return &amp;quot;Object&amp;quot; === t &amp;amp;&amp;amp; r.constructor &amp;amp;&amp;amp; (t = r.constructor.name), &amp;quot;Map&amp;quot; === t || &amp;quot;Set&amp;quot; === t ? Array.from(r) : &amp;quot;Arguments&amp;quot; === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
function _arrayLikeToArray(r, a) {&lt;br /&gt;
  (null == a || a &amp;gt; r.length) &amp;amp;&amp;amp; (a = r.length);&lt;br /&gt;
  for (var e = 0, n = Array(a); e &amp;lt; a; e++) n[e] = r[e];&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
var import_ext_gadget = require(&amp;quot;ext.gadget.Util&amp;quot;);&lt;br /&gt;
//! src/PreviewWithVariant2017/options.json&lt;br /&gt;
var className = &amp;quot;pwv-2017-variant&amp;quot;;&lt;br /&gt;
var configKey = &amp;quot;gadget-PreviewWithVariant2017__Initialized&amp;quot;;&lt;br /&gt;
//! src/PreviewWithVariant2017/modules/constant.ts&lt;br /&gt;
var DATA = [{&lt;br /&gt;
  var: &amp;quot;zh&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
  var: &amp;quot;zh-hans&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh-Hans&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh-hans&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
  var: &amp;quot;zh-hant&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh-Hant&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh-hant&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
  var: &amp;quot;zh-cn&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh-Hans-CN&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh-cn&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
  var: &amp;quot;zh-hk&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh-Hant-HK&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh-hk&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
  var: &amp;quot;zh-mo&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh-Hant-MO&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh-mo&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
  var: &amp;quot;zh-my&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh-Hans-MY&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh-my&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
  var: &amp;quot;zh-sg&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh-Hans-SG&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh-sg&amp;quot;&lt;br /&gt;
}, {&lt;br /&gt;
  var: &amp;quot;zh-tw&amp;quot;,&lt;br /&gt;
  htmlLang: &amp;quot;zh-Hant-TW&amp;quot;,&lt;br /&gt;
  msg: &amp;quot;pwv-2017-zh-tw&amp;quot;&lt;br /&gt;
}];&lt;br /&gt;
//! src/PreviewWithVariant2017/modules/messages.ts&lt;br /&gt;
var PWV2017messages = () =&amp;gt; {&lt;br /&gt;
  mw.messages.set({&lt;br /&gt;
    &amp;quot;pwv-2017-caption&amp;quot;: window.wgULS(&amp;quot;选择语言变体&amp;quot;, &amp;quot;選擇語言變體&amp;quot;),&lt;br /&gt;
    &amp;quot;pwv-2017-zh&amp;quot;: window.wgULS(&amp;quot;不转换&amp;quot;, &amp;quot;不轉換&amp;quot;),&lt;br /&gt;
    &amp;quot;pwv-2017-zh-hans&amp;quot;: &amp;quot;简体&amp;quot;,&lt;br /&gt;
    &amp;quot;pwv-2017-zh-hant&amp;quot;: &amp;quot;繁體&amp;quot;,&lt;br /&gt;
    &amp;quot;pwv-2017-zh-cn&amp;quot;: &amp;quot;中国大陆简体&amp;quot;,&lt;br /&gt;
    &amp;quot;pwv-2017-zh-hk&amp;quot;: &amp;quot;中國香港繁體&amp;quot;,&lt;br /&gt;
    &amp;quot;pwv-2017-zh-mo&amp;quot;: &amp;quot;中國澳門繁體&amp;quot;,&lt;br /&gt;
    &amp;quot;pwv-2017-zh-my&amp;quot;: &amp;quot;马来西亚简体&amp;quot;,&lt;br /&gt;
    &amp;quot;pwv-2017-zh-sg&amp;quot;: &amp;quot;新加坡简体&amp;quot;,&lt;br /&gt;
    &amp;quot;pwv-2017-zh-tw&amp;quot;: &amp;quot;中國臺灣繁體&amp;quot;&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
//! src/PreviewWithVariant2017/modules/processVisualEditor.js&lt;br /&gt;
PWV2017messages();&lt;br /&gt;
var PendingStackLayout = function PendingStackLayout2(config) {&lt;br /&gt;
  PendingStackLayout2.super.call(this, config);&lt;br /&gt;
  OO.ui.mixin.PendingElement.call(this);&lt;br /&gt;
  this.$element.addClass(&amp;quot;pwv-2017-pendingStackLayout&amp;quot;);&lt;br /&gt;
};&lt;br /&gt;
OO.inheritClass(PendingStackLayout, OO.ui.StackLayout);&lt;br /&gt;
OO.mixinClass(PendingStackLayout, OO.ui.mixin.PendingElement);&lt;br /&gt;
var processVisualEditor = ($body) =&amp;gt; {&lt;br /&gt;
  const {&lt;br /&gt;
    skin,&lt;br /&gt;
    wgUserLanguage,&lt;br /&gt;
    wgUserVariant&lt;br /&gt;
  } = mw.config.get();&lt;br /&gt;
  let variant, target, saveDialog, dropdown, stackLayout, panelLayouts, windowManager, errorDialog;&lt;br /&gt;
  const constructDocument = (title, wikitext, categories) =&amp;gt; {&lt;br /&gt;
    const $result = $(&amp;quot;&amp;lt;div&amp;gt;&amp;quot;).addClass(&amp;quot;mw-body mw-body-content&amp;quot;);&lt;br /&gt;
    if (skin === &amp;quot;vector&amp;quot;) {&lt;br /&gt;
      $result.addClass(&amp;quot;vector-body&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    $result.append(&lt;br /&gt;
      $(&amp;quot;&amp;lt;h1&amp;gt;&amp;quot;).addClass(&amp;quot;firstHeading&amp;quot;).html(title),&lt;br /&gt;
      // Classes used here:&lt;br /&gt;
      // * mw-content-ltr&lt;br /&gt;
      // * mw-content-rtl&lt;br /&gt;
      $(&amp;quot;&amp;lt;div&amp;gt;&amp;quot;).addClass(&amp;quot;mw-content-&amp;quot;.concat(mw.config.get(&amp;quot;wgVisualEditor&amp;quot;).pageLanguageDir)).attr(&amp;quot;lang&amp;quot;, DATA.find((item) =&amp;gt; {&lt;br /&gt;
        return item.var === variant;&lt;br /&gt;
      }).htmlLang).html(wikitext),&lt;br /&gt;
      $.parseHTML(categories)&lt;br /&gt;
    );&lt;br /&gt;
    mw.hook(&amp;quot;wikipage.content&amp;quot;).fire($result);&lt;br /&gt;
    ve.targetLinksToNewWindow($result[0]);&lt;br /&gt;
    return $result;&lt;br /&gt;
  };&lt;br /&gt;
  const fetchPreview = () =&amp;gt; {&lt;br /&gt;
    const deferred = $.Deferred();&lt;br /&gt;
    target.getContentApi().post({&lt;br /&gt;
      action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
      disableeditsection: true,&lt;br /&gt;
      errorformat: &amp;quot;html&amp;quot;,&lt;br /&gt;
      errorlang: wgUserLanguage,&lt;br /&gt;
      errorsuselocal: true,&lt;br /&gt;
      formatversion: &amp;quot;2&amp;quot;,&lt;br /&gt;
      prop: [&amp;quot;text&amp;quot;, &amp;quot;indicators&amp;quot;, &amp;quot;displaytitle&amp;quot;, &amp;quot;categorieshtml&amp;quot;, &amp;quot;parsewarningshtml&amp;quot;],&lt;br /&gt;
      pst: true,&lt;br /&gt;
      preview: true,&lt;br /&gt;
      title: target.getPageName(),&lt;br /&gt;
      text: target.getDocToSave(),&lt;br /&gt;
      uselang: wgUserLanguage,&lt;br /&gt;
      variant&lt;br /&gt;
    }).then((response) =&amp;gt; {&lt;br /&gt;
      void deferred.resolve(constructDocument(response.parse.displaytitle, response.parse.text, response.parse.categorieshtml));&lt;br /&gt;
    }, (error, detail) =&amp;gt; {&lt;br /&gt;
      void deferred.reject(detail);&lt;br /&gt;
    });&lt;br /&gt;
    return deferred;&lt;br /&gt;
  };&lt;br /&gt;
  const changeVariant = function changeVariant2(val) {&lt;br /&gt;
    saveDialog.previewPanel.$element[0].focus();&lt;br /&gt;
    variant = val;&lt;br /&gt;
    const targetPanel = stackLayout.findItemFromData(variant);&lt;br /&gt;
    if (targetPanel.$element.children().length) {&lt;br /&gt;
      stackLayout.setItem(targetPanel);&lt;br /&gt;
    } else {&lt;br /&gt;
      stackLayout.pushPending();&lt;br /&gt;
      dropdown.setDisabled(true);&lt;br /&gt;
      void fetchPreview().then(($previewContainer) =&amp;gt; {&lt;br /&gt;
        targetPanel.$element.append($previewContainer);&lt;br /&gt;
        stackLayout.setItem(targetPanel);&lt;br /&gt;
      }, (error) =&amp;gt; {&lt;br /&gt;
        windowManager.openWindow(errorDialog, {&lt;br /&gt;
          title: OO.ui.msg(&amp;quot;ooui-dialog-process-error&amp;quot;),&lt;br /&gt;
          message: window.ve.init.target.getContentApi().getErrorMessage(error),&lt;br /&gt;
          actions: [{&lt;br /&gt;
            action: &amp;quot;reject&amp;quot;,&lt;br /&gt;
            label: OO.ui.deferMsg(&amp;quot;ooui-dialog-message-reject&amp;quot;),&lt;br /&gt;
            flags: &amp;quot;safe&amp;quot;&lt;br /&gt;
          }, {&lt;br /&gt;
            action: &amp;quot;retry&amp;quot;,&lt;br /&gt;
            label: OO.ui.deferMsg(&amp;quot;ooui-dialog-process-retry&amp;quot;),&lt;br /&gt;
            flags: [&amp;quot;primary&amp;quot;, &amp;quot;progressive&amp;quot;]&lt;br /&gt;
          }]&lt;br /&gt;
        }).closed.then((data) =&amp;gt; {&lt;br /&gt;
          if (data &amp;amp;&amp;amp; data.action === &amp;quot;retry&amp;quot;) {&lt;br /&gt;
            changeVariant2(variant);&lt;br /&gt;
          } else {&lt;br /&gt;
            dropdown.setValue(stackLayout.getCurrentItem().getData());&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
      }).always(() =&amp;gt; {&lt;br /&gt;
        stackLayout.popPending();&lt;br /&gt;
        dropdown.setDisabled(false);&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
  const previewWithVariant = () =&amp;gt; {&lt;br /&gt;
    const currentPanel = stackLayout.getCurrentItem();&lt;br /&gt;
    if (currentPanel.$element.children().length) {&lt;br /&gt;
      saveDialog.swapPanel(&amp;quot;preview&amp;quot;);&lt;br /&gt;
      saveDialog.previewPanel.$element.prepend(dropdown.$element);&lt;br /&gt;
    } else {&lt;br /&gt;
      target.emit(&amp;quot;savePreview&amp;quot;);&lt;br /&gt;
      saveDialog.pushPending();&lt;br /&gt;
      void fetchPreview().then(($previewContent) =&amp;gt; {&lt;br /&gt;
        target.getSurface().getModel().getDocument().once(&amp;quot;transact&amp;quot;, () =&amp;gt; {&lt;br /&gt;
          var _iterator = _createForOfIteratorHelper(panelLayouts), _step;&lt;br /&gt;
          try {&lt;br /&gt;
            for (_iterator.s(); !(_step = _iterator.n()).done; ) {&lt;br /&gt;
              const item = _step.value;&lt;br /&gt;
              item.$element.empty();&lt;br /&gt;
            }&lt;br /&gt;
          } catch (err) {&lt;br /&gt;
            _iterator.e(err);&lt;br /&gt;
          } finally {&lt;br /&gt;
            _iterator.f();&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
        saveDialog.swapPanel(&amp;quot;preview&amp;quot;);&lt;br /&gt;
        currentPanel.$element.append($previewContent);&lt;br /&gt;
        stackLayout.setItem(stackLayout.findItemFromData(variant));&lt;br /&gt;
        if (!saveDialog.$element.find(&amp;quot;.&amp;quot;.concat(className)).length) {&lt;br /&gt;
          saveDialog.previewPanel.$element.prepend(dropdown.$element);&lt;br /&gt;
        }&lt;br /&gt;
      }, (error) =&amp;gt; {&lt;br /&gt;
        saveDialog.showErrors(new OO.ui.Error(window.ve.init.target.getContentApi().getErrorMessage(error), {&lt;br /&gt;
          recoverable: true&lt;br /&gt;
        }));&lt;br /&gt;
      }).always(() =&amp;gt; {&lt;br /&gt;
        saveDialog.popPending();&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
  const init = () =&amp;gt; {&lt;br /&gt;
    variant = wgUserVariant;&lt;br /&gt;
    ({&lt;br /&gt;
      target&lt;br /&gt;
    } = window.ve.init);&lt;br /&gt;
    ({&lt;br /&gt;
      saveDialog&lt;br /&gt;
    } = target);&lt;br /&gt;
    dropdown = new OO.ui.DropdownInputWidget({&lt;br /&gt;
      $overlay: saveDialog.$overlay,&lt;br /&gt;
      classes: [className],&lt;br /&gt;
      options: [{&lt;br /&gt;
        optgroup: mw.message(&amp;quot;pwv-2017-caption&amp;quot;).parse()&lt;br /&gt;
      }, ...DATA.map((item) =&amp;gt; {&lt;br /&gt;
        return {&lt;br /&gt;
          data: item.var,&lt;br /&gt;
          label: mw.message(item.msg).parse()&lt;br /&gt;
        };&lt;br /&gt;
      })],&lt;br /&gt;
      value: variant&lt;br /&gt;
    });&lt;br /&gt;
    dropdown.on(&amp;quot;change&amp;quot;, changeVariant);&lt;br /&gt;
    panelLayouts = DATA.map((item) =&amp;gt; {&lt;br /&gt;
      return new OO.ui.PanelLayout({&lt;br /&gt;
        expanded: false,&lt;br /&gt;
        data: item.var&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
    stackLayout = new PendingStackLayout({&lt;br /&gt;
      expanded: false,&lt;br /&gt;
      items: panelLayouts&lt;br /&gt;
    });&lt;br /&gt;
    stackLayout.setItem(stackLayout.findItemFromData(variant));&lt;br /&gt;
    saveDialog.previewPanel.$element.append(stackLayout.$element);&lt;br /&gt;
    errorDialog = new OO.ui.MessageDialog();&lt;br /&gt;
    windowManager = new OO.ui.WindowManager();&lt;br /&gt;
    windowManager.addWindows([errorDialog]);&lt;br /&gt;
    $body.append(windowManager.$element);&lt;br /&gt;
    const handlerToRemove = &amp;quot;onSaveDialogPreview&amp;quot;;&lt;br /&gt;
    saveDialog.off(&amp;quot;preview&amp;quot;, handlerToRemove, target).on(&amp;quot;preview&amp;quot;, previewWithVariant);&lt;br /&gt;
    mw.hook(&amp;quot;ve.activationComplete&amp;quot;).add(() =&amp;gt; {&lt;br /&gt;
      if (mw.config.get(configKey)) {&lt;br /&gt;
        mw.config.set(configKey, false);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  };&lt;br /&gt;
  if (!mw.config.get(configKey)) {&lt;br /&gt;
    init();&lt;br /&gt;
    mw.config.set(configKey, true);&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
//! src/PreviewWithVariant2017/PreviewWithVariant2017.ts&lt;br /&gt;
void (0, import_ext_gadget.getBody)().then(function previewWithVariants2017($body) {&lt;br /&gt;
  mw.hook(&amp;quot;ve.saveDialog.stateChanged&amp;quot;).add(() =&amp;gt; {&lt;br /&gt;
    processVisualEditor($body);&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/nowiki&amp;gt; */&lt;/div&gt;</summary>
		<author><name>鹿野耕云</name></author>
	</entry>
</feed>