2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:BearBin/js/BatchSend.js

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox/Safari:按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
  • Google Chrome:按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
  • Internet Explorer:按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”
  • Opera:在“工具→首选项”中清除缓存
如果您已登录但该页面出现未登录状态,请尝试在地址栏的地址最后添加代码?_=1来访问最新页面。
添加代码后的本页地址如下:-{R|https://moegirl.icu/User:BearBin/js/BatchSend.js?_=1}-
文档  [编辑]
var _addText = '{{Documentation|content=* 工具介绍见[[User:BearBin/js#BatchSend]]。\n* 源代码见[https://github.com/BearBin1215/MoegirlPedia/blob/master/src/gadgets/BatchSend GitHub]。}}';

// <nowiki>

(()=>{"use strict";var e={879:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",o=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),o&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),o&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,o,i,r){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(o)for(var s=0;s<this.length;s++){var l=this[s][0];null!=l&&(a[l]=!0)}for(var c=0;c<e.length;c++){var d=[].concat(e[c]);o&&a[d[0]]||(void 0!==r&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=r),n&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=n):d[2]=n),i&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=i):d[4]="".concat(i)),t.push(d))}},t}},246:e=>{e.exports=function(e){return e[1]}},923:(e,t,n)=>{n.d(t,{A:()=>s});var o=n(246),i=n.n(o),r=n(879),a=n.n(r)()(i());a.push([e.id,".bearbintools-loger .loger-clear{font-size:.9em;font-weight:400;margin-left:.3em}.bearbintools-loger .loger-body{background:hsla(0,0%,100%,.7);border:1px solid #ccc;display:flow-root;padding:.3em}.bearbintools-loger .loger-filter{float:right;padding:.4em}.bearbintools-loger .loger-filter>div{border-radius:.3em;cursor:pointer;margin-bottom:.2em;padding-right:.2em}.bearbintools-loger .loger-filter>div.loger-filter-selected{background-color:hsla(0,0%,50%,.07)}.bearbintools-loger .loger-filter .loger-filter-icon{display:inline-block;height:1em;line-height:1em;text-align:center;width:1.2em}.bearbintools-loger .loger-lines{font-family:monospace;list-style:inside;max-height:20em;overflow-y:auto}.bearbintools-loger .loger-lines>li a{color:inherit;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}",""]);const s=a},531:(e,t,n)=>{n.d(t,{A:()=>s});var o=n(246),i=n.n(o),r=n(879),a=n.n(r)()(i());a.push([e.id,".rootpage-Special_BatchSend #firstHeading{align-items:flex-end;display:flex;flex-wrap:wrap;justify-content:space-between}.rootpage-Special_BatchSend #firstHeading>div{font-size:.6em}.rootpage-Special_BatchSend #bodyContent{padding-right:0!important}.rootpage-Special_BatchSend #bodyContent #mw-content-text h3{margin-bottom:0}.rootpage-Special_BatchSend #bodyContent #mw-content-text ul.bearbintools-notelist{margin:.4em 0 0 1.6em}.rootpage-Special_BatchSend #bodyContent #mw-content-text .oo-ui-textInputWidget{max-width:unset}#bs-submit-panel{display:flex;gap:.1rem;margin-top:.8em}#bs-submit-panel #bs-interval{flex:0 0 5.5em}#bs-submit-panel #bs-summary{max-width:unset}#bs-previewzone{background:hsla(0,0%,100%,.7);border:1px solid #ccc}#bs-previewzone .mw-parser-output{padding:0 1em 1em}#bs-previewzone .oo-ui-pendingElement-pending{font-size:1.2em;padding:1em 0;text-align:center}#bs-previewzone .mw-editsection{display:none}#bs-previewsummary{margin-top:.4em}",""]);const s=a},72:e=>{var t=[];function n(e){for(var n=-1,o=0;o<t.length;o++)if(t[o].identifier===e){n=o;break}return n}function o(e,o){for(var r={},a=[],s=0;s<e.length;s++){var l=e[s],c=o.base?l[0]+o.base:l[0],d=r[c]||0,p="".concat(c," ").concat(d);r[c]=d+1;var u=n(p),m={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==u)t[u].references++,t[u].updater(m);else{var g=i(m,o);o.byIndex=s,t.splice(s,0,{identifier:p,updater:g,references:1})}a.push(p)}return a}function i(e,t){var n=t.domAPI(t);n.update(e);return function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,i){var r=o(e=e||[],i=i||{});return function(e){e=e||[];for(var a=0;a<r.length;a++){var s=n(r[a]);t[s].references--}for(var l=o(e,i),c=0;c<r.length;c++){var d=n(r[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}r=l}}},659:e=>{var t={};e.exports=function(e,n){var o=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(n)}},540:e=>{e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},56:(e,t,n)=>{e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},825:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var o="";n.supports&&(o+="@supports (".concat(n.supports,") {")),n.media&&(o+="@media ".concat(n.media," {"));var i=void 0!==n.layer;i&&(o+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),o+=n.css,i&&(o+="}"),n.media&&(o+="}"),n.supports&&(o+="}");var r=n.sourceMap;r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),t.styleTagTransform(o,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},113:e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}}},t={};function n(o){var i=t[o];if(void 0!==i)return i.exports;var r=t[o]={id:o,exports:{}};return e[o](r,r.exports,n),r.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.nc=void 0,(()=>{var e=n(72),t=n.n(e),o=n(825),i=n.n(o),r=n(659),a=n.n(r),s=n(56),l=n.n(s),c=n(540),d=n.n(c),p=n(113),u=n.n(p),m=n(923),g={};g.styleTagTransform=u(),g.setAttributes=l(),g.insert=a().bind(null,"head"),g.domAPI=i(),g.insertStyleElement=d();t()(m.A,g);m.A&&m.A.locals&&m.A.locals;const h=e=>{const t=document.createElement("template");return t.innerHTML=e.trim(),t.content.children[0]};class f{_logTypes={success:{icon:"✓",color:"#333",text:"完成"},warn:{icon:"!",color:"#f28500",text:"警告"},error:{icon:"✕",color:"#eb3941",text:"出错"}};element;headline;body;logerLines;logDetails=[];filterButtons={};constructor(e=[],t="",n="h3"){e.length>0&&(this._logTypes=e.reduce(((e,{name:t,icon:n,color:o,text:i})=>(e[t]={icon:n,color:o,text:i},e)),{}));for(const e in this._logTypes)this._logTypes[e].show=!0;this.headline=h(`<${n} class="loger-headline"></${n}>`),this.body=h('<div class="loger-body"></div>'),this.logerLines=h('<ul class="loger-lines"></ul>');const o=h('<a class="loger-clear">[清空]</a>');o.addEventListener("click",(()=>{this.logDetails.length=0,this.logerLines.innerHTML="";for(const e in this.filterButtons)this.filterButtons[e].countElement.innerText="0"}));const i=h('<nav class="loger-filter"></nav>');for(const[e,{icon:t,color:n,text:o}]of Object.entries(this._logTypes)){const r=h(`<div class="loger-filter-selected loger-${e}" style="color: ${n}"></div>`),a=h(`<span class="loger-filter-icon">${t}</span>`),s=h('<span class="loger-filter-count">0</span>');r.append(a,s,` ${o}`),r.addEventListener("click",(()=>{this._logTypes[e].show?(r.classList.remove("loger-filter-selected"),this.logerLines.classList.add(`loger-${e}-hidden`),this.logDetails.filter((t=>t.type===e)).forEach((e=>{e.node.style.display="none"})),this._logTypes[e].show=!1):(r.classList.add("loger-filter-selected"),this.logerLines.classList.remove(`loger-${e}-hidden`),this.logDetails.filter((t=>t.type===e)).forEach((e=>{e.node.style.display=""})),this._logTypes[e].show=!0)})),this.filterButtons[e]={button:r,countElement:s},i.appendChild(r)}this.element=h(`<div class="bearbintools-loger" id="${t||""}"></div>`),this.headline.append("日志",o),this.body.append(i,this.logerLines),this.element.append(this.headline,this.body)}record(e,t="normal",n=(new Date).toLocaleTimeString()){const o=document.createElement("li");o.classList.add("loger-record",`loger-${t}`),o.innerHTML=`${n} - ${e}`,o.style.color=this._logTypes[t]?.color||"#222",!1===this._logTypes[t]?.show&&(o.style.display="none"),this.logerLines.appendChild(o),this.logerLines.scrollTop=this.logerLines.scrollHeight,this.logDetails.push({node:o,type:t}),this.filterButtons[t]&&(this.filterButtons[t].countElement.innerText=String(+this.filterButtons[t].countElement.innerText+1))}}const b=e=>new Promise((t=>setTimeout(t,e)));var v=n(531),y={};y.styleTagTransform=u(),y.setAttributes=l(),y.insert=a().bind(null,"head"),y.domAPI=i(),y.insertStyleElement=d();t()(v.A,y);v.A&&v.A.locals&&v.A.locals;$((()=>(async()=>{if("Special:BatchSend"!==mw.config.get("wgPageName"))return await mw.loader.using(["mediawiki.util"]),void mw.util.addPortletLink("p-tb","/Special:BatchSend","群发提醒","t-batchsend");await mw.loader.using(["mediawiki.api","oojs-ui","mediawiki.user"]);const e=new mw.Api,t=new f,n=async(t,n,o,i="")=>await e.postWithToken("csrf",{format:"json",action:"edit",section:"new",watchlist:"nochange",tags:"Bot",bot:!0,title:t,sectiontitle:n,text:o,summary:i});mw.config.set("wgCanonicalSpecialPageName","BulkMove"),document.title="群发提醒 - 萌娘百科_万物皆可萌的百科全书",$(".mw-invalidspecialpage").removeClass("mw-invalidspecialpage"),$("#firstHeading").html('群发讨论页消息<div>By <a href="/User:BearBin">BearBin</a></div>'),$("#contentSub").remove();const o=new OO.ui.MultilineTextInputWidget({validate:"non-empty",placeholder:"使用换行分隔,一行一个\nUser talk前缀加不加都可以,支持发送至子页面",rows:5,autosize:!0}),i=new OO.ui.TextInputWidget({validate:"non-empty"}),r=new OO.ui.MultilineTextInputWidget({validate:"non-empty",rows:10,autosize:!0}),a=new OO.ui.ButtonWidget({label:"提交",flags:["primary","progressive"],icon:"check"}),s=new OO.ui.ButtonWidget({label:"预览",flags:["primary"]}),l=new OO.ui.TextInputWidget({placeholder:"发送间隔",id:"bs-interval"}),c=new OO.ui.TextInputWidget({placeholder:"编辑摘要",id:"bs-summary"}),d=$("<h3>预览</h3>").hide(),p=$('<div id="bs-previewzone">').hide(),u=$('<span class="comment">'),m=$('<div id="bs-previewsummary">').hide();$("#mw-content-text").empty().append("<h3>页面列表</h3>",o.$element,"<h3>标题</h3>",i.$element,"<h3>正文</h3>",r.$element,$('<div id="bs-submit-panel">').append(a.$element,s.$element,l.$element,c.$element),$('<ul class="bearbintools-notelist">').append("<li>发送间隔单位为秒(s),不包含本身编辑所用的服务器响应时间。</li>",'<li>非维护人员请注意<a target="_blank" href="/api.php?action=query&meta=userinfo&uiprop=ratelimits">ratelimit限制</a>和<a href="/萌娘百科:机器用户#其他规范">机器用户方针规定的速率</a>,自行设置间隔或申请机器用户以免撞墙或超速。</li>',"<li>摘要留空则会由系统自动生成。</li>"),d,p,m.append("编辑摘要:",u),$(t.element));for(const e of[o,i,r])e.on("change",(()=>{window.onbeforeunload=()=>!0}));s.on("click",(async()=>{s.setDisabled(!0),d.show(),p.show(),m.show(),p.html('<div class="oo-ui-pendingElement-pending">正在加载预览……</div>');const{text:t,parsedsummary:n}=await(async(t,n,o="")=>{const{parse:i}=await e.post({action:"parse",uselang:mw.config.get("wgUserLanguage"),section:"new",contentmodel:"wikitext",pst:!0,sectiontitle:t,text:n,summary:o});return i})(i.getValue(),r.getValue(),c.getValue());p.html(t["*"]),u.html(`(${n["*"]})`),s.setDisabled(!1)})),a.on("click",(async()=>{if(await OO.ui.confirm($("<p>请确认您要发送的内容是否有误。若因输入不当而产生错误,请自行<ruby><rb>承担后果</rb><rp>(</rp><rt>料理后事</rt><rp>)</rp></ruby>。</p>"),{title:"提醒",size:"small"})){a.setDisabled(!0),s.setDisabled(!0),window.onbeforeunload=()=>!0,$("#mw-content-text input, #mw-content-text textarea").prop("disabled",!0);const e=[...new Set(o.getValue().split("\n").filter((e=>e&&e.trim())))],d=i.getValue().trim(),p=r.getValue().trim(),u=1e3*Number(l.getValue()),m=c.getValue();if(0===e.length)return void t.record("请输入要发送的目标页面。","warn");if(0===d.length)return void t.record("请输入章节标题。","warn");if(0===p.length)return void t.record("请输入内容。","warn");for(const o of e){const e=o.replace(/^ *(?:User[_ ]talk:|用[户戶][讨討][论論]:|使用者[讨討][论論]:|U:|User:|用[户戶]:)?(.*)$/i,"User_talk:$1");try{const o=await n(e,d,p,m),i=`<a href="/${e}" target="_blank">${e}</a>`;"Success"===o.edit?.result?(t.record(`向【${i}】发送成功。`,"success"),await b(u)):"Failure"===o.edit?.result&&t.record(`向【${i}】发送失败:${Object.keys(o.edit)[0]}${Object.values(o.edit)[0]}。`,"error")}catch(n){t.record(`向【<a href="/${e}">${e}</a>】发送失败:${n}。`,"error")}}t.record("发送完毕。"),a.setDisabled(!1),s.setDisabled(!1),window.onbeforeunload=()=>null,$("#mw-content-text input, #mw-content-text textarea").prop("disabled",!1)}}))})()))})()})();

// </nowiki>