<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
	<id>https://chuihub.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Gallery.js</id>
	<title>MediaWiki:Gadget-Gallery.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://chuihub.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Gallery.js"/>
	<link rel="alternate" type="text/html" href="https://chuihub.com/index.php?title=MediaWiki:Gadget-Gallery.js&amp;action=history"/>
	<updated>2026-04-28T03:35:09Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://chuihub.com/index.php?title=MediaWiki:Gadget-Gallery.js&amp;diff=411&amp;oldid=prev</id>
		<title>LocalAdmin：​Clarify multiple-upload support in UI text</title>
		<link rel="alternate" type="text/html" href="https://chuihub.com/index.php?title=MediaWiki:Gadget-Gallery.js&amp;diff=411&amp;oldid=prev"/>
		<updated>2026-03-12T13:19:00Z</updated>

		<summary type="html">&lt;p&gt;Clarify multiple-upload support in UI text&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年3月12日 (四) 13:19的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l127&quot;&gt;第127行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第127行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &amp;#039;  &amp;lt;div class=&amp;quot;gal-drop-inner&amp;quot;&amp;gt;&amp;#039; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &amp;#039;  &amp;lt;div class=&amp;quot;gal-drop-inner&amp;quot;&amp;gt;&amp;#039; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &amp;#039;    &amp;lt;span class=&amp;quot;gal-drop-icon&amp;quot;&amp;gt;📷&amp;lt;/span&amp;gt;&amp;#039; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &amp;#039;    &amp;lt;span class=&amp;quot;gal-drop-icon&amp;quot;&amp;gt;📷&amp;lt;/span&amp;gt;&amp;#039; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &#039;    &amp;lt;p&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;将图片拖放至此上传&lt;/del&gt;&amp;lt;/p&amp;gt;&#039; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &#039;    &amp;lt;p&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;将图片拖放至此上传（支持同时拖入多张）&lt;/ins&gt;&amp;lt;/p&amp;gt;&#039; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &#039;    &amp;lt;p class=&quot;gal-drop-sub&quot;&amp;gt;或 &amp;lt;label class=&quot;gal-browse&quot;&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;点击选择文件&lt;/del&gt;&#039; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &#039;    &amp;lt;p class=&quot;gal-drop-sub&quot;&amp;gt;或 &amp;lt;label class=&quot;gal-browse&quot;&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;点击选择文件（可多选）&lt;/ins&gt;&#039; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &#039;      &amp;lt;input type=&quot;file&quot; id=&quot;gal-file-input&quot; multiple accept=&quot;image/*&quot;&amp;gt;&#039; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &#039;      &amp;lt;input type=&quot;file&quot; id=&quot;gal-file-input&quot; multiple accept=&quot;image/*&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; style=&quot;display:none&lt;/ins&gt;&quot;&amp;gt;&#039; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &amp;#039;    &amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&amp;#039; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &amp;#039;    &amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&amp;#039; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &amp;#039;  &amp;lt;/div&amp;gt;&amp;#039; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                   &amp;#039;  &amp;lt;/div&amp;gt;&amp;#039; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key chuihub-egdr_:diff:1.41:old-409:rev-411:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>LocalAdmin</name></author>
	</entry>
	<entry>
		<id>https://chuihub.com/index.php?title=MediaWiki:Gadget-Gallery.js&amp;diff=409&amp;oldid=prev</id>
		<title>LocalAdmin：​Auto-rename on duplicate filename instead of overwriting</title>
		<link rel="alternate" type="text/html" href="https://chuihub.com/index.php?title=MediaWiki:Gadget-Gallery.js&amp;diff=409&amp;oldid=prev"/>
		<updated>2026-03-12T13:13:59Z</updated>

		<summary type="html">&lt;p&gt;Auto-rename on duplicate filename instead of overwriting&lt;/p&gt;
&lt;a href=&quot;https://chuihub.com/index.php?title=MediaWiki:Gadget-Gallery.js&amp;amp;diff=409&amp;amp;oldid=401&quot;&gt;显示更改&lt;/a&gt;</summary>
		<author><name>LocalAdmin</name></author>
	</entry>
	<entry>
		<id>https://chuihub.com/index.php?title=MediaWiki:Gadget-Gallery.js&amp;diff=401&amp;oldid=prev</id>
		<title>LocalAdmin：​Create Instagram-style gallery gadget</title>
		<link rel="alternate" type="text/html" href="https://chuihub.com/index.php?title=MediaWiki:Gadget-Gallery.js&amp;diff=401&amp;oldid=prev"/>
		<updated>2026-03-12T13:04:58Z</updated>

		<summary type="html">&lt;p&gt;Create Instagram-style gallery gadget&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Gallery gadget — Instagram-style image gallery with drag-and-drop upload.&lt;br /&gt;
 * Powers the full 图库 page and the homepage mini-widget.&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
    &amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    var CAT       = &amp;#039;Category:图库&amp;#039;;&lt;br /&gt;
    var PAGE_NAME = &amp;#039;图库&amp;#039;;&lt;br /&gt;
    var api       = new mw.Api();&lt;br /&gt;
&lt;br /&gt;
    /* ── Fetch images from the 图库 category ─────────────────────── */&lt;br /&gt;
    function fetchImages( limit, cb ) {&lt;br /&gt;
        api.get( {&lt;br /&gt;
            action: &amp;#039;query&amp;#039;,&lt;br /&gt;
            generator: &amp;#039;categorymembers&amp;#039;,&lt;br /&gt;
            gcmtitle: CAT, gcmtype: &amp;#039;file&amp;#039;,&lt;br /&gt;
            gcmlimit: limit, gcmsort: &amp;#039;timestamp&amp;#039;, gcmdir: &amp;#039;descending&amp;#039;,&lt;br /&gt;
            prop: &amp;#039;imageinfo&amp;#039;,&lt;br /&gt;
            iiprop: &amp;#039;url|dimensions|timestamp&amp;#039;,&lt;br /&gt;
            iiurlwidth: 400,&lt;br /&gt;
            format: &amp;#039;json&amp;#039;&lt;br /&gt;
        } ).done( function ( data ) {&lt;br /&gt;
            if ( !data.query || !data.query.pages ) { cb( [] ); return; }&lt;br /&gt;
            var pages = Object.values( data.query.pages ).filter( function ( p ) {&lt;br /&gt;
                return p.imageinfo &amp;amp;&amp;amp; p.imageinfo[ 0 ];&lt;br /&gt;
            } );&lt;br /&gt;
            pages.sort( function ( a, b ) {&lt;br /&gt;
                return b.imageinfo[ 0 ].timestamp.localeCompare( a.imageinfo[ 0 ].timestamp );&lt;br /&gt;
            } );&lt;br /&gt;
            cb( pages );&lt;br /&gt;
        } ).fail( function () { cb( [] ); } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* ── Build one grid item (works for both full and widget grids) ─ */&lt;br /&gt;
    function makeItem( page, cls ) {&lt;br /&gt;
        var info  = page.imageinfo[ 0 ];&lt;br /&gt;
        var thumb = info.thumburl || info.url;&lt;br /&gt;
        var title = page.title;                          // &amp;quot;File:foo.jpg&amp;quot;&lt;br /&gt;
        var href  = mw.util.getUrl( title );&lt;br /&gt;
&lt;br /&gt;
        var a   = document.createElement( &amp;#039;a&amp;#039; );&lt;br /&gt;
        a.href  = href;&lt;br /&gt;
        a.className = cls + &amp;#039; image&amp;#039;;                   // &amp;quot;image&amp;quot; lets MultimediaViewer intercept&lt;br /&gt;
        a.title = title.replace( /^(File|文件):/, &amp;#039;&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
        var img   = document.createElement( &amp;#039;img&amp;#039; );&lt;br /&gt;
        img.src   = thumb;&lt;br /&gt;
        img.alt   = a.title;&lt;br /&gt;
        img.loading = &amp;#039;lazy&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
        a.appendChild( img );&lt;br /&gt;
        return a;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* ════════════════════════════════════════════════════════════════&lt;br /&gt;
       FULL GALLERY PAGE&lt;br /&gt;
    ════════════════════════════════════════════════════════════════ */&lt;br /&gt;
    function initFullGallery() {&lt;br /&gt;
        var root = document.getElementById( &amp;#039;mw-gallery-root&amp;#039; );&lt;br /&gt;
        if ( !root ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var groups    = mw.config.get( &amp;#039;wgUserGroups&amp;#039; ) || [];&lt;br /&gt;
        var canUpload = groups.indexOf( &amp;#039;user&amp;#039; ) !== -1 || groups.indexOf( &amp;#039;sysop&amp;#039; ) !== -1;&lt;br /&gt;
&lt;br /&gt;
        /* Build skeleton */&lt;br /&gt;
        if ( canUpload ) {&lt;br /&gt;
            root.innerHTML =&lt;br /&gt;
                &amp;#039;&amp;lt;div id=&amp;quot;gal-drop&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;  &amp;lt;div class=&amp;quot;gal-drop-inner&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;    &amp;lt;span class=&amp;quot;gal-drop-icon&amp;quot;&amp;gt;📷&amp;lt;/span&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;    &amp;lt;p&amp;gt;将图片拖放至此上传&amp;lt;/p&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;    &amp;lt;p class=&amp;quot;gal-drop-sub&amp;quot;&amp;gt;或 &amp;lt;label class=&amp;quot;gal-browse&amp;quot;&amp;gt;点击选择文件&amp;#039; +&lt;br /&gt;
                &amp;#039;      &amp;lt;input type=&amp;quot;file&amp;quot; id=&amp;quot;gal-file-input&amp;quot; multiple accept=&amp;quot;image/*&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;    &amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;  &amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;  &amp;lt;div id=&amp;quot;gal-status&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;&amp;lt;div id=&amp;quot;gal-grid&amp;quot; class=&amp;quot;gal-grid&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            root.innerHTML = &amp;#039;&amp;lt;div id=&amp;quot;gal-grid&amp;quot; class=&amp;quot;gal-grid&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var grid   = document.getElementById( &amp;#039;gal-grid&amp;#039; );&lt;br /&gt;
        var status = document.getElementById( &amp;#039;gal-status&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
        function reload() {&lt;br /&gt;
            grid.innerHTML = &amp;#039;&amp;lt;div class=&amp;quot;gal-loading&amp;quot;&amp;gt;加载中…&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
            fetchImages( 200, function ( pages ) {&lt;br /&gt;
                grid.innerHTML = &amp;#039;&amp;#039;;&lt;br /&gt;
                if ( pages.length === 0 ) {&lt;br /&gt;
                    grid.innerHTML = &amp;#039;&amp;lt;div class=&amp;quot;gal-empty&amp;quot;&amp;gt;还没有图片，快来上传第一张吧！&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
                pages.forEach( function ( p ) {&lt;br /&gt;
                    grid.appendChild( makeItem( p, &amp;#039;gal-item&amp;#039; ) );&lt;br /&gt;
                } );&lt;br /&gt;
            } );&lt;br /&gt;
        }&lt;br /&gt;
        reload();&lt;br /&gt;
&lt;br /&gt;
        if ( !canUpload ) { return; }&lt;br /&gt;
&lt;br /&gt;
        /* ── Upload logic ─────────────────────────────────────────── */&lt;br /&gt;
        var drop  = document.getElementById( &amp;#039;gal-drop&amp;#039; );&lt;br /&gt;
        var input = document.getElementById( &amp;#039;gal-file-input&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
        drop.addEventListener( &amp;#039;dragover&amp;#039;, function ( e ) {&lt;br /&gt;
            e.preventDefault(); drop.classList.add( &amp;#039;gal-dragover&amp;#039; );&lt;br /&gt;
        } );&lt;br /&gt;
        drop.addEventListener( &amp;#039;dragleave&amp;#039;, function () {&lt;br /&gt;
            drop.classList.remove( &amp;#039;gal-dragover&amp;#039; );&lt;br /&gt;
        } );&lt;br /&gt;
        drop.addEventListener( &amp;#039;drop&amp;#039;, function ( e ) {&lt;br /&gt;
            e.preventDefault();&lt;br /&gt;
            drop.classList.remove( &amp;#039;gal-dragover&amp;#039; );&lt;br /&gt;
            uploadFiles( e.dataTransfer.files );&lt;br /&gt;
        } );&lt;br /&gt;
        input.addEventListener( &amp;#039;change&amp;#039;, function () { uploadFiles( input.files ); } );&lt;br /&gt;
&lt;br /&gt;
        function uploadFiles( fileList ) {&lt;br /&gt;
            var files = Array.from( fileList );&lt;br /&gt;
            var total = files.length, done = 0, failed = 0;&lt;br /&gt;
&lt;br /&gt;
            status.innerHTML = &amp;#039;&amp;lt;span class=&amp;quot;gal-progress&amp;quot;&amp;gt;上传中 0/&amp;#039; + total + &amp;#039;…&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            files.forEach( function ( file ) {&lt;br /&gt;
                api.getToken( &amp;#039;csrf&amp;#039; ).done( function ( token ) {&lt;br /&gt;
                    var fd = new FormData();&lt;br /&gt;
                    fd.append( &amp;#039;action&amp;#039;,         &amp;#039;upload&amp;#039; );&lt;br /&gt;
                    fd.append( &amp;#039;format&amp;#039;,         &amp;#039;json&amp;#039; );&lt;br /&gt;
                    fd.append( &amp;#039;filename&amp;#039;,       file.name );&lt;br /&gt;
                    fd.append( &amp;#039;file&amp;#039;,           file );&lt;br /&gt;
                    fd.append( &amp;#039;token&amp;#039;,          token );&lt;br /&gt;
                    fd.append( &amp;#039;ignorewarnings&amp;#039;, &amp;#039;1&amp;#039; );&lt;br /&gt;
                    fd.append( &amp;#039;text&amp;#039;,           &amp;#039;[[Category:图库]]\n上传自图库。&amp;#039; );&lt;br /&gt;
                    fd.append( &amp;#039;comment&amp;#039;,        &amp;#039;图库上传&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
                    fetch( mw.config.get( &amp;#039;wgScriptPath&amp;#039; ) + &amp;#039;/api.php&amp;#039;, {&lt;br /&gt;
                        method: &amp;#039;POST&amp;#039;, body: fd, credentials: &amp;#039;same-origin&amp;#039;&lt;br /&gt;
                    } )&lt;br /&gt;
                    .then( function ( r ) { return r.json(); } )&lt;br /&gt;
                    .then( function ( res ) {&lt;br /&gt;
                        done++;&lt;br /&gt;
                        if ( !res.upload || res.upload.result !== &amp;#039;Success&amp;#039; ) { failed++; }&lt;br /&gt;
                        var msg = done &amp;lt; total&lt;br /&gt;
                            ? &amp;#039;上传中 &amp;#039; + done + &amp;#039;/&amp;#039; + total + &amp;#039;…&amp;#039;&lt;br /&gt;
                            : ( failed&lt;br /&gt;
                                ? &amp;#039;完成，&amp;#039; + failed + &amp;#039; 张失败&amp;#039;&lt;br /&gt;
                                : &amp;#039;✓ 全部上传完成！&amp;#039; );&lt;br /&gt;
                        status.innerHTML = &amp;#039;&amp;lt;span class=&amp;quot;&amp;#039; +&lt;br /&gt;
                            ( done === total &amp;amp;&amp;amp; !failed ? &amp;#039;gal-ok&amp;#039; : &amp;#039;gal-progress&amp;#039; ) +&lt;br /&gt;
                            &amp;#039;&amp;quot;&amp;gt;&amp;#039; + msg + &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
                        if ( done === total ) { reload(); }&lt;br /&gt;
                    } )&lt;br /&gt;
                    .catch( function () {&lt;br /&gt;
                        done++; failed++;&lt;br /&gt;
                        status.innerHTML = &amp;#039;&amp;lt;span class=&amp;quot;gal-err&amp;quot;&amp;gt;上传出错，请重试&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
                    } );&lt;br /&gt;
                } );&lt;br /&gt;
            } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* ════════════════════════════════════════════════════════════════&lt;br /&gt;
       HOMEPAGE MINI WIDGET&lt;br /&gt;
    ════════════════════════════════════════════════════════════════ */&lt;br /&gt;
    function initWidget() {&lt;br /&gt;
        var root = document.getElementById( &amp;#039;mw-gallery-widget&amp;#039; );&lt;br /&gt;
        if ( !root ) { return; }&lt;br /&gt;
&lt;br /&gt;
        root.innerHTML = &amp;#039;&amp;lt;div class=&amp;quot;gal-widget-grid&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
            &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl( PAGE_NAME ) + &amp;#039;&amp;quot; class=&amp;quot;gal-widget-more&amp;quot;&amp;gt;查看全部 →&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
        var grid = root.querySelector( &amp;#039;.gal-widget-grid&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
        fetchImages( 8, function ( pages ) {&lt;br /&gt;
            if ( pages.length === 0 ) {&lt;br /&gt;
                root.innerHTML = &amp;#039;&amp;lt;p class=&amp;quot;gal-widget-empty&amp;quot;&amp;gt;图库暂无图片&amp;lt;/p&amp;gt;&amp;#039; +&lt;br /&gt;
                    &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl( PAGE_NAME ) + &amp;#039;&amp;quot;&amp;gt;前往图库上传 →&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            pages.slice( 0, 8 ).forEach( function ( p ) {&lt;br /&gt;
                grid.appendChild( makeItem( p, &amp;#039;gal-widget-item&amp;#039; ) );&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $( function () {&lt;br /&gt;
        if ( mw.config.get( &amp;#039;wgPageName&amp;#039; ) === PAGE_NAME ) { initFullGallery(); }&lt;br /&gt;
        initWidget();&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>LocalAdmin</name></author>
	</entry>
</feed>