<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-SettingsUI.js</id>
	<title>MediaWiki:Gadget-SettingsUI.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://zybkcn.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-SettingsUI.js"/>
	<link rel="alternate" type="text/html" href="https://zybkcn.com/w/index.php?title=MediaWiki:Gadget-SettingsUI.js&amp;action=history"/>
	<updated>2026-06-13T18:23:51Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://zybkcn.com/w/index.php?title=MediaWiki:Gadget-SettingsUI.js&amp;diff=26295&amp;oldid=prev</id>
		<title>入我相思门：​创建页面，内容为“/**  * Localization required. &lt;span class=&quot;signature signature_252699&quot;&gt;Liangent（留言）&lt;/span&gt; 2013年4月8日 (一) 10:20 (UTC)  *  * Simple user interface for managing settings  * This script only cares for the user interface.  * It remains your task to save the settings   * e.g. using &#039;ext.gadget.SettingsManager&#039; or &#039;jquery.jStorage&#039; or &#039;jquery.cookie&#039;  *  * @rev 1 (2012-09-19)  * @author Rillke, 2012  * @license…”</title>
		<link rel="alternate" type="text/html" href="https://zybkcn.com/w/index.php?title=MediaWiki:Gadget-SettingsUI.js&amp;diff=26295&amp;oldid=prev"/>
		<updated>2022-12-05T11:22:52Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“/**  * Localization required. &amp;lt;span class=&amp;quot;signature signature_252699&amp;quot;&amp;gt;&lt;a href=&quot;/w/index.php?title=User:Liangent&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Liangent（页面不存在）&quot;&gt;Liangent&lt;/a&gt;（&lt;a href=&quot;/w/index.php?title=User_talk:Liangent&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Liangent（页面不存在）&quot;&gt;留言&lt;/a&gt;）&amp;lt;/span&amp;gt; 2013年4月8日 (一) 10:20 (UTC)  *  * Simple user interface for managing settings  * This script only cares for the user interface.  * It remains your task to save the settings   * e.g. using &amp;#039;ext.gadget.SettingsManager&amp;#039; or &amp;#039;jquery.jStorage&amp;#039; or &amp;#039;jquery.cookie&amp;#039;  *  * @rev 1 (2012-09-19)  * @author Rillke, 2012  * @license…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Localization required. &amp;lt;span class=&amp;quot;signature signature_252699&amp;quot;&amp;gt;[[User:Liangent|Liangent]]（[[User talk:Liangent|留言]]）&amp;lt;/span&amp;gt; 2013年4月8日 (一) 10:20 (UTC)&lt;br /&gt;
 *&lt;br /&gt;
 * Simple user interface for managing settings&lt;br /&gt;
 * This script only cares for the user interface.&lt;br /&gt;
 * It remains your task to save the settings &lt;br /&gt;
 * e.g. using &amp;#039;ext.gadget.SettingsManager&amp;#039; or &amp;#039;jquery.jStorage&amp;#039; or &amp;#039;jquery.cookie&amp;#039;&lt;br /&gt;
 *&lt;br /&gt;
 * @rev 1 (2012-09-19)&lt;br /&gt;
 * @author Rillke, 2012&lt;br /&gt;
 * @license This software is quadruple-licensed under GFDL, LGPL, GPL and CC-By-SA 3.0&lt;br /&gt;
 * Choose the license(s) you like best&lt;br /&gt;
 *&lt;br /&gt;
 * Usage instructions: See &amp;quot;smMembers = {&amp;quot;&lt;br /&gt;
 */&lt;br /&gt;
// List the global variables for jsHint-Validation. Please make sure that it passes http://jshint.com/&lt;br /&gt;
// Scheme: globalVariable:allowOverwriting[, globalVariable:allowOverwriting][, globalVariable:allowOverwriting]&lt;br /&gt;
/*global jQuery:false, mediaWiki:false*/&lt;br /&gt;
 &lt;br /&gt;
// Set jsHint-options. You should not set forin or undef to false if your script does not validate.&lt;br /&gt;
/*jshint forin:true, noarg:true, noempty:true, eqeqeq:true, bitwise:true, strict:true, undef:true, curly:false, browser:true*/&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
( function ( $, mw, undefined ) {&lt;br /&gt;
&amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
/********************************&lt;br /&gt;
**&lt;br /&gt;
** Translation&lt;br /&gt;
**&lt;br /&gt;
********************************/&lt;br /&gt;
mw.messages.set({&lt;br /&gt;
	&amp;#039;sui-button-save&amp;#039;:                   &amp;quot;OK&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-button-save-page&amp;#039;:              &amp;quot;Temporarily on this page only&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-button-save-account-publicly&amp;#039;:  &amp;quot;Publicly visible into your account&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-button-save-account-private&amp;#039;:   &amp;quot;Into your account (private memory)&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-button-save-browser&amp;#039;:           &amp;quot;Into your browser (local storage)&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-button-save-cookie&amp;#039;:            &amp;quot;Into your browser (a cookie)&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-button-cancel&amp;#039;:                 &amp;quot;Cancel&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-button-defaults&amp;#039;:               &amp;quot;Fill-in defaults&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-title&amp;#039;:                         &amp;quot;Preferences for $1&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-intro&amp;#039;:                         &amp;quot;Customise $1 according to your wishes&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-save-location&amp;#039;:                 &amp;quot;Where would you like to save the configuration for $1?&amp;quot;,&lt;br /&gt;
	&amp;#039;sui-save-location-title&amp;#039;:           &amp;quot;Location to store the preferences&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
 &lt;br /&gt;
var smMembers, smPrivate, nOEvents = &amp;#039;input.numbersOnly keyup.numbersOnly&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$(&amp;#039;.numbersOnly&amp;#039;).off(nOEvents).on(nOEvents, function () {&lt;br /&gt;
	var oldVal = this.value,&lt;br /&gt;
		newVal = oldVal.replace(/[^0-9]/g,&amp;#039;&amp;#039;);&lt;br /&gt;
	if (oldVal !== newVal) this.value = newVal;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function SUI(settings, tool, saveoptions, title, intro) {&lt;br /&gt;
	// Invoked as a constructor&lt;br /&gt;
	if (this.settings) {&lt;br /&gt;
		if (settings) this.settings = settings;&lt;br /&gt;
		if (tool) this.tool = tool;&lt;br /&gt;
		if (saveoptions) this.saveoptions = saveoptions;&lt;br /&gt;
		if (title) this.title = title;&lt;br /&gt;
		if (intro) this.intro = intro;&lt;br /&gt;
		return this;&lt;br /&gt;
	// Invoked as a function&lt;br /&gt;
	} else {&lt;br /&gt;
		return new SUI(settings, tool, saveoptions, title, intro);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
smPrivate = {&lt;br /&gt;
	getObjLen: function(obj) {&lt;br /&gt;
		var i = 0;&lt;br /&gt;
		for (var elem in obj) {&lt;br /&gt;
			if (obj.hasOwnProperty(elem)) i++;&lt;br /&gt;
		}&lt;br /&gt;
		return i;&lt;br /&gt;
	},&lt;br /&gt;
	each: function(obj, cb) {&lt;br /&gt;
		var i = 0;&lt;br /&gt;
		for (var elem in obj) {&lt;br /&gt;
			if (obj.hasOwnProperty(elem)) {&lt;br /&gt;
				if (false === cb(i, elem, obj[elem])) break;&lt;br /&gt;
				i++;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return obj;&lt;br /&gt;
	},&lt;br /&gt;
	$objToSelect: function(obj) {&lt;br /&gt;
		var $sel = $(&amp;#039;&amp;lt;select&amp;gt;&amp;#039;);&lt;br /&gt;
		&lt;br /&gt;
		this.each(obj, function(i, k, v) {&lt;br /&gt;
			$(&amp;#039;&amp;lt;option&amp;gt;&amp;#039;).attr({&lt;br /&gt;
				value: v&lt;br /&gt;
			}).text(k).appendTo($sel);&lt;br /&gt;
		});&lt;br /&gt;
		return $sel;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
smMembers = {&lt;br /&gt;
	constructor: SUI,&lt;br /&gt;
	version: &amp;#039;0.0.1.0&amp;#039;,&lt;br /&gt;
	&lt;br /&gt;
	// * - required&lt;br /&gt;
	//&lt;br /&gt;
	// An array of settings-objects. A settings-object consists of&lt;br /&gt;
	// label*, value, select (in case you wish a select, pass an object with caption-value-pairs OR a function that creats a select),&lt;br /&gt;
	// name* (must be also valid for a HTML id attribute), min, max, default*&lt;br /&gt;
	// e.g. { label: &amp;quot;A sample property description&amp;quot;, value: 1, name: &amp;#039;sample_property&amp;#039;, min:0, max:100 }&lt;br /&gt;
	settings: {},&lt;br /&gt;
	&lt;br /&gt;
	// * The tool&amp;#039;s name that makes use of settings-UI&lt;br /&gt;
	tool: &amp;#039;&amp;#039;,&lt;br /&gt;
	&lt;br /&gt;
	// Which options to show (c.f. &amp;quot;sui-button-save-&amp;quot; at mw.messages.set)&lt;br /&gt;
	saveoptions: [&amp;#039;page&amp;#039;, &amp;#039;account-publicly&amp;#039;],&lt;br /&gt;
	&lt;br /&gt;
	// Title of the settings-UI&lt;br /&gt;
	title: &amp;quot;&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	// Introductory text on top of the settings&lt;br /&gt;
	intro: &amp;quot;&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	* Show a dialog that contains controls for adjusting settings.&lt;br /&gt;
	*&lt;br /&gt;
	* @example&lt;br /&gt;
	*  window.mw.libs&lt;br /&gt;
		.SettingsUI([&lt;br /&gt;
			{ label: &amp;quot;A test setting label&amp;quot;, value: 5, name: &amp;#039;optionName&amp;#039;, min:0, max:100, default: 0 },&lt;br /&gt;
			{ label: &amp;quot;A second label&amp;quot;, value: &amp;quot;cba&amp;quot;, name: &amp;#039;collatingOrder&amp;#039;, select: { &amp;quot;Ascending&amp;quot;: &amp;#039;abc&amp;#039;, &amp;quot;Descending&amp;quot;: &amp;#039;cba&amp;#039; }, default: &amp;quot;abc&amp;quot; }&lt;br /&gt;
		], &amp;quot;MyTool&amp;quot;)&lt;br /&gt;
		.show().progress(__myProgressCallback).done(function() { console.log(&amp;quot;Selected&amp;gt; DONE!&amp;quot;) });&lt;br /&gt;
	*&lt;br /&gt;
	* @context {window.mw.libs.SettingsUI}&lt;br /&gt;
	*&lt;br /&gt;
	* @return {Object} jQuery Deferred object (http://api.jquery.com/category/deferred-object/)&lt;br /&gt;
	*/&lt;br /&gt;
	show: function() {&lt;br /&gt;
		var sui = this,&lt;br /&gt;
			$progress = new $.Deferred();&lt;br /&gt;
			&lt;br /&gt;
		mw.loader.using([&lt;br /&gt;
			&amp;#039;jquery.ui&amp;#039;, &lt;br /&gt;
			&amp;#039;mediawiki.user&amp;#039;,&lt;br /&gt;
			&amp;#039;ext.gadget.libJQuery&amp;#039;&lt;br /&gt;
		], function() {&lt;br /&gt;
			sui._show($progress);&lt;br /&gt;
		});&lt;br /&gt;
		return $progress;&lt;br /&gt;
	},&lt;br /&gt;
	_show: function($progress) {&lt;br /&gt;
		var sui = this,&lt;br /&gt;
			$dlg,&lt;br /&gt;
			$saveButton;&lt;br /&gt;
		&lt;br /&gt;
		$dlg = sui.$dlg = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).attr({&lt;br /&gt;
			id: &amp;#039;sui_&amp;#039; + sui.tool,&lt;br /&gt;
			title: sui.title || sui._msg(&amp;#039;title&amp;#039;)&lt;br /&gt;
		});&lt;br /&gt;
		$(&amp;#039;&amp;lt;p&amp;gt;&amp;#039;).attr(&amp;#039;class&amp;#039;, &amp;#039;sui-intro&amp;#039;).text(sui.intro || sui._msg(&amp;#039;intro&amp;#039;)).appendTo($dlg);&lt;br /&gt;
		$dlg.$c = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).css(&amp;#039;padding&amp;#039;, &amp;#039;3px&amp;#039;).appendTo($dlg);&lt;br /&gt;
		&lt;br /&gt;
		smPrivate.each(sui.settings, function(i, c, s) {&lt;br /&gt;
			var $sDiv = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;, { id: &amp;#039;sui_cfg_&amp;#039; + s.name + &amp;#039;_wrap&amp;#039; }).data(&amp;#039;cfg&amp;#039;, s),&lt;br /&gt;
				vl = s.value,&lt;br /&gt;
				id = &amp;#039;sui_cfg_&amp;#039; + s.name,&lt;br /&gt;
				$label, $valEl, $valEl2;&lt;br /&gt;
		&lt;br /&gt;
			$label = $(&amp;#039;&amp;lt;label&amp;gt;&amp;#039;).attr({ &amp;#039;for&amp;#039;: id }).text(s.label).appendTo($sDiv);&lt;br /&gt;
			$(&amp;#039;&amp;lt;br&amp;gt;&amp;#039;).appendTo($sDiv);&lt;br /&gt;
		&lt;br /&gt;
			switch (typeof s[&amp;#039;default&amp;#039;]) {&lt;br /&gt;
				case &amp;#039;number&amp;#039;: &lt;br /&gt;
					$valEl = $(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;).attr({ type: &amp;#039;text&amp;#039;, size: (s.max+&amp;#039;&amp;#039;).length, id: id, &amp;#039;class&amp;#039;: &amp;#039;numbersOnly&amp;#039; })&lt;br /&gt;
						.focus(function() { $(this).select(); })&lt;br /&gt;
						.keyup(function(e) {&lt;br /&gt;
							var val = this.value = this.value.replace(/[^0-9]/g,&amp;#039;&amp;#039;);&lt;br /&gt;
							if (val) {&lt;br /&gt;
								if (val &amp;gt; s.max) {&lt;br /&gt;
									this.value = s.max;&lt;br /&gt;
								} else if (val &amp;lt; s.min) {&lt;br /&gt;
									this.value = s.min;&lt;br /&gt;
								}&lt;br /&gt;
								$valEl2.slider(&amp;#039;option&amp;#039;, &amp;#039;value&amp;#039;, this.value);&lt;br /&gt;
							}&lt;br /&gt;
						}).val(vl).appendTo($sDiv);&lt;br /&gt;
					$valEl2 = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;, { style: &amp;#039;margin-top:5px; margin-bottom:5px;&amp;#039; }).slider({&lt;br /&gt;
						min: s.min,&lt;br /&gt;
						max: s.max,&lt;br /&gt;
						value: vl,&lt;br /&gt;
						change: function(e, ui) {&lt;br /&gt;
							$valEl.val( ui.value );&lt;br /&gt;
						},&lt;br /&gt;
						slide: function(e, ui) {&lt;br /&gt;
							$valEl.val( ui.value );&lt;br /&gt;
						}&lt;br /&gt;
					}).appendTo($sDiv);&lt;br /&gt;
					break;&lt;br /&gt;
				case &amp;#039;string&amp;#039;:&lt;br /&gt;
					if (&amp;#039;function&amp;#039; === typeof s.select) {&lt;br /&gt;
						$sDiv.append(s.select().attr(&amp;#039;id&amp;#039;, id).val(vl));&lt;br /&gt;
					} else if (&amp;#039;object&amp;#039; === typeof s.select) {&lt;br /&gt;
						$sDiv.append(smPrivate.$objToSelect(s.select).attr(&amp;#039;id&amp;#039;, id).val(vl));&lt;br /&gt;
					} else {&lt;br /&gt;
						$(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, { type: &amp;#039;text&amp;#039;, id: id, style: &amp;#039;width:99%&amp;#039; }).val(vl).appendTo($sDiv);&lt;br /&gt;
					}&lt;br /&gt;
					break;&lt;br /&gt;
				case &amp;#039;boolean&amp;#039;:&lt;br /&gt;
					$valEl = $(&amp;#039;&amp;lt;input&amp;gt;&amp;#039;, { type: &amp;#039;checkbox&amp;#039;, id: id }).appendTo($sDiv);&lt;br /&gt;
					if (vl) $valEl[0].checked = true;&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			$sDiv.find(&amp;#039;input,select&amp;#039;).keyup(function(e) {&lt;br /&gt;
				if (13 === Number(e.which)) {&lt;br /&gt;
					$saveButton.click();&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
			$sDiv.append(&amp;#039;&amp;lt;hr/&amp;gt;&amp;#039;, &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;).appendTo($dlg.$c);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		var btns = {},&lt;br /&gt;
			_saveSelectionDlg,&lt;br /&gt;
			_onSave;&lt;br /&gt;
			&lt;br /&gt;
		_onSave = function($el) {&lt;br /&gt;
			var loc = $el.data(&amp;#039;loc&amp;#039;);&lt;br /&gt;
				&lt;br /&gt;
			smPrivate.each(sui.settings, function(i, c, s) {&lt;br /&gt;
				var val,&lt;br /&gt;
					name = s.name,&lt;br /&gt;
					id = &amp;#039;#sui_cfg_&amp;#039; + name,&lt;br /&gt;
					$ctrl = $(id);&lt;br /&gt;
					&lt;br /&gt;
				if (&amp;#039;boolean&amp;#039; === typeof s[&amp;#039;default&amp;#039;]) {&lt;br /&gt;
					val = $ctrl[0].checked;&lt;br /&gt;
				} else if (&amp;#039;number&amp;#039; === typeof s[&amp;#039;default&amp;#039;]) {&lt;br /&gt;
					val = Number($ctrl.val());&lt;br /&gt;
				} else {&lt;br /&gt;
					val = $ctrl.val();&lt;br /&gt;
				}&lt;br /&gt;
				s.value = val;&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			$progress.resolve( &amp;quot;save&amp;quot;, &amp;quot;User selected save location.&amp;quot;, loc, sui.settings, $dlg );&lt;br /&gt;
		};&lt;br /&gt;
		_saveSelectionDlg = function() {&lt;br /&gt;
			var $saveDlg = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).append($(&amp;#039;&amp;lt;p&amp;gt;&amp;#039;).text(sui._msg(&amp;#039;save-location&amp;#039;))),&lt;br /&gt;
				$btnOuter = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).attr({&lt;br /&gt;
					&amp;#039;class&amp;#039;: &amp;#039;sui-cfg-saveselect-buttons&amp;#039;&lt;br /&gt;
				}).appendTo($saveDlg),&lt;br /&gt;
				$btnInner;&lt;br /&gt;
			&lt;br /&gt;
			smPrivate.each(sui.saveoptions, function(i, c, o) {&lt;br /&gt;
				if (o.indexOf(&amp;#039;account&amp;#039;) &amp;gt; 0 &amp;amp;&amp;amp; mw.user.isAnon()) return;&lt;br /&gt;
				&lt;br /&gt;
				var $btnInner = $(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;).css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;).appendTo($btnOuter);&lt;br /&gt;
				&lt;br /&gt;
				$(&amp;#039;&amp;lt;button&amp;gt;&amp;#039;, { role: &amp;#039;button&amp;#039;, &amp;#039;class&amp;#039;: &amp;#039;ui-button-large&amp;#039;, data: { loc: o } })&lt;br /&gt;
					.text(sui._msg(&amp;#039;button-save-&amp;#039; + o))&lt;br /&gt;
					.click(function() {&lt;br /&gt;
						// First resolve the Deferred&lt;br /&gt;
						_onSave($(this));&lt;br /&gt;
						// Then, close the dialog&lt;br /&gt;
						$saveDlg.dialog(&amp;#039;close&amp;#039;);&lt;br /&gt;
						&lt;br /&gt;
					})&lt;br /&gt;
					.button()&lt;br /&gt;
					.appendTo($btnInner);&lt;br /&gt;
			});&lt;br /&gt;
			$saveDlg.dialog({&lt;br /&gt;
				title: sui._msg(&amp;#039;save-location-title&amp;#039;),&lt;br /&gt;
				modal: true,&lt;br /&gt;
				width: Math.min(670, $(window).width()),&lt;br /&gt;
				close: function () {&lt;br /&gt;
					$(this).remove();&lt;br /&gt;
					$progress.reject( &amp;quot;usercanceled&amp;quot;, &amp;quot;User canceled.&amp;quot; );&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			$progress.notify( &amp;quot;savedlg&amp;quot;, &amp;quot;Save location select.&amp;quot;, $dlg );&lt;br /&gt;
		};&lt;br /&gt;
			&lt;br /&gt;
		btns[sui._msg(&amp;#039;button-save&amp;#039;)] = _saveSelectionDlg;&lt;br /&gt;
		btns[sui._msg(&amp;#039;button-cancel&amp;#039;)] = function() {&lt;br /&gt;
			$(this).dialog(&amp;#039;close&amp;#039;);&lt;br /&gt;
		};&lt;br /&gt;
		btns[sui._msg(&amp;#039;button-defaults&amp;#039;)] = function() {&lt;br /&gt;
			smPrivate.each(sui.settings, function(i, c, s) {&lt;br /&gt;
				var $ctr = $(&amp;#039;#sui_cfg_&amp;#039;+s.name);&lt;br /&gt;
				if (&amp;#039;boolean&amp;#039; === typeof s[&amp;#039;default&amp;#039;]) {&lt;br /&gt;
					$ctr[0].checked = s[&amp;#039;default&amp;#039;];&lt;br /&gt;
				} else {&lt;br /&gt;
					$ctr.val(s[&amp;#039;default&amp;#039;]);&lt;br /&gt;
				}&lt;br /&gt;
				$ctr.keyup();&lt;br /&gt;
			});&lt;br /&gt;
			$progress.notify( &amp;quot;defaultsin&amp;quot;, &amp;quot;Defaults set.&amp;quot;, $dlg );&lt;br /&gt;
		};&lt;br /&gt;
		$dlg.dialog({&lt;br /&gt;
			modal: true,&lt;br /&gt;
			resizable: false,&lt;br /&gt;
			width: Math.min(670, $(window).width()),&lt;br /&gt;
			close: function () {&lt;br /&gt;
				$(this).remove();&lt;br /&gt;
				$progress.reject( &amp;quot;usercanceled&amp;quot;, &amp;quot;User canceled.&amp;quot; );&lt;br /&gt;
			},&lt;br /&gt;
			buttons: btns,&lt;br /&gt;
			open: function() {&lt;br /&gt;
				var $dlg = $(this),&lt;br /&gt;
					$parent = $dlg.dialog(&amp;#039;widget&amp;#039;),&lt;br /&gt;
					$buttons = $parent.find(&amp;#039;.ui-dialog-buttonpane button&amp;#039;);&lt;br /&gt;
				$saveButton = $buttons.eq(0).specialButton(&amp;#039;proceed&amp;#039;);&lt;br /&gt;
				$buttons.eq(1).specialButton(&amp;#039;cancel&amp;#039;);&lt;br /&gt;
				$buttons.eq(2).button({ icons: { primary: &amp;#039;ui-icon-refresh&amp;#039; } });&lt;br /&gt;
				$dlg.dialog(&amp;#039;option&amp;#039;, &amp;#039;height&amp;#039;, Math.min($parent.height(), $(window).height()));&lt;br /&gt;
				if ($(window).scrollTop() &amp;gt; $parent.position().top) $dlg.dialog(&amp;#039;option&amp;#039;, &amp;#039;position&amp;#039;, &amp;#039;top&amp;#039;);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		$progress.notify( &amp;quot;dlgup&amp;quot;, &amp;quot;Dialog created.&amp;quot;, $dlg );&lt;br /&gt;
	},&lt;br /&gt;
	hide: function() {&lt;br /&gt;
		// TODO: Implement&lt;br /&gt;
	},&lt;br /&gt;
	_msg: function(key) {&lt;br /&gt;
		var args = Array.prototype.slice.call(arguments, 0);&lt;br /&gt;
		args[0] = &amp;#039;sui-&amp;#039; + args[0];&lt;br /&gt;
		args[args.length] = this.tool;&lt;br /&gt;
		return mw.message.apply(this, args).parse();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
// Add members to prototype&lt;br /&gt;
SUI.fn = SUI.prototype = smMembers;&lt;br /&gt;
 &lt;br /&gt;
// Expose globally&lt;br /&gt;
window.mw.libs.SettingsUI = SUI;&lt;br /&gt;
&lt;br /&gt;
}( jQuery, mediaWiki ));&lt;/div&gt;</summary>
		<author><name>入我相思门</name></author>
	</entry>
</feed>