MediaWiki:Gadget-ondemand-criteriaCheck.js
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/OOjs_UI_icon_journal-ltr.svg/15px-OOjs_UI_icon_journal-ltr.svg.png)
После сохранения или недавних изменений очистите кэш браузера.
// См. https://www.search.com.vn/wiki/ru/Википедия:Глобальный_код/Автоматическая_проверка_соответствия_критериям/******/ (function(modules) { // webpackBootstrap/******/ // The module cache/******/ var installedModules = {};/******//******/ // The require function/******/ function __webpack_require__(moduleId) {/******//******/ // Check if module is in cache/******/ if(installedModules[moduleId]) {/******/ return installedModules[moduleId].exports;/******/ }/******/ // Create a new module (and put it into the cache)/******/ var module = installedModules[moduleId] = {/******/ i: moduleId,/******/ l: false,/******/ exports: {}/******/ };/******//******/ // Execute the module function/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);/******//******/ // Flag the module as loaded/******/ module.l = true;/******//******/ // Return the exports of the module/******/ return module.exports;/******/ }/******//******//******/ // expose the modules object (__webpack_modules__)/******/ __webpack_require__.m = modules;/******//******/ // expose the module cache/******/ __webpack_require__.c = installedModules;/******//******/ // define getter function for harmony exports/******/ __webpack_require__.d = function(exports, name, getter) {/******/ if(!__webpack_require__.o(exports, name)) {/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });/******/ }/******/ };/******//******/ // define __esModule on exports/******/ __webpack_require__.r = function(exports) {/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });/******/ }/******/ Object.defineProperty(exports, '__esModule', { value: true });/******/ };/******//******/ // create a fake namespace object/******/ // mode & 1: value is a module id, require it/******/ // mode & 2: merge all properties of value into the ns/******/ // mode & 4: return value when already ns object/******/ // mode & 8|1: behave like require/******/ __webpack_require__.t = function(value, mode) {/******/ if(mode & 1) value = __webpack_require__(value);/******/ if(mode & 8) return value;/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;/******/ var ns = Object.create(null);/******/ __webpack_require__.r(ns);/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));/******/ return ns;/******/ };/******//******/ // getDefaultExport function for compatibility with non-harmony modules/******/ __webpack_require__.n = function(module) {/******/ var getter = module && module.__esModule ?/******/ function getDefault() { return module['default']; } :/******/ function getModuleExports() { return module; };/******/ __webpack_require__.d(getter, 'a', getter);/******/ return getter;/******/ };/******//******/ // Object.prototype.hasOwnProperty.call/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };/******//******/ // __webpack_public_path__/******/ __webpack_require__.p = "";/******//******//******/ // Load entry module and return exports/******/ return __webpack_require__(__webpack_require__.s = 15);/******/ })/************************************************************************//******/ ([/* 0 *//***/ (function(module, exports, __webpack_require__) {module.exports = __webpack_require__(7);/***/ }),/* 1 *//***/ (function(module, exports) {function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); }}function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); };}module.exports = _asyncToGenerator;/***/ }),/* 2 *//***/ (function(module, exports, __webpack_require__) {var arrayWithoutHoles = __webpack_require__(12);var iterableToArray = __webpack_require__(13);var nonIterableSpread = __webpack_require__(14);function _toConsumableArray(arr) { return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();}module.exports = _toConsumableArray;/***/ }),/* 3 */,/* 4 *//***/ (function(module, exports) {function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }function _typeof(obj) { if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") { module.exports = _typeof = function _typeof(obj) { return _typeof2(obj); }; } else { module.exports = _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj); }; } return _typeof(obj);}module.exports = _typeof;/***/ }),/* 5 *//***/ (function(module, exports) {function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); }}module.exports = _classCallCheck;/***/ }),/* 6 *//***/ (function(module, exports) {function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); }}function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor;}module.exports = _createClass;/***/ }),/* 7 *//***/ (function(module, exports, __webpack_require__) {/** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */var runtime = (function (exports) { "use strict"; var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined; // More compressible than void 0. var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function wrap(innerFn, outerFn, self, tryLocsList) { // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next, // .throw, and .return methods. generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion // record like context.tryEntries[i].completion. This interface could // have been (and was previously) designed to take a closure to be // invoked without arguments, but in all the cases we care about we // already have an existing method we want to call, so there's no need // to create a new function object. We can even get away with assuming // the method takes exactly one argument, since that happens to be true // in every case, so we don't have to touch the arguments object. The // only additional allocation required is the completion record, which // has a stable shape and so hopefully should be cheap to allocate. function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as // breaking out of the dispatch switch statement. var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and // .constructor.prototype properties for functions that return Generator // objects. For full spec compliance, you may wish to configure your // minifier not to mangle the names of these two functions. function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that // don't natively support it. var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { // This environment has a native %IteratorPrototype%; use it instead // of the polyfill. IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; // Helper for defining the .next, .throw, and .return methods of the // Iterator interface in terms of a single ._invoke method. function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function(method) { prototype[method] = function(arg) { return this._invoke(method, arg); }; }); } exports.isGeneratorFunction = function(genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can // do is to check its .name property. (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; exports.mark = function(genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; if (!(toStringTagSymbol in genFun)) { genFun[toStringTagSymbol] = "GeneratorFunction"; } } genFun.prototype = Object.create(Gp); return genFun; }; // Within the body of any async function, `await x` is transformed to // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test // `hasOwn.call(value, "__await")` to determine if the yielded value is // meant to be awaited. exports.awrap = function(arg) { return { __await: arg }; }; function AsyncIterator(generator) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && typeof value === "object" && hasOwn.call(value, "__await")) { return Promise.resolve(value.__await).then(function(value) { invoke("next", value, resolve, reject); }, function(err) { invoke("throw", err, resolve, reject); }); } return Promise.resolve(value).then(function(unwrapped) { // When a yielded Promise is resolved, its final value becomes // the .value of the Promise<{value,done}> result for the // current iteration. result.value = unwrapped; resolve(result); }, function(error) { // If a rejected Promise was yielded, throw the rejection back // into the async generator function so it can be handled there. return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new Promise(function(resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = // If enqueue has been called before, then we want to wait until // all previous Promises have been resolved before calling invoke, // so that results are always delivered in the correct order. If // enqueue has not been called before, then it is important to // call invoke immediately, without waiting on a callback to fire, // so that the async generator function has the opportunity to do // any necessary setup in a predictable way. This predictability // is why the Promise constructor synchronously invokes its // executor callback, and why async functions synchronously // execute code before the first await. Since we implement simple // async functions in terms of async generators, it is especially // important to get this right, even though it requires care. previousPromise ? previousPromise.then( callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later // invocations of the iterator. callInvokeWithMethodAndArg ) : callInvokeWithMethodAndArg(); } // Define the unified helper method that is used to implement .next, // .throw, and .return (see defineIteratorMethods). this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of // AsyncIterator objects; they just return a Promise for the value of // the final result produced by the iterator. exports.async = function(innerFn, outerFn, self, tryLocsList) { var iter = new AsyncIterator( wrap(innerFn, outerFn, self, tryLocsList) ); return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } // Be forgiving, per 25.3.3.3.3 of the spec: // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { // Setting context._sent for legacy support of Babel's // function.sent implementation. context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { // If an exception is thrown from innerFn, we leave state === // GenStateExecuting and loop back for another invocation. state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; // Dispatch the exception by looping back around to the // context.dispatchException(context.arg) call above. context.method = "throw"; context.arg = record.arg; } } }; } // Call delegate.iterator[context.method](context.arg) and handle the // result, either by returning a { value, done } result from the // delegate iterator, or by modifying context.method and context.arg, // setting context.delegate to null, and returning the ContinueSentinel. function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined) { // A .throw or .return when the delegate iterator has no .throw // method always terminates the yield* loop. context.delegate = null; if (context.method === "throw") { // Note: ["return"] must be used for ES3 parsing compatibility. if (delegate.iterator["return"]) { // If the delegate iterator has a return method, give it a // chance to clean up. context.method = "return"; context.arg = undefined; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { // If maybeInvokeDelegate(context) changed context.method from // "return" to "throw", let that override the TypeError below. return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError( "The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (! info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { // Assign the result of the finished delegate to the temporary // variable specified by delegate.resultName (see delegateYield). context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield). context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the // exception, let the outer generator proceed normally. If // context.method was "next", forget context.arg since it has been // "consumed" by the delegate iterator. If context.method was // "return", allow the original .return call to continue in the // outer generator. if (context.method !== "return") { context.method = "next"; context.arg = undefined; } } else { // Re-yield the result returned by the delegate method. return info; } // The delegate iterator is finished, so forget it and continue with // the outer generator. context.delegate = null; return ContinueSentinel; } // Define Generator.prototype.{next,throw,return} in terms of the // unified ._invoke helper method. defineIteratorMethods(Gp); Gp[toStringTagSymbol] = "Generator"; // A Generator should always return itself as the iterator object when the // @@iterator function is called on it. Some browsers' implementations of the // iterator prototype chain incorrectly implement this, causing the Generator // object to not be returned from this call. This ensures that doesn't happen. // See https://github.com/facebook/regenerator/issues/274 for more details. Gp[iteratorSymbol] = function() { return this; }; Gp.toString = function() { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { // The root entry object (effectively a try statement without a catch // or a finally block) gives us a place to store values thrown from // locations where there is no enclosing try statement. this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } exports.keys = function(object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); // Rather than returning an object with a next method, we keep // things simple and return the next function itself. return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } // To avoid creating an additional object, we just hang the .value // and .done properties off the next function object itself. This // also ensures that the minifier will not anonymize the function. next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined; next.done = true; return next; }; return next.next = next; } } // Return an iterator with no values. return { next: doneResult }; } exports.values = values; function doneResult() { return { value: undefined, done: true }; } Context.prototype = { constructor: Context, reset: function(skipTempReset) { this.prev = 0; this.next = 0; // Resetting context._sent for legacy support of Babel's // function.sent implementation. this.sent = this._sent = undefined; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { // Not sure about the optimal order of these conditions: if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined; } } } }, stop: function() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { // If the dispatched exception was caught by a catch block, // then let that catch block handle the exception normally. context.method = "next"; context.arg = undefined; } return !! caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { // Exception thrown outside of any try block that could handle // it, so set the completion value of the entire function to // throw the exception. return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { // Ignore the finally entry if control is not jumping to a // location outside the try/catch block. finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } // The context.catch method must only be called with a location // argument that corresponds to a known catch block. throw new Error("illegal catch attempt"); }, delegateYield: function(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { // Deliberately forget the last sent value so that we don't // accidentally pass it on to the delegate. this.arg = undefined; } return ContinueSentinel; } }; // Regardless of whether this script is executing as a CommonJS module // or not, return the runtime object so that we can declare the variable // regeneratorRuntime in the outer scope, which allows this module to be // injected easily by `bin/regenerator --include-runtime script.js`. return exports;}( // If this script is executing as a CommonJS module, use module.exports // as the regeneratorRuntime namespace. Otherwise create a new empty // object. Either way, the resulting object will be used to initialize // the regeneratorRuntime variable at the top of this file. true ? module.exports : undefined));try { regeneratorRuntime = runtime;} catch (accidentalStrictMode) { // This module should not be running in strict mode, so the above // assignment should always work unless something is misconfigured. Just // in case runtime.js accidentally runs in strict mode, we can escape // strict mode using a global Function call. This could conceivably fail // if a Content Security Policy forbids using Function, but in that case // the proper solution is to fix the accidental strict mode problem. If // you've misconfigured your bundler to force strict mode and applied a // CSP to forbid Function, and you're not willing to fix either of those // problems, please detail your unique predicament in a GitHub issue. Function("r", "regeneratorRuntime = r")(runtime);}/***/ }),/* 8 *//***/ (function(module, exports, __webpack_require__) {var content = __webpack_require__(9);if (typeof content === 'string') { content = [[module.i, content, '']];}var options = {}options.insert = "head";options.singleton = false;var update = __webpack_require__(11)(content, options);if (content.locals) { module.exports = content.locals;}/***/ }),/* 9 *//***/ (function(module, exports, __webpack_require__) {exports = module.exports = __webpack_require__(10)(false);// Moduleexports.push([module.i, ".criteriaCheck-message-withText {\r\n display: flex;\r\n}\r\n\r\n.criteriaCheck-message-accented {\r\n font-weight: bold;\r\n}\r\n\r\n.criteriaCheck-message-big {\r\n font-weight: normal;\r\n margin: 0.5em 0;\r\n}\r\n\r\n.criteriaCheck-message-big + .criteriaCheck-message-big {\r\n margin-top: -0.25em;\r\n}\r\n\r\n.criteriaCheck-message-big {\r\n font-size: 120%;\r\n}\r\n\r\n.criteriaCheck-buttonsBlock {\r\n margin: 0.5em 0;\r\n}\r\n\r\n.criteriaCheck-button {\r\n margin-right: 0.5em;\r\n}\r\n\r\n.criteriaCheck-icon {\r\n display: inline-block;\r\n width: 20px;\r\n height: 20px;\r\n background-position: center center;\r\n background-size: 20px 20px;\r\n background-repeat: no-repeat;\r\n margin-right: 0.5em;\r\n vertical-align: top;\r\n}\r\n\r\n.criteriaCheck-message-withText .criteriaCheck-icon {\r\n flex-shrink: 0;\r\n}\r\n\r\n.criteriaCheck-icon + .criteriaCheck-icon {\r\n margin-left: -0.5em;\r\n}\r\n\r\n.criteriaCheck-message-big .criteriaCheck-icon {\r\n width: 24px;\r\n height: 24px;\r\n background-size: 24px 24px;\r\n}\r\n\r\n.criteriaCheck-icon-check {\r\n background-image: url(\"https://upload.wikimedia.org/wikipedia/commons/f/f6/OOjs_UI_icon_check-constructive.svg\");\r\n}\r\n\r\n.criteriaCheck-icon-close {\r\n background-image: url(\"https://upload.wikimedia.org/wikipedia/commons/7/77/OOjs_UI_icon_close-ltr-destructive.svg\");\r\n}\r\n\r\n.criteriaCheck-icon-help {\r\n background-image: url(\"https://upload.wikimedia.org/wikipedia/commons/b/b2/OOjs_UI_icon_help-ltr.svg\");\r\n}\r\n\r\n.criteriaCheck-icon-error {\r\n background-image: url(\"https://upload.wikimedia.org/wikipedia/commons/4/4e/OOjs_UI_icon_error-destructive.svg\");\r\n}\r\n\r\n.criteriaCheck-icon-loading {\r\n background-image: url(\"https://upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif\");\r\n}\r\n\r\n.criteriaCheck-icon-warning {\r\n background-image: url(\"https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg\");\r\n}\r\n\r\n.criteriaCheck-sandbox {\r\n display: none;\r\n}", ""]);/***/ }),/* 10 *//***/ (function(module, exports, __webpack_require__) {"use strict";/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra*/// css base code, injected by the css-loader// eslint-disable-next-line func-namesmodule.exports = function (useSourceMap) { var list = []; // return the list of modules as css string list.toString = function toString() { return this.map(function (item) { var content = cssWithMappingToString(item, useSourceMap); if (item[2]) { return "@media ".concat(item[2], "{").concat(content, "}"); } return content; }).join(''); }; // import a list of modules into the list // eslint-disable-next-line func-names list.i = function (modules, mediaQuery) { if (typeof modules === 'string') { // eslint-disable-next-line no-param-reassign modules = [[null, modules, '']]; } var alreadyImportedModules = {}; for (var i = 0; i < this.length; i++) { // eslint-disable-next-line prefer-destructuring var id = this[i][0]; if (id != null) { alreadyImportedModules[id] = true; } } for (var _i = 0; _i < modules.length; _i++) { var item = modules[_i]; // skip already imported module // this implementation is not 100% perfect for weird media query combinations // when a module is imported multiple times with different media queries. // I hope this will never occur (Hey this way we have smaller bundles) if (item[0] == null || !alreadyImportedModules[item[0]]) { if (mediaQuery && !item[2]) { item[2] = mediaQuery; } else if (mediaQuery) { item[2] = "(".concat(item[2], ") and (").concat(mediaQuery, ")"); } list.push(item); } } }; return list;};function cssWithMappingToString(item, useSourceMap) { var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring var cssMapping = item[3]; if (!cssMapping) { return content; } if (useSourceMap && typeof btoa === 'function') { var sourceMapping = toComment(cssMapping); var sourceURLs = cssMapping.sources.map(function (source) { return "/*# sourceURL=".concat(cssMapping.sourceRoot).concat(source, " */"); }); return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); } return [content].join('\n');} // Adapted from convert-source-map (MIT)function toComment(sourceMap) { // eslint-disable-next-line no-undef var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); return "/*# ".concat(data, " */");}/***/ }),/* 11 *//***/ (function(module, exports, __webpack_require__) {"use strict";var stylesInDom = {};var isOldIE = function isOldIE() { var memo; return function memorize() { if (typeof memo === 'undefined') { // Test for IE <= 9 as proposed by Browserhacks // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 // Tests for existence of standard globals is to allow style-loader // to operate correctly into non-standard environments // @see https://github.com/webpack-contrib/style-loader/issues/177 memo = Boolean(window && document && document.all && !window.atob); } return memo; };}();var getTarget = function getTarget() { var memo = {}; return function memorize(target) { if (typeof memo[target] === 'undefined') { var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { try { // This will throw an exception if access to iframe is blocked // due to cross-origin restrictions styleTarget = styleTarget.contentDocument.head; } catch (e) { // istanbul ignore next styleTarget = null; } } memo[target] = styleTarget; } return memo[target]; };}();function listToStyles(list, options) { var styles = []; var newStyles = {}; for (var i = 0; i < list.length; i++) { var item = list[i]; var id = options.base ? item[0] + options.base : item[0]; var css = item[1]; var media = item[2]; var sourceMap = item[3]; var part = { css: css, media: media, sourceMap: sourceMap }; if (!newStyles[id]) { styles.push(newStyles[id] = { id: id, parts: [part] }); } else { newStyles[id].parts.push(part); } } return styles;}function addStylesToDom(styles, options) { for (var i = 0; i < styles.length; i++) { var item = styles[i]; var domStyle = stylesInDom[item.id]; var j = 0; if (domStyle) { domStyle.refs++; for (; j < domStyle.parts.length; j++) { domStyle.parts[j](item.parts[j]); } for (; j < item.parts.length; j++) { domStyle.parts.push(addStyle(item.parts[j], options)); } } else { var parts = []; for (; j < item.parts.length; j++) { parts.push(addStyle(item.parts[j], options)); } stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }; } }}function insertStyleElement(options) { var style = document.createElement('style'); if (typeof options.attributes.nonce === 'undefined') { var nonce = true ? __webpack_require__.nc : undefined; if (nonce) { options.attributes.nonce = nonce; } } Object.keys(options.attributes).forEach(function (key) { style.setAttribute(key, options.attributes[key]); }); if (typeof options.insert === 'function') { options.insert(style); } else { var target = getTarget(options.insert || 'head'); if (!target) { throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); } target.appendChild(style); } return style;}function removeStyleElement(style) { // istanbul ignore if if (style.parentNode === null) { return false; } style.parentNode.removeChild(style);}/* istanbul ignore next */var replaceText = function replaceText() { var textStore = []; return function replace(index, replacement) { textStore[index] = replacement; return textStore.filter(Boolean).join('\n'); };}();function applyToSingletonTag(style, index, remove, obj) { var css = remove ? '' : obj.css; // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = replaceText(index, css); } else { var cssNode = document.createTextNode(css); var childNodes = style.childNodes; if (childNodes[index]) { style.removeChild(childNodes[index]); } if (childNodes.length) { style.insertBefore(cssNode, childNodes[index]); } else { style.appendChild(cssNode); } }}function applyToTag(style, options, obj) { var css = obj.css; var media = obj.media; var sourceMap = obj.sourceMap; if (media) { style.setAttribute('media', media); } if (sourceMap && btoa) { css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); } // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = css; } else { while (style.firstChild) { style.removeChild(style.firstChild); } style.appendChild(document.createTextNode(css)); }}var singleton = null;var singletonCounter = 0;function addStyle(obj, options) { var style; var update; var remove; if (options.singleton) { var styleIndex = singletonCounter++; style = singleton || (singleton = insertStyleElement(options)); update = applyToSingletonTag.bind(null, style, styleIndex, false); remove = applyToSingletonTag.bind(null, style, styleIndex, true); } else { style = insertStyleElement(options); update = applyToTag.bind(null, style, options); remove = function remove() { removeStyleElement(style); }; } update(obj); return function updateStyle(newObj) { if (newObj) { if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { return; } update(obj = newObj); } else { remove(); } };}module.exports = function (list, options) { options = options || {}; options.attributes = typeof options.attributes === 'object' ? options.attributes : {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> // tags it will allow on a page if (!options.singleton && typeof options.singleton !== 'boolean') { options.singleton = isOldIE(); } var styles = listToStyles(list, options); addStylesToDom(styles, options); return function update(newList) { var mayRemove = []; for (var i = 0; i < styles.length; i++) { var item = styles[i]; var domStyle = stylesInDom[item.id]; if (domStyle) { domStyle.refs--; mayRemove.push(domStyle); } } if (newList) { var newStyles = listToStyles(newList, options); addStylesToDom(newStyles, options); } for (var _i = 0; _i < mayRemove.length; _i++) { var _domStyle = mayRemove[_i]; if (_domStyle.refs === 0) { for (var j = 0; j < _domStyle.parts.length; j++) { _domStyle.parts[j](); } delete stylesInDom[_domStyle.id]; } } };};/***/ }),/* 12 *//***/ (function(module, exports) {function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; }}module.exports = _arrayWithoutHoles;/***/ }),/* 13 *//***/ (function(module, exports) {function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);}module.exports = _iterableToArray;/***/ }),/* 14 *//***/ (function(module, exports) {function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance");}module.exports = _nonIterableSpread;/***/ }),/* 15 *//***/ (function(module, __webpack_exports__, __webpack_require__) {"use strict";__webpack_require__.r(__webpack_exports__);// EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.jsvar regenerator = __webpack_require__(0);var regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/asyncToGenerator.jsvar asyncToGenerator = __webpack_require__(1);var asyncToGenerator_default = /*#__PURE__*/__webpack_require__.n(asyncToGenerator);// EXTERNAL MODULE: ./src/style.cssvar style = __webpack_require__(8);// CONCATENATED MODULE: ./src/cc.jswindow.criteriaCheck = {};/* harmony default export */ var cc = (window.criteriaCheck);// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/toConsumableArray.jsvar toConsumableArray = __webpack_require__(2);var toConsumableArray_default = /*#__PURE__*/__webpack_require__.n(toConsumableArray);// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/typeof.jsvar helpers_typeof = __webpack_require__(4);var typeof_default = /*#__PURE__*/__webpack_require__.n(helpers_typeof);// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/toInteger/index.jsfunction toInteger(dirtyNumber) { if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { return NaN; } var number = Number(dirtyNumber); if (isNaN(number)) { return number; } return number < 0 ? Math.ceil(number) : Math.floor(number);}// CONCATENATED MODULE: ./node_modules/date-fns/esm/toDate/index.js/** * @name toDate * @category Common Helpers * @summary Convert the given argument to an instance of Date. * * @description * Convert the given argument to an instance of Date. * * If the argument is an instance of Date, the function returns its clone. * * If the argument is a number, it is treated as a timestamp. * * If the argument is none of the above, the function returns Invalid Date. * * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. * * @param {Date|Number} argument - the value to convert * @returns {Date} the parsed date in the local time zone * @throws {TypeError} 1 argument required * * @example * // Clone the date: * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) * //=> Tue Feb 11 2014 11:30:30 * * @example * // Convert the timestamp to date: * const result = toDate(1392098430000) * //=> Tue Feb 11 2014 11:30:30 */function toDate(argument) { if (arguments.length < 1) { throw new TypeError('1 argument required, but only ' + arguments.length + ' present'); } var argStr = Object.prototype.toString.call(argument); // Clone the date if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') { // Prevent the date to lose the milliseconds when passed to new Date() in IE10 return new Date(argument.getTime()); } else if (typeof argument === 'number' || argStr === '[object Number]') { return new Date(argument); } else { if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') { // eslint-disable-next-line no-console console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"); // eslint-disable-next-line no-console console.warn(new Error().stack); } return new Date(NaN); }}// CONCATENATED MODULE: ./node_modules/date-fns/esm/addDays/index.js/** * @name addDays * @category Day Helpers * @summary Add the specified number of days to the given date. * * @description * Add the specified number of days to the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of days to be added * @returns {Date} the new date with the days added * @throws {TypeError} 2 arguments required * * @example * // Add 10 days to 1 September 2014: * var result = addDays(new Date(2014, 8, 1), 10) * //=> Thu Sep 11 2014 00:00:00 */function addDays(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var date = toDate(dirtyDate); var amount = toInteger(dirtyAmount); date.setDate(date.getDate() + amount); return date;}// CONCATENATED MODULE: ./node_modules/date-fns/esm/subDays/index.js/** * @name subDays * @category Day Helpers * @summary Subtract the specified number of days from the given date. * * @description * Subtract the specified number of days from the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of days to be subtracted * @returns {Date} the new date with the days subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 10 days from 1 September 2014: * var result = subDays(new Date(2014, 8, 1), 10) * //=> Fri Aug 22 2014 00:00:00 */function subDays(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var amount = toInteger(dirtyAmount); return addDays(dirtyDate, -amount);}// CONCATENATED MODULE: ./node_modules/date-fns/esm/getDaysInMonth/index.js/** * @name getDaysInMonth * @category Month Helpers * @summary Get the number of days in a month of the given date. * * @description * Get the number of days in a month of the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the given date * @returns {Number} the number of days in a month * @throws {TypeError} 1 argument required * * @example * // How many days are in February 2000? * var result = getDaysInMonth(new Date(2000, 1)) * //=> 29 */function getDaysInMonth(dirtyDate) { if (arguments.length < 1) { throw new TypeError('1 argument required, but only ' + arguments.length + ' present'); } var date = toDate(dirtyDate); var year = date.getFullYear(); var monthIndex = date.getMonth(); var lastDayOfMonth = new Date(0); lastDayOfMonth.setFullYear(year, monthIndex + 1, 0); lastDayOfMonth.setHours(0, 0, 0, 0); return lastDayOfMonth.getDate();}// CONCATENATED MODULE: ./node_modules/date-fns/esm/addMonths/index.js/** * @name addMonths * @category Month Helpers * @summary Add the specified number of months to the given date. * * @description * Add the specified number of months to the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of months to be added * @returns {Date} the new date with the months added * @throws {TypeError} 2 arguments required * * @example * // Add 5 months to 1 September 2014: * var result = addMonths(new Date(2014, 8, 1), 5) * //=> Sun Feb 01 2015 00:00:00 */function addMonths(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var date = toDate(dirtyDate); var amount = toInteger(dirtyAmount); var desiredMonth = date.getMonth() + amount; var dateWithDesiredMonth = new Date(0); dateWithDesiredMonth.setFullYear(date.getFullYear(), desiredMonth, 1); dateWithDesiredMonth.setHours(0, 0, 0, 0); var daysInMonth = getDaysInMonth(dateWithDesiredMonth); // Set the last day of the new month // if the original date was the last day of the longer month date.setMonth(desiredMonth, Math.min(daysInMonth, date.getDate())); return date;}// CONCATENATED MODULE: ./node_modules/date-fns/esm/subMonths/index.js/** * @name subMonths * @category Month Helpers * @summary Subtract the specified number of months from the given date. * * @description * Subtract the specified number of months from the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of months to be subtracted * @returns {Date} the new date with the months subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 5 months from 1 February 2015: * var result = subMonths(new Date(2015, 1, 1), 5) * //=> Mon Sep 01 2014 00:00:00 */function subMonths(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var amount = toInteger(dirtyAmount); return addMonths(dirtyDate, -amount);}// CONCATENATED MODULE: ./node_modules/date-fns/esm/addYears/index.js/** * @name addYears * @category Year Helpers * @summary Add the specified number of years to the given date. * * @description * Add the specified number of years to the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of years to be added * @returns {Date} the new date with the years added * @throws {TypeError} 2 arguments required * * @example * // Add 5 years to 1 September 2014: * var result = addYears(new Date(2014, 8, 1), 5) * //=> Sun Sep 01 2019 00:00:00 */function addYears(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var amount = toInteger(dirtyAmount); return addMonths(dirtyDate, amount * 12);}// CONCATENATED MODULE: ./node_modules/date-fns/esm/subYears/index.js/** * @name subYears * @category Year Helpers * @summary Subtract the specified number of years from the given date. * * @description * Subtract the specified number of years from the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of years to be subtracted * @returns {Date} the new date with the years subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 5 years from 1 September 2014: * var result = subYears(new Date(2014, 8, 1), 5) * //=> Tue Sep 01 2009 00:00:00 */function subYears(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var amount = toInteger(dirtyAmount); return addYears(dirtyDate, -amount);}// CONCATENATED MODULE: ./node_modules/date-fns/esm/addMilliseconds/index.js/** * @name addMilliseconds * @category Millisecond Helpers * @summary Add the specified number of milliseconds to the given date. * * @description * Add the specified number of milliseconds to the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of milliseconds to be added * @returns {Date} the new date with the milliseconds added * @throws {TypeError} 2 arguments required * * @example * // Add 750 milliseconds to 10 July 2014 12:45:30.000: * var result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750) * //=> Thu Jul 10 2014 12:45:30.750 */function addMilliseconds(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var timestamp = toDate(dirtyDate).getTime(); var amount = toInteger(dirtyAmount); return new Date(timestamp + amount);}// CONCATENATED MODULE: ./node_modules/date-fns/esm/addSeconds/index.js/** * @name addSeconds * @category Second Helpers * @summary Add the specified number of seconds to the given date. * * @description * Add the specified number of seconds to the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of seconds to be added * @returns {Date} the new date with the seconds added * @throws {TypeError} 2 arguments required * * @example * // Add 30 seconds to 10 July 2014 12:45:00: * var result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30) * //=> Thu Jul 10 2014 12:45:30 */function addSeconds(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var amount = toInteger(dirtyAmount); return addMilliseconds(dirtyDate, amount * 1000);}// CONCATENATED MODULE: ./node_modules/date-fns/esm/subSeconds/index.js/** * @name subSeconds * @category Second Helpers * @summary Subtract the specified number of seconds from the given date. * * @description * Subtract the specified number of seconds from the given date. * * ### v2.0.0 breaking changes: * * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). * * @param {Date|Number} date - the date to be changed * @param {Number} amount - the amount of seconds to be subtracted * @returns {Date} the new date with the seconds subtracted * @throws {TypeError} 2 arguments required * * @example * // Subtract 30 seconds from 10 July 2014 12:45:00: * var result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30) * //=> Thu Jul 10 2014 12:44:30 */function subSeconds(dirtyDate, dirtyAmount) { if (arguments.length < 2) { throw new TypeError('2 arguments required, but only ' + arguments.length + ' present'); } var amount = toInteger(dirtyAmount); return addSeconds(dirtyDate, -amount);}// CONCATENATED MODULE: ./src/util.js // Чтобы сделать возможным автоматическую генерации кода вызова этих функций без использования eval// (см. https://stackoverflow.com/questions/9464921/dynamically-call-local-function-in-javascript)var dateFns = { subDays: subDays, subMonths: subMonths, subYears: subYears};var captureUserRegexp = /(?:Участник:|Участница:|Обсуждение_участника:|Обсуждение_участницы:|Служебная:Вклад\/)([^#\/]+)/;/* harmony default export */ var util = ({ prepareDate: function prepareDate(date, isPeriodEnd) { if (!date) return; var addOneDay = false; if (typeof_default()(date) !== 'object') { if (date.indexOf(':') !== -1) { date += 'Z'; } else if (isPeriodEnd) { addOneDay = true; } date = new Date(date); } if (addOneDay) { date = addDays(date, 1); } return isPeriodEnd ? subSeconds(date, 1) : date; }, ddmmyyyyToYyyymmdd: function ddmmyyyyToYyyymmdd(ddmmyyyy) { var date = ddmmyyyy.match(/(\d{2})-(\d{2})-(\d{4})/); return date && "".concat(date[3], "-").concat(date[2], "-").concat(date[1]); }, getMonthNumber: function getMonthNumber(mesyats) { var month = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'].indexOf(mesyats) + 1; return month || null; }, plural: function plural(count, one, two, five) { var cases = [five, one, two, two, two, five]; // 0, 1, 2, 3, 4, 5 return count % 100 > 4 && count % 100 < 20 ? five : cases[Math.min(count % 10, 5)]; }, getLastMatch: function getLastMatch(s, regexp) { if (!regexp.global) { console.error('Функция работает только с регулярными выражениями с флагом global.'); return; } var matches; var lastMatch; while (matches = regexp.exec(s)) { lastMatch = matches; } return lastMatch; }, filterUserLinks: function filterUserLinks() { return decodeURIComponent($(this).attr('href')).match(captureUserRegexp); }, getUserNameFromLink: function getUserNameFromLink($link) { var userMatches = decodeURIComponent($link.attr('href')).match(captureUserRegexp); return userMatches && userMatches[1].replace(/&action=edit.*/, '').replace(/_/g, ' '); }, removeDuplicates: function removeDuplicates(array) { return toConsumableArray_default()(new Set(array)); }, isntVotePage: function isntVotePage(entry) { var title = entry.title; var isAdminElection = title.startsWith('Википедия:Заявки на статус администратора/') && title !== 'Википедия:Заявки на статус администратора/Шаблон' && title !== 'Википедия:Заявки на статус администратора/Шаблон требований к голосующим' && title !== 'Википедия:Заявки на статус администратора/styles.css'; var isBureaucratElection = title.startsWith('Википедия:Заявки на статус администратора/') && title !== 'Википедия:Заявки на статус администратора/Шаблон' && title !== 'Википедия:Заявки на статус администратора/Шаблон требований к голосующим' && title !== 'Википедия:Заявки на статус администратора/styles.css'; var isConfirmation = title.startsWith('Википедия:Конфирмации/') && title !== 'Википедия:Конфирмации/Шаблон'; var isArbcomElection = title.startsWith('Википедия:Выборы арбитров/'); return !(isAdminElection || isBureaucratElection || isConfirmation || isArbcomElection); }, isntAutomaticAction: function isntAutomaticAction(event) { var notCountedActions = ['approve-a', 'approve-ia', 'approve2-a', 'approve2-ia', 'autopatrol', 'autopromote', 'delete_redir', 'hit', 'move', 'move_prot', 'move_redir', 'renameuser', 'thank']; return !(notCountedActions.indexOf(event.action) !== -1 || event.type === 'create' && event.action === 'create' || event.type === 'newusers'); }, createSubFunc: function createSubFunc(value, unit) { var ending; switch (unit) { case 'day': ending = 'days'; break; case 'month': ending = 'months'; break; case 'year': ending = 'years'; break; case 'days': case 'years': case 'days': ending = unit; } if (!ending) return; return function (date) { return dateFns['sub' + ending[0].toUpperCase() + ending.slice(1)].call(null, date, value); }; }, calcOptimalLimit: function calcOptimalLimit(neededEditCount) { return Math.round(Math.max(neededEditCount, 200) * 1.2); }, otherThanMeets: function otherThanMeets(result) { return result.conclusion !== 'meets'; }});// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/classCallCheck.jsvar classCallCheck = __webpack_require__(5);var classCallCheck_default = /*#__PURE__*/__webpack_require__.n(classCallCheck);// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/createClass.jsvar createClass = __webpack_require__(6);var createClass_default = /*#__PURE__*/__webpack_require__.n(createClass);// CONCATENATED MODULE: ./src/User.jsvar isCurrentUserSysop = mw.config.get('wgUserGroups').indexOf('sysop') !== -1;var User_User =/*#__PURE__*/function () { function User(name) { classCallCheck_default()(this, User); this.name = name; if (cc.admin && cc.admin.isRelevantPage()) { this.nameWhenVoted = name; this.votes = []; } } createClass_default()(User, [{ key: "changeName", value: function changeName(newName) { this.name = newName; this.missing = null; this.infoRequest = null; } }, { key: "checkOne", value: function () { var _checkOne = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee(criterion) { var entry, options, result; return regenerator_default.a.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (cc.apiRateLimit) { _context.next = 8; break; } _context.t0 = cc.currentUser; if (!_context.t0) { _context.next = 6; break; } _context.next = 5; return cc.currentUser.getUserInfo(); case 5: _context.t0 = _context.sent; case 6: entry = _context.t0; cc.apiRateLimit = entry && entry.rights && entry.rights.indexOf('apihighlimits') !== -1 ? 5000 : 500; case 8: options = Object.assign({}, criterion); delete options.type; delete options.text; if (!criterion.needsManualCheck) { _context.next = 15; break; } result = { result: 'needsManualCheck' }; _context.next = 32; break; case 15: if (!this.missing) { _context.next = 19; break; } result = { result: 'userMissing' }; _context.next = 32; break; case 19: if (!this[criterion.type]) { _context.next = 25; break; } _context.next = 22; return this[criterion.type](options); case 22: result = _context.sent; _context.next = 32; break; case 25: if (!cc.customHandlers[criterion.type]) { _context.next = 31; break; } _context.next = 28; return cc.customHandlers[criterion.type](this, options); case 28: result = _context.sent; _context.next = 32; break; case 31: throw new Error("\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u0442\u0438\u043F \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u044F ".concat(criterion.type, ".")); case 32: result.user = this; result.criterion = criterion; return _context.abrupt("return", result); case 35: case "end": return _context.stop(); } } }, _callee, this); })); function checkOne(_x) { return _checkOne.apply(this, arguments); } return checkOne; }() }, { key: "check", value: function () { var _check = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee2(criteria) { var _this = this; var results, dataRename, entry, newUserName, renameDate, dataMove, entryMove, newUserNameMove, renameDateMove; return regenerator_default.a.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!Array.isArray(criteria)) { criteria = [criteria]; } case 1: if (false) {} _context2.next = 4; return Promise.all(criteria.map(function (criterion) { return _this.checkOne(criterion); })); case 4: results = _context2.sent; if (!(!this.missing && !results.some(function (result) { return ['notMeets', 'notEnoughRights'].indexOf(result.result) !== -1; }))) { _context2.next = 7; break; } return _context2.abrupt("break", 34); case 7: _context2.next = 9; return new mw.Api().get({ action: 'query', list: 'logevents', letype: 'renameuser', letitle: 'Участник:' + this.name, formatversion: 2 }); case 9: dataRename = _context2.sent; entry = dataRename && dataRename.query && dataRename.query.logevents && dataRename.query.logevents[0]; newUserName = entry && entry.params && entry.params.newuser; renameDate = entry && entry.timestamp && new Date(entry.timestamp); if (!(newUserName && (!this.votes || !this.votes.length || renameDate > this.votes[0].date))) { _context2.next = 17; break; } this.changeName(newUserName); _context2.next = 32; break; case 17: if (!this.missing) { _context2.next = 31; break; } _context2.next = 20; return new mw.Api().get({ action: 'query', list: 'logevents', letype: 'move', letitle: 'Участник:' + this.name, formatversion: 2 }); case 20: dataMove = _context2.sent; entryMove = dataMove && dataMove.query && dataMove.query.logevents && dataMove.query.logevents[0]; newUserNameMove = entryMove && entryMove.comment && // Не всегда умещается, см. https:https://www.search.com.vn/wiki/index.php?lang=ru&q=Участник:Hausratte&action=history entryMove.comment.indexOf('Автоматическое переим') !== -1 && entryMove.ns && entryMove.ns === 2 && entryMove.params && entryMove.params.target_title && entryMove.params.target_title.slice(entryMove.params.target_title.indexOf(':') + 1); renameDateMove = entryMove && entryMove.timestamp && new Date(entryMove.timestamp); if (!(newUserNameMove && (!this.votes || !this.votes.length || renameDateMove > this.votes[0].date))) { _context2.next = 28; break; } this.changeName(newUserNameMove); _context2.next = 29; break; case 28: return _context2.abrupt("break", 34); case 29: _context2.next = 32; break; case 31: return _context2.abrupt("break", 34); case 32: _context2.next = 1; break; case 34: return _context2.abrupt("return", results); case 35: case "end": return _context2.stop(); } } }, _callee2, this); })); function check(_x2) { return _check.apply(this, arguments); } return check; }() }, { key: "getUserInfo", value: function getUserInfo() { var _this2 = this; if (this.infoRequest) { return this.infoRequest; } else { this.infoRequest = new mw.Api().get({ action: 'query', list: 'users', ususers: this.name, usprop: 'registration|editcount|groups|rights', formatversion: 2 }).then(function (data) { var entry = data && data.query && data.query.users && data.query.users[0]; if (entry && entry.missing) { // Если критериев, требующих получения списка users, нет, это свойство останется // незаполненным _this2.missing = true; } return entry; }); return this.infoRequest; } } }, { key: "requestContribs", value: function () { var _requestContribs = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee3(options, enoughEditCount) { var contribs, uccontinue, doContinue, uclimit, data, entries; return regenerator_default.a.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: contribs = []; case 1: uclimit = void 0; if (enoughEditCount) { uclimit = Math.min(cc.apiRateLimit, options.filterVotes ? cc.util.calcOptimalLimit(enoughEditCount - contribs.length) : enoughEditCount - contribs.length); } else { uclimit = cc.apiRateLimit; } _context3.next = 5; return new mw.Api().get({ list: 'usercontribs', ucprop: 'title|timestamp', ucuser: this.name, ucnamespace: options.ns, ucstart: options.periodStart && options.periodStart.toISOString(), ucend: options.periodEnd && options.periodEnd.toISOString(), ucdir: 'newer', uclimit: uclimit, uccontinue: uccontinue, formatversion: 2 }); case 5: data = _context3.sent; entries = data && data.query && data.query.usercontribs; if (entries) { _context3.next = 9; break; } return _context3.abrupt("break", 15); case 9: if (options.filterVotes) { entries = entries.filter(cc.util.isntVotePage); } contribs.push.apply(contribs, toConsumableArray_default()(entries)); uccontinue = data && data["continue"] && data["continue"].uccontinue; doContinue = uccontinue && (!enoughEditCount || contribs.length < enoughEditCount); if (options.filterVotes && uclimit < cc.apiRateLimit && doContinue) { console.info("\u041D\u0435\u043E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0441\u0447\u0451\u0442 \u0432 \u0444\u0443\u043D\u043A\u0446\u0438\u0438 calcOptimalLimit: \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043E ".concat(uclimit, ", \u043D\u0430\u0448\u043B\u043E\u0441\u044C ").concat(entries.length, ", \u043F\u0440\u0438\u0448\u043B\u043E\u0441\u044C \u0437\u0430\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C \u0435\u0449\u0451 \u0437\u0430\u043F\u0438\u0441\u0438. \u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A ").concat(this.name, "."), entries); } case 14: if (doContinue) { _context3.next = 1; break; } case 15: return _context3.abrupt("return", contribs); case 16: case "end": return _context3.stop(); } } }, _callee3, this); })); function requestContribs(_x3, _x4) { return _requestContribs.apply(this, arguments); } return requestContribs; }() }, { key: "requestDeletedContribs", value: function () { var _requestDeletedContribs = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee4(options, enoughEditCount) { var deletedContribs, adrcontinue, doContinue, adrlimit, data, entries, revisions, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, entry; return regenerator_default.a.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: deletedContribs = []; case 1: adrlimit = void 0; if (enoughEditCount) { adrlimit = Math.min(cc.apiRateLimit, options.filterVotes ? cc.util.calcOptimalLimit(enoughEditCount - deletedContribs.length) : enoughEditCount - deletedContribs.length); } else { adrlimit = cc.apiRateLimit; } _context4.next = 5; return new mw.Api().get({ action: 'query', list: 'alldeletedrevisions', adrprop: 'timestamp', adruser: this.name, adrstart: options.periodStart && options.periodStart.toISOString(), adrend: options.periodEnd && options.periodEnd.toISOString(), adrdir: 'newer', adrlimit: adrlimit, adrcontinue: adrcontinue, formatversion: 2 }); case 5: data = _context4.sent; entries = data && data.query && data.query.alldeletedrevisions; if (entries) { _context4.next = 9; break; } return _context4.abrupt("break", 35); case 9: if (options.filterVotes) { entries = entries.filter(cc.util.isntVotePage); } revisions = []; _iteratorNormalCompletion = true; _didIteratorError = false; _iteratorError = undefined; _context4.prev = 14; for (_iterator = entries[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { entry = _step.value; revisions.push.apply(revisions, toConsumableArray_default()(entry.revisions)); } _context4.next = 22; break; case 18: _context4.prev = 18; _context4.t0 = _context4["catch"](14); _didIteratorError = true; _iteratorError = _context4.t0; case 22: _context4.prev = 22; _context4.prev = 23; if (!_iteratorNormalCompletion && _iterator["return"] != null) { _iterator["return"](); } case 25: _context4.prev = 25; if (!_didIteratorError) { _context4.next = 28; break; } throw _iteratorError; case 28: return _context4.finish(25); case 29: return _context4.finish(22); case 30: deletedContribs.push.apply(deletedContribs, revisions); adrcontinue = data && data["continue"] && data["continue"].adrcontinue; doContinue = adrcontinue && (!enoughEditCount || deletedContribs.length < enoughEditCount); if (options.filterVotes && adrlimit < cc.apiRateLimit && doContinue) { console.info("\u041D\u0435\u043E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0441\u0447\u0451\u0442 \u0432 \u0444\u0443\u043D\u043A\u0446\u0438\u0438 calcOptimalLimit: \u0437\u0430\u043F\u0440\u043E\u0448\u0435\u043D\u043E ".concat(adrlimit, ", \u043D\u0430\u0448\u043B\u043E\u0441\u044C ").concat(revisions.length, ", \u043F\u0440\u0438\u0448\u043B\u043E\u0441\u044C \u0437\u0430\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C \u0435\u0449\u0451 \u0437\u0430\u043F\u0438\u0441\u0438. \u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A ").concat(this.name, "."), entries); } case 34: if (doContinue) { _context4.next = 1; break; } case 35: return _context4.abrupt("return", deletedContribs); case 36: case "end": return _context4.stop(); } } }, _callee4, this, [[14, 18, 22, 30], [23,, 25, 29]]); })); function requestDeletedContribs(_x5, _x6) { return _requestDeletedContribs.apply(this, arguments); } return requestDeletedContribs; }() }, { key: "collectActions", value: function () { var _collectActions = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee5(options, enoughActionCount) { var actions, contribs, deletedContribs, lecontinue, data, entries; return regenerator_default.a.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: actions = []; if (options.deleted == undefined) { options.deleted = true; } _context5.next = 4; return this.requestContribs(options, enoughActionCount); case 4: contribs = _context5.sent; actions.push.apply(actions, toConsumableArray_default()(contribs)); if (!(options.deleted && isCurrentUserSysop && (!enoughActionCount || actions.length < enoughActionCount))) { _context5.next = 11; break; } _context5.next = 9; return this.requestDeletedContribs(options, enoughActionCount && enoughActionCount - actions.length); case 9: deletedContribs = _context5.sent; actions.push.apply(actions, toConsumableArray_default()(deletedContribs)); case 11: if (!(!enoughActionCount || actions.length < enoughActionCount)) { _context5.next = 22; break; } case 12: _context5.next = 14; return new mw.Api().get({ action: 'query', list: 'logevents', leprop: 'timestamp|type', leuser: this.name, lestart: options.periodStart && options.periodStart.toISOString(), leend: options.periodEnd && options.periodEnd.toISOString(), ledir: 'newer', lelimit: cc.apiRateLimit, lecontinue: lecontinue, formatversion: 2 }); case 14: data = _context5.sent; entries = data && data.query && data.query.logevents; if (entries) { _context5.next = 18; break; } return _context5.abrupt("break", 22); case 18: entries = entries.filter(cc.util.isntAutomaticAction); actions.push.apply(actions, toConsumableArray_default()(entries)); lecontinue = data && data["continue"] && data["continue"].lecontinue; case 21: if (lecontinue && (!enoughActionCount || actions.length < enoughActionCount)) { _context5.next = 12; break; } case 22: actions.sort(function (a, b) { if (a.timestamp > b.timestamp) { return 1; } else if (a.timestamp < b.timestamp) { return -1; } else { return 0; } }); return _context5.abrupt("return", actions); case 24: case "end": return _context5.stop(); } } }, _callee5, this); })); function collectActions(_x7, _x8) { return _collectActions.apply(this, arguments); } return collectActions; }() /* Функции типов критериев */ }, { key: "editCountNotLess", value: function () { var _editCountNotLess = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee6(options) { var safeValue, edits, deletedContribs; return regenerator_default.a.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: options.periodStart = cc.util.prepareDate(options.periodStart); options.periodEnd = cc.util.prepareDate(options.periodEnd, true); options.meaningful = Boolean(Number(options.meaningful)); options.deleted = Boolean(Number(options.deleted)); if (options.meaningful && options.margin == undefined) { options.margin = 0.5; } if (options.margin == undefined) { options.margin = 0; } safeValue = Math.round(options.value * (1 + options.margin)); _context6.next = 9; return this.requestContribs(options, safeValue); case 9: edits = _context6.sent; if (!(edits.length >= safeValue)) { _context6.next = 14; break; } return _context6.abrupt("return", { result: 'meets', editCount: edits.length }); case 14: if (!(options.deleted && isCurrentUserSysop)) { _context6.next = 19; break; } _context6.next = 17; return this.requestDeletedContribs(options, safeValue - edits.length); case 17: deletedContribs = _context6.sent; edits.push.apply(edits, toConsumableArray_default()(deletedContribs)); case 19: if (!(edits.length >= safeValue)) { _context6.next = 23; break; } return _context6.abrupt("return", { result: 'meets', editCount: edits.length, edits: edits }); case 23: if (!(edits.length >= options.value)) { _context6.next = 27; break; } return _context6.abrupt("return", { result: !options.deleted || isCurrentUserSysop ? 'possiblyMeets' : 'notEnoughRights', editCount: edits.length, edits: edits }); case 27: return _context6.abrupt("return", { result: !options.deleted || isCurrentUserSysop ? 'notMeets' : 'notEnoughRights', editCount: edits.length, edits: edits }); case 28: case "end": return _context6.stop(); } } }, _callee6, this); })); function editCountNotLess(_x9) { return _editCountNotLess.apply(this, arguments); } return editCountNotLess; }() }, { key: "registrationDateNotLater", value: function () { var _registrationDateNotLater = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee7(options) { var entry, registrationDate, overallEditCount, dataUc; return regenerator_default.a.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: options.value = cc.util.prepareDate(options.value, true); _context7.next = 3; return this.getUserInfo(); case 3: entry = _context7.sent; if (!this.missing) { _context7.next = 6; break; } return _context7.abrupt("return", { result: 'userMissing' }); case 6: registrationDate = entry && entry.registration && new Date(entry.registration); overallEditCount = entry && entry.editcount; // У зарегистрировавшихся до 2 декабря 2005 года нет даты регистрации if (!(entry && !entry.registration)) { _context7.next = 13; break; } _context7.next = 11; return new mw.Api().get({ action: 'query', list: 'usercontribs', ucuser: this.name, ucdir: 'newer', uclimit: 1, formatversion: 2 }); case 11: dataUc = _context7.sent; registrationDate = dataUc && dataUc.query && dataUc.query.usercontribs && dataUc.query.usercontribs[0] && dataUc.query.usercontribs[0].timestamp && new Date(dataUc.query.usercontribs[0].timestamp); case 13: return _context7.abrupt("return", { result: registrationDate <= options.value ? 'meets' : 'notMeets', registrationDate: registrationDate, overallEditCount: overallEditCount }); case 14: case "end": return _context7.stop(); } } }, _callee7, this); })); function registrationDateNotLater(_x10) { return _registrationDateNotLater.apply(this, arguments); } return registrationDateNotLater; }() }, { key: "editsBetweenDates", value: function () { var _editsBetweenDates = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee8(options) { var data; return regenerator_default.a.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: options.periodStart = cc.util.prepareDate(options.periodStart); options.periodEnd = cc.util.prepareDate(options.periodEnd, true); _context8.next = 4; return new mw.Api().get({ action: 'query', list: 'usercontribs', ucuser: this.name, ucstart: options.periodStart.toISOString(), ucend: options.periodEnd.toISOString(), ucdir: 'newer', uclimit: 1, formatversion: 2 }); case 4: data = _context8.sent; if (!(data && data.query && data.query.usercontribs && data.query.usercontribs.length)) { _context8.next = 9; break; } return _context8.abrupt("return", { result: 'meets' }); case 9: return _context8.abrupt("return", { result: 'notMeets' }); case 10: case "end": return _context8.stop(); } } }, _callee8, this); })); function editsBetweenDates(_x11) { return _editsBetweenDates.apply(this, arguments); } return editsBetweenDates; }() }, { key: "hadFlagFor", value: function () { var _hadFlagFor = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee9(options) { var lecontinue, entries, data, logEvents, multiplierMin, multiplierMax, neededPeriodMin, neededPeriodMax, periodsCount, result, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, flag, period, lastEndedHavingFlag, lastStartedHavingFlag, i, entry, newGroups, startedHavingFlag, endedHavingFlag, laterEntry, laterNewGroups, subFunc; return regenerator_default.a.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: options.referenceDate = cc.util.prepareDate(options.referenceDate, true); if (!options.flags) { options.flags = options.flag && [options.flag]; } entries = []; case 3: _context9.next = 5; return new mw.Api().get({ action: 'query', list: 'logevents', letype: 'rights', letitle: 'Участник:' + this.name, leend: options.referenceDate && options.referenceDate.toISOString(), lelimit: cc.apiRateLimit, ledir: 'newer', formatversion: 2 }); case 5: data = _context9.sent; logEvents = data && data.query && data.query.logevents; if (logEvents) { _context9.next = 9; break; } return _context9.abrupt("break", 12); case 9: entries.push.apply(entries, toConsumableArray_default()(logEvents)); lecontinue = data && data["continue"] && data["continue"].lecontinue; case 11: if (lecontinue) { _context9.next = 3; break; } case 12: _context9.t0 = options.unit; _context9.next = _context9.t0 === 'year' ? 15 : _context9.t0 === 'years' ? 15 : _context9.t0 === 'month' ? 18 : _context9.t0 === 'months' ? 18 : _context9.t0 === 'day' ? 21 : _context9.t0 === 'days' ? 21 : 22; break; case 15: multiplierMin = 1000 * 60 * 60 * 24 * 365; multiplierMax = 1000 * 60 * 60 * 24 * 366; return _context9.abrupt("break", 22); case 18: multiplierMin = 1000 * 60 * 60 * 24 * 28; multiplierMax = 1000 * 60 * 60 * 24 * 31; return _context9.abrupt("break", 22); case 21: multiplierMin = multiplierMax = 1000 * 60 * 60 * 24; case 22: neededPeriodMin = multiplierMin * options.value; neededPeriodMax = multiplierMax * options.value; periodsCount = 0; _iteratorNormalCompletion2 = true; _didIteratorError2 = false; _iteratorError2 = undefined; _context9.prev = 28; _iterator2 = options.flags[Symbol.iterator](); case 30: if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) { _context9.next = 72; break; } flag = _step2.value; period = 0; lastEndedHavingFlag = void 0; lastStartedHavingFlag = void 0; i = 0; case 36: if (!(i < entries.length)) { _context9.next = 58; break; } entry = entries[i]; newGroups = entry.params && entry.params.newgroups; if (!(newGroups && newGroups.indexOf(flag) !== -1)) { _context9.next = 55; break; } startedHavingFlag = new Date(entry.timestamp); lastStartedHavingFlag = startedHavingFlag; endedHavingFlag = void 0; i++; case 44: if (!(i < entries.length)) { _context9.next = 53; break; } laterEntry = entries[i]; laterNewGroups = laterEntry.params && laterEntry.params.newgroups; if (!(laterNewGroups && !(laterNewGroups.indexOf(flag) !== -1))) { _context9.next = 50; break; } lastEndedHavingFlag = endedHavingFlag = new Date(entries[i].timestamp); return _context9.abrupt("break", 53); case 50: i++; _context9.next = 44; break; case 53: period += (endedHavingFlag ? endedHavingFlag.getTime() : Date.now()) - startedHavingFlag.getTime(); periodsCount++; case 55: i++; _context9.next = 36; break; case 58: if (!(period >= neededPeriodMax)) { _context9.next = 62; break; } return _context9.abrupt("return", { result: 'meets', flag: flag, period: period }); case 62: if (!(periodsCount === 1)) { _context9.next = 68; break; } // Если период всего один, вычисляем по классическим правилам для дат (например, 1 месяц // назад для 31 марта — 28 февраля в невисокосном году) subFunc = cc.util.createSubFunc(options.value, options.unit); if (!(subFunc(lastEndedHavingFlag) > lastStartedHavingFlag)) { _context9.next = 66; break; } return _context9.abrupt("return", { result: 'meets', flag: flag, period: period }); case 66: _context9.next = 69; break; case 68: if (period >= neededPeriodMin) { // Если периодов несколько и трактовка количества месяцев/лет может отличаться, оставляем // выводы на усмотрение бюрократам result = { result: 'possiblyMeets', flag: flag, period: period }; } case 69: _iteratorNormalCompletion2 = true; _context9.next = 30; break; case 72: _context9.next = 78; break; case 74: _context9.prev = 74; _context9.t1 = _context9["catch"](28); _didIteratorError2 = true; _iteratorError2 = _context9.t1; case 78: _context9.prev = 78; _context9.prev = 79; if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) { _iterator2["return"](); } case 81: _context9.prev = 81; if (!_didIteratorError2) { _context9.next = 84; break; } throw _iteratorError2; case 84: return _context9.finish(81); case 85: return _context9.finish(78); case 86: return _context9.abrupt("return", result || { result: 'notMeets' }); case 87: case "end": return _context9.stop(); } } }, _callee9, this, [[28, 74, 78, 86], [79,, 81, 85]]); })); function hadFlagFor(_x12) { return _hadFlagFor.apply(this, arguments); } return hadFlagFor; }() }, { key: "notLostFlagInLast", value: function () { var _notLostFlagInLast = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee10(options) { var subFunc, lecontinue, entries, data, logEvents, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _iterator3, _step3, flag, _iteratorNormalCompletion4, _didIteratorError4, _iteratorError4, _iterator4, _step4, entry, oldGroups, newGroups; return regenerator_default.a.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: options.referenceDate = cc.util.prepareDate(options.referenceDate || new Date()); subFunc = cc.util.createSubFunc(options.value, options.unit); if (!options.flags) { options.flags = options.flag && [options.flag]; } entries = []; case 4: _context10.next = 6; return new mw.Api().get({ action: 'query', list: 'logevents', letype: 'rights', letitle: 'Участник:' + this.name, lestart: subFunc(options.referenceDate).toISOString(), leend: options.referenceDate.toISOString(), lelimit: cc.apiRateLimit, ledir: 'newer', formatversion: 2 }); case 6: data = _context10.sent; logEvents = data && data.query && data.query.logevents; if (logEvents) { _context10.next = 10; break; } return _context10.abrupt("break", 13); case 10: entries.push.apply(entries, toConsumableArray_default()(logEvents)); lecontinue = data && data["continue"] && data["continue"].lecontinue; case 12: if (lecontinue) { _context10.next = 4; break; } case 13: _iteratorNormalCompletion3 = true; _didIteratorError3 = false; _iteratorError3 = undefined; _context10.prev = 16; _iterator3 = options.flags[Symbol.iterator](); case 18: if (_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done) { _context10.next = 51; break; } flag = _step3.value; _iteratorNormalCompletion4 = true; _didIteratorError4 = false; _iteratorError4 = undefined; _context10.prev = 23; _iterator4 = entries[Symbol.iterator](); case 25: if (_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done) { _context10.next = 34; break; } entry = _step4.value; oldGroups = entry.params && entry.params.oldgroups; newGroups = entry.params && entry.params.newgroups; if (!(oldGroups && newGroups && oldGroups.indexOf(flag) !== -1 && !(newGroups.indexOf(flag) !== -1))) { _context10.next = 31; break; } return _context10.abrupt("return", { result: 'notMeets', flag: flag, lostFlagTimestamp: entry.timestamp }); case 31: _iteratorNormalCompletion4 = true; _context10.next = 25; break; case 34: _context10.next = 40; break; case 36: _context10.prev = 36; _context10.t0 = _context10["catch"](23); _didIteratorError4 = true; _iteratorError4 = _context10.t0; case 40: _context10.prev = 40; _context10.prev = 41; if (!_iteratorNormalCompletion4 && _iterator4["return"] != null) { _iterator4["return"](); } case 43: _context10.prev = 43; if (!_didIteratorError4) { _context10.next = 46; break; } throw _iteratorError4; case 46: return _context10.finish(43); case 47: return _context10.finish(40); case 48: _iteratorNormalCompletion3 = true; _context10.next = 18; break; case 51: _context10.next = 57; break; case 53: _context10.prev = 53; _context10.t1 = _context10["catch"](16); _didIteratorError3 = true; _iteratorError3 = _context10.t1; case 57: _context10.prev = 57; _context10.prev = 58; if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) { _iterator3["return"](); } case 60: _context10.prev = 60; if (!_didIteratorError3) { _context10.next = 63; break; } throw _iteratorError3; case 63: return _context10.finish(60); case 64: return _context10.finish(57); case 65: return _context10.abrupt("return", { result: 'meets' }); case 66: case "end": return _context10.stop(); } } }, _callee10, this, [[16, 53, 57, 65], [23, 36, 40, 48], [41,, 43, 47], [58,, 60, 64]]); })); function notLostFlagInLast(_x13) { return _notLostFlagInLast.apply(this, arguments); } return notLostFlagInLast; }() }, { key: "notInactiveFor", value: function () { var _notInactiveFor = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee11(options) { var subFunc, actions, i, previousDate, currentDate; return regenerator_default.a.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: options.periodStart = cc.util.prepareDate(options.periodStart); options.periodEnd = cc.util.prepareDate(options.periodEnd, true); subFunc = cc.util.createSubFunc(options.value, options.unit); _context11.next = 5; return this.collectActions(options); case 5: actions = _context11.sent; i = 0; case 7: if (!(i <= actions.length)) { _context11.next = 15; break; } previousDate = i === 0 ? options.periodStart : new Date(actions[i - 1].timestamp); currentDate = i === actions.length ? options.periodEnd : new Date(actions[i].timestamp); if (!(subFunc(currentDate) > previousDate)) { _context11.next = 12; break; } return _context11.abrupt("return", { result: isCurrentUserSysop ? 'notMeets' : 'notEnoughRights', inactivityPeriodStart: previousDate, inactivityPeriodEnd: currentDate }); case 12: i++; _context11.next = 7; break; case 15: return _context11.abrupt("return", { result: 'meets' }); case 16: case "end": return _context11.stop(); } } }, _callee11, this); })); function notInactiveFor(_x14) { return _notInactiveFor.apply(this, arguments); } return notInactiveFor; }() }, { key: "actionCountNotLess", value: function () { var _actionCountNotLess = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee12(options) { var actions; return regenerator_default.a.wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: options.periodStart = cc.util.prepareDate(options.periodStart); options.periodEnd = cc.util.prepareDate(options.periodEnd, true); _context12.next = 4; return this.collectActions(options, options.value); case 4: actions = _context12.sent; if (!(actions.length < options.value)) { _context12.next = 9; break; } return _context12.abrupt("return", { result: isCurrentUserSysop ? 'notMeets' : 'notEnoughRights', actionCount: actions.length, actions: actions }); case 9: return _context12.abrupt("return", { result: 'meets', actionCount: actions.length, actions: actions }); case 10: case "end": return _context12.stop(); } } }, _callee12, this); })); function actionCountNotLess(_x15) { return _actionCountNotLess.apply(this, arguments); } return actionCountNotLess; }() }, { key: "noActiveBlockBetweenDates", value: function () { var _noActiveBlockBetweenDates = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee13(options) { var data, entry, partiallyBlockedInSpecifiedNs; return regenerator_default.a.wrap(function _callee13$(_context13) { while (1) { switch (_context13.prev = _context13.next) { case 0: options.periodStart = cc.util.prepareDate(options.periodStart); options.periodEnd = cc.util.prepareDate(options.periodEnd, true); _context13.next = 4; return new mw.Api().get({ action: 'query', list: 'blocks', bkprop: 'timestamp|expiry|restrictions', bkuser: this.name, formatversion: 2 }); case 4: data = _context13.sent; entry = data && data.query && data.query.blocks && data.query.blocks[0]; if (entry) { _context13.next = 8; break; } return _context13.abrupt("return"); case 8: partiallyBlockedInSpecifiedNs = false; if (options.ns && entry.restrictions && entry.restrictions.namespaces && entry.restrictions.namespaces.indexOf(options.ns) !== -1) { partiallyBlockedInSpecifiedNs = true; } if (!(new Date(entry.timestamp) <= options.periodStart && (entry.expiry === 'infinity' || new Date(entry.expiry) > options.periodEnd) && (!entry.restrictions || Array.isArray(entry.restrictions) && !entry.restrictions.length || partiallyBlockedInSpecifiedNs))) { _context13.next = 14; break; } return _context13.abrupt("return", { result: 'notMeets' }); case 14: return _context13.abrupt("return", { result: 'meets' }); case 15: case "end": return _context13.stop(); } } }, _callee13, this); })); function noActiveBlockBetweenDates(_x16) { return _noActiveBlockBetweenDates.apply(this, arguments); } return noActiveBlockBetweenDates; }() }]); return User;}();// CONCATENATED MODULE: ./src/applications/admin.jsfunction extractVotes() { return $('#За').closest('h3').nextUntil('h3:has([id^="Вопросы"])').filter('ol').children('li').map(function (i, li) { var date; var $li = $(li); var $el = $li.clone(); $el.find('li, dd').remove(); var text = $el.text(); var matches = cc.util.getLastMatch(text, /(\b\d?\d):(\d\d), (\d\d?) ([а-я]+) (\d\d\d\d) \(UTC\)/g); if (matches) { var hours = matches[1]; var minutes = matches[2]; var day = matches[3]; var month = cc.util.getMonthNumber(matches[4]); var year = matches[5]; if (!month) return; date = new Date("".concat(year, "-").concat(month, "-").concat(day, " ").concat(hours, ":").concat(minutes, "Z")); } var $userLinks = $el.find('a').filter(cc.util.filterUserLinks); var usersInMsg = $userLinks.map(function (i, el) { return cc.util.getUserNameFromLink($(el)); }).get(); var authorName = usersInMsg[usersInMsg.length - 1]; if (!authorName) return; var author = cc.getUser(authorName); var vote = { $el: $li, author: author, date: date, confusingAuthor: cc.util.removeDuplicates(usersInMsg).length > 1 && (!/\(UTC\)\s*/.test(text) || text.indexOf('(UTC)') !== text.lastIndexOf('(UTC)') || $userLinks.closest('small').length), anchor: "vote".concat(i) }; author.votes.push(vote); return vote; }).get();}function updateButtonsBlock() { $buttonsBlock.children().detach(); $(buttons).map(function (i, el) { return el.hide ? null : el.$element[0]; }).appendTo($buttonsBlock);}function showButton(id) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = buttons[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var button = _step.value; if (id === button.bindings.click[0].method.name) { button.hide = false; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator["return"] != null) { _iterator["return"](); } } finally { if (_didIteratorError) { throw _iteratorError; } } } updateButtonsBlock();}function hideButton(id) { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = buttons[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var button = _step2.value; if (id === button.bindings.click[0].method.name) { button.hide = true; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) { _iterator2["return"](); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } updateButtonsBlock();}var $criteriaBox;var buttons;var $buttonsBlock;var rawCriteria = false;var candidate;var voterCriteria;var candidateCriteria;var admin_votingPeriod;var votingPeriodOk;var resultsTable;var _isRelevantPage;/* harmony default export */ var admin = ({ getAdminCandidateCriteria: function getAdminCandidateCriteria(votingPeriod) { return [{ text: 'стаж регистрации в русскоязычном разделе Википедии не менее 6 месяцев', type: 'registrationDateNotLater', // Прибавляем один день согласно тому, как считается разница в критериях для голосующих и на // выборах в АК value: addDays(subMonths(votingPeriod.startTimeless, 6), 1) }, { text: 'не менее 1000 правок', type: 'editCountNotLess', value: 1000, periodEnd: votingPeriod.start }, { text: 'не баллотировавшийся в администраторы в последние 3 месяца', needsManualCheck: true }, { text: 'не лишённый полномочий администратора в последние 3 месяца', type: 'notLostFlagInLast', flag: 'sysop', value: 3, unit: 'month', referenceDate: votingPeriod.startTimeless }]; }, getBureaucratCandidateCriteria: function getBureaucratCandidateCriteria(votingPeriod) { return [{ text: 'стаж регистрации в русскоязычном разделе Википедии не менее 2 лет', type: 'registrationDateNotLater', // Прибавляем один день согласно тому, как считается разница в критериях для голосующих и на // выборах в АК value: addDays(subYears(votingPeriod.startTimeless, 2), 1) }, { text: 'не менее 2000 правок', type: 'editCountNotLess', value: 2000, periodEnd: votingPeriod.start }, { text: 'выполнявший обязанности администратора Википедии либо арбитра в течение не менее полугода до момента выдвижения', type: 'hadFlagFor', flags: ['sysop', 'arbcom'], value: 6, unit: 'month', referenceDate: votingPeriod.startTimeless }, { text: 'не имевший за последний год периодов неактивности в русской Википедии длительностью более 3 месяцев', type: 'notInactiveFor', value: 3, unit: 'month', periodStart: subYears(votingPeriod.startTimeless, 1), periodEnd: votingPeriod.startTimeless }, { text: 'не имевший за последние полгода до момента выдвижения взысканий, наложенных Арбитражным комитетом по итогам рассмотрения исков против кандидата', needsManualCheck: true, comment: '(См. [[Арбитраж:Решения]].)' }, { text: 'не баллотировавшийся в бюрократы в последние 3 месяца', needsManualCheck: true }, { text: 'не лишённый полномочий бюрократа в последние 3 месяца', type: 'notLostFlagInLast', flag: 'bureaucrat', value: 3, unit: 'month', referenceDate: votingPeriod.startTimeless }]; }, isRelevantPage: function isRelevantPage() { if (typeof _isRelevantPage === 'undefined') { _isRelevantPage = Boolean($('.criteriaCheck-adminElection, .criteriaCheck-bureaucratElection, .criteriaCheck-confirmation').length); } return _isRelevantPage; }, main: function main() { // Данные по голосующим $criteriaBox = $('.criteriaCheck-criteria'); voterCriteria = cc.extractCriteria($criteriaBox); if (!$criteriaBox.length) { $criteriaBox = $('#Требования_к_голосующим').closest('h3').next('div'); $criteriaBox.addClass('criteriaCheck-criteria'); } var criteria4End; if (!voterCriteria.length) { rawCriteria = true; var $criteria = $criteriaBox.find('li'); var criteria1Text = $criteria.eq(0).text().replace(/[,;.]$/, ''); var criteria1Matches = criteria1Text.match(/(\d+) прав/); var criteria1Value = criteria1Matches && Number(criteria1Matches[1]); var criteria2Text = $criteria.eq(1).text().replace(/[,;.]$/, ''); var criteria2Matches = criteria2Text.match(/\d{2}-\d{2}-\d{4}/); var criteria2Value = criteria2Matches && cc.util.ddmmyyyyToYyyymmdd(criteria2Matches[0]); var criteria3Text = $criteria.eq(2).text().replace(/[,;.]$/, ''); var criteria3Matches = criteria3Text.match(/(\d{2}-\d{2}-\d{4}) по (\d{2}-\d{2}-\d{4})/); var criteria3Start = criteria3Matches && cc.util.ddmmyyyyToYyyymmdd(criteria3Matches[1]); var criteria3End = criteria3Matches && cc.util.ddmmyyyyToYyyymmdd(criteria3Matches[2]); var criteria4Text = $criteria.eq(3).text().replace(/[,;.]$/, ''); var criteria4Matches = criteria4Text.match(/(\d{2}-\d{2}-\d{4}) по (\d{2}-\d{2}-\d{4})/); var criteria4Start = criteria4Matches && cc.util.ddmmyyyyToYyyymmdd(criteria4Matches[1]); criteria4End = criteria4Matches && cc.util.ddmmyyyyToYyyymmdd(criteria4Matches[2]); voterCriteria = [{ text: criteria1Text, type: 'editCountNotLess', ns: 0, value: criteria1Value, periodEnd: criteria4End, meaningful: true }, { text: criteria2Text, type: 'registrationDateNotLater', value: criteria2Value }, { text: criteria3Text, type: 'editsBetweenDates', periodStart: criteria3Start, periodEnd: criteria3End }, { text: criteria4Text, type: 'editsBetweenDates', periodStart: criteria4Start, periodEnd: criteria4End }]; } var deriveDates = function deriveDates(votingPeriod) { if (!votingPeriod.start) return; votingPeriod.startTimeless = cc.util.prepareDate(votingPeriod.start.replace(/ [0-9:]+$/g, '')); votingPeriod.start = cc.util.prepareDate(votingPeriod.start); if (!votingPeriod.start) return; votingPeriod.end = cc.util.prepareDate(votingPeriod.end, true); return votingPeriod; }; admin_votingPeriod = Object.assign({}, $('.criteriaCheck-votingPeriod').data()); admin_votingPeriod = deriveDates(admin_votingPeriod); if (!admin_votingPeriod && // Удостоверяемся, что критерий тот, который нам нужен voterCriteria.length === 4 && voterCriteria[3].type === 'editsBetweenDates' && voterCriteria[3].periodEnd) { admin_votingPeriod = deriveDates({ start: voterCriteria[3].periodEnd }); } votingPeriodOk = admin_votingPeriod && admin_votingPeriod.start && admin_votingPeriod.end; // Данные по кандидату candidate = $criteriaBox.length && cc.getUser(cc.util.getUserNameFromLink($('h2').find('a').filter(cc.util.filterUserLinks).first())); if (admin_votingPeriod) { if ($('.criteriaCheck-adminElection').length) { candidateCriteria = cc.admin.getAdminCandidateCriteria(admin_votingPeriod); } if ($('.criteriaCheck-bureaucratElection').length) { candidateCriteria = cc.admin.getBureaucratCandidateCriteria(admin_votingPeriod); } } // Парсим таблицу результатов resultsTable = { supportVotesCount: Number($('.criteriaCheck-supportVotesCount').text()), opposeVotesCount: Number($('.criteriaCheck-opposeVotesCount').text()), neutralVotesCount: Number($('.criteriaCheck-neutralVotesCount').text()), supportPercent: Number($('.criteriaCheck-supportPercent').text().replace(/[^0-9,.]/g, '').replace(/,/, '.')) }; resultsTable.totalVotes = resultsTable.supportVotesCount + resultsTable.opposeVotesCount + resultsTable.neutralVotesCount; // Выводим в глобальный объект на случай, если какой-то скрипт захочет воспользоваться данными cc.admin.candidate = candidate; cc.admin.voterCriteria = voterCriteria; cc.admin.candidateCriteria = candidateCriteria; cc.admin.votingPeriod = admin_votingPeriod; cc.admin.resultsTable = resultsTable; // Создаём блок ссылок $buttonsBlock = $('<div>').addClass('criteriaCheck-buttonsBlock'); buttons = []; if (mw.config.get('wgUserName')) { var $button = new OO.ui.ButtonWidget({ label: 'Проверить, соответствую ли я требованиям', classes: ['criteriaCheck-button'] }); $button.on('click', cc.admin.checkMe); buttons.push($button); } if (mw.config.get('wgUserGroups').indexOf('bureaucrat') !== -1 || cc.currentUser === candidate) { var _$button = new OO.ui.ButtonWidget({ label: 'Проверить все голоса', classes: ['criteriaCheck-button'] }); _$button.on('click', cc.admin.checkAll); buttons.push(_$button); } if (candidateCriteria && (mw.config.get('wgUserGroups').indexOf('bureaucrat') !== -1 || cc.currentUser === candidate)) { var _$button2 = new OO.ui.ButtonWidget({ label: 'Проверить соответствие кандидата требованиям для выдвижения', classes: ['criteriaCheck-button'] }); _$button2.on('click', cc.admin.checkCandidate); buttons.push(_$button2); } ; updateButtonsBlock(); $buttonsBlock.appendTo($criteriaBox); }, checkMe: function () { var _checkMe = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee() { var $checkingMessage, summary, message, text, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _iterator3, _step3, result, _text, currentDate; return regenerator_default.a.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: hideButton('checkMe'); $checkingMessage = cc.createMessage({ icon: 'loading', text: 'Проверяем…', big: true }).appendTo($criteriaBox); message = { icons: [], texts: [] }; _context.prev = 3; _context.t0 = cc; _context.next = 7; return cc.currentUser.check(voterCriteria); case 7: _context.t1 = _context.sent; summary = _context.t0.summarize.call(_context.t0, _context.t1); _context.next = 16; break; case 11: _context.prev = 11; _context.t2 = _context["catch"](3); console.error(_context.t2); message = { icons: ['error'], texts: ['Не удалось завершить проверку. См. подробности в консоли (F12 → Консоль). '] }; showButton('checkMe'); case 16: if (!summary) { _context.next = 48; break; } if (!(summary.conclusion === 'meets')) { _context.next = 21; break; } message = { icons: ['check'], texts: ['Ура, вы соответствуете требованиям и можете голосовать. '] }; _context.next = 48; break; case 21: if (!(summary.conclusion === 'notMeets')) { _context.next = 27; break; } text = "\u041A \u0441\u043E\u0436\u0430\u043B\u0435\u043D\u0438\u044E, \u0432\u044B \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442\u0435 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044E: <em>".concat(summary.firstFailedResult.criterion.text, "</em>. "); if (summary.firstFailedResult.criterion.type === 'editCountNotLess') { text += "\u0423 \u0432\u0430\u0441 \u0442\u043E\u043B\u044C\u043A\u043E ".concat(summary.firstFailedResult.editCount, " \u043F\u0440\u0430\u0432\u043E\u043A. "); } message = { icons: ['close'], texts: [text] }; _context.next = 48; break; case 27: if (!(summary.conclusion === 'possiblyMeets')) { _context.next = 48; break; } message.icons = ['help']; _iteratorNormalCompletion3 = true; _didIteratorError3 = false; _iteratorError3 = undefined; _context.prev = 32; for (_iterator3 = summary.results.filter(cc.util.otherThanMeets)[Symbol.iterator](); !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { result = _step3.value; _text = "\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044E: <em>".concat(result.criterion.text, "</em>. "); if (result.criterion.type === 'editCountNotLess') { _text += "У вас " + result.editCount + " правок, но, согласно [[Википедия:Правила выборов администраторов и бюрократов#Кто может голосовать на выборах бюрократов и администраторов|правилам]], незначительные правки не учитываются при подсчёте. Требуется ручной подсчёт. "; } message.texts.push(_text); } _context.next = 40; break; case 36: _context.prev = 36; _context.t3 = _context["catch"](32); _didIteratorError3 = true; _iteratorError3 = _context.t3; case 40: _context.prev = 40; _context.prev = 41; if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) { _iterator3["return"](); } case 43: _context.prev = 43; if (!_didIteratorError3) { _context.next = 46; break; } throw _iteratorError3; case 46: return _context.finish(43); case 47: return _context.finish(40); case 48: currentDate = new Date(); if (votingPeriodOk && (currentDate < admin_votingPeriod.start || currentDate > admin_votingPeriod.end || $criteriaBox.closest('.ruwiki-closedDiscussion').length)) { message.texts[message.texts.length - 1] += currentDate < admin_votingPeriod.start ? 'Однако, голосование ещё не началось. ' : 'Однако, голосование уже закончилось. '; } message.big = true; $checkingMessage.remove(); $criteriaBox.append(cc.createMessage(message)); case 53: case "end": return _context.stop(); } } }, _callee, null, [[3, 11], [32, 36, 40, 48], [41,, 43, 47]]); })); function checkMe() { return _checkMe.apply(this, arguments); } return checkMe; }(), checkAll: function () { var _checkAll = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee2() { var $criteriaBoxMessage, $checkedPercent, votes, votesSummary, i, vote, $target, $message, message, category, badTiming, fitsOtherCriteria, j, summary, logLink, _text2, _iteratorNormalCompletion4, _didIteratorError4, _iteratorError4, _iterator4, _step4, result, _text3, _logLink, formUserList, text, icons, userList, _userList, _userList2; return regenerator_default.a.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: hideButton('checkAll'); $('.criteriaCheck-message').filter(function () { return !$(this).closest($criteriaBox).length; }).remove(); $criteriaBoxMessage = cc.createMessage({ icon: 'loading', text: 'Проверяем все голоса (<span class="criteriaCheck-checkedPercent">0</span>%)…', big: true }).appendTo($criteriaBox); $checkedPercent = $criteriaBoxMessage.find('.criteriaCheck-checkedPercent'); votes = extractVotes(); cc.admin.votes = votes; votesSummary = { meets: [], notMeets: [], possiblyMeets: [], error: [] }; i = 0; case 8: if (!(i < votes.length)) { _context2.next = 96; break; } $checkedPercent.text(Math.round(i / votes.length * 100)); vote = votes[i]; $target = vote.$el.contents().first().is('p, div') ? vote.$el.contents().first() : vote.$el; $message = cc.createMessage({ icon: 'loading' }); $target.prepend($message); message = { icons: [], texts: [] }; category = void 0; badTiming = false; fitsOtherCriteria = true; if (votingPeriodOk && vote.date && (vote.date < admin_votingPeriod.start || vote.date > admin_votingPeriod.end)) { badTiming = true; category = 'notMeets'; message = { icons: ['close'], texts: [vote.date < admin_votingPeriod.start ? 'Голос подан до начала голосования.' : 'Голос подан после окончания голосования.'] }; } j = 0; case 20: if (!(j < i)) { _context2.next = 28; break; } if (!(votes[j].author.name === vote.author.name)) { _context2.next = 25; break; } category = 'notMeets'; message = { icons: ['close'], texts: [vote.author.nameWhenVoted + ' уже голосовал.'] }; return _context2.abrupt("break", 28); case 25: j++; _context2.next = 20; break; case 28: summary = void 0; if (category) { _context2.next = 43; break; } _context2.prev = 30; _context2.t0 = cc; _context2.next = 34; return vote.author.check(voterCriteria); case 34: _context2.t1 = _context2.sent; summary = _context2.t0.summarize.call(_context2.t0, _context2.t1); _context2.next = 43; break; case 38: _context2.prev = 38; _context2.t2 = _context2["catch"](30); console.error(_context2.t2); category = 'error'; message = { icons: ['error'], texts: ['Не удалось завершить проверку. См. подробности в консоли (F12 → Консоль).'] }; case 43: if (!summary) { _context2.next = 83; break; } category = summary.conclusion; if (!(summary.conclusion === 'meets')) { _context2.next = 49; break; } message = { icons: ['check'], texts: [] }; _context2.next = 83; break; case 49: if (!(summary.conclusion === 'userMissing' || summary.warnings.indexOf('0edits') !== -1)) { _context2.next = 56; break; } category = 'possiblyMeets'; logLink = mw.util.getUrl('Служебная:Журналы', { page: 'Участник:' + vote.author.name }); message = { icons: ['help'], texts: [summary.conclusion === 'userMissing' ? "Участник " + vote.author.name + " не найден. Скорее всего, он был переименован, но в [" + logLink + " журнале] не найдено записи об этом. Необходима ручная проверка. " : "У участника " + vote.author.name + " всего 0 правок. Скорее всего, он был переименован, но в [" + logLink + " журнале] не найдено записи об этом. Необходима ручная проверка. "] }; fitsOtherCriteria = false; _context2.next = 83; break; case 56: if (!(summary.conclusion === 'notMeets')) { _context2.next = 62; break; } _text2 = "\u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044E: <em>".concat(summary.firstFailedResult.criterion.text, "</em>. "); if (summary.firstFailedResult.criterion.type === 'editCountNotLess') { _text2 += "\u0423 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430 \u0442\u043E\u043B\u044C\u043A\u043E ".concat(summary.firstFailedResult.editCount, " \u043F\u0440\u0430\u0432\u043E\u043A. "); } message = { icons: ['close'], texts: [_text2] }; _context2.next = 83; break; case 62: if (!(summary.conclusion === 'possiblyMeets')) { _context2.next = 83; break; } message.icons = ['help']; _iteratorNormalCompletion4 = true; _didIteratorError4 = false; _iteratorError4 = undefined; _context2.prev = 67; for (_iterator4 = summary.results.filter(cc.util.otherThanMeets)[Symbol.iterator](); !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { result = _step4.value; _text3 = "\u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A \u043C\u043E\u0436\u0435\u0442 \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044E: <em>".concat(result.criterion.text, "</em>. "); if (result.criterion.type === 'editCountNotLess') { _text3 += "\u0423 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430 ".concat(result.editCount, " \u043F\u0440\u0430\u0432\u043E\u043A. "); } _text3 += 'Необходима ручная проверка. '; // Если встретятся 2 и больше possiblyMeets или будет сомнение, что критерии проверены для // того участника (если в реплике больше одной ссылки на участника; см., например, // [[Википедия:Заявки на статус бюрократа/Deinocheirus]]), текст и во втором случае иконки // должны накапливаться. message.texts.push(_text3); } _context2.next = 75; break; case 71: _context2.prev = 71; _context2.t3 = _context2["catch"](67); _didIteratorError4 = true; _iteratorError4 = _context2.t3; case 75: _context2.prev = 75; _context2.prev = 76; if (!_iteratorNormalCompletion4 && _iterator4["return"] != null) { _iterator4["return"](); } case 78: _context2.prev = 78; if (!_didIteratorError4) { _context2.next = 81; break; } throw _iteratorError4; case 81: return _context2.finish(78); case 82: return _context2.finish(75); case 83: if (vote.confusingAuthor && !badTiming) { category = 'possiblyMeets'; message.icons.push('help'); message.texts.push("\u0418\u0437-\u0437\u0430 \u0441\u0442\u0440\u0430\u043D\u043D\u043E\u0439 \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0438 \u0441\u043A\u0440\u0438\u043F\u0442 \u043C\u043E\u0433 \u043F\u0435\u0440\u0435\u043F\u0443\u0442\u0430\u0442\u044C, \u043A\u0442\u043E \u0430\u0432\u0442\u043E\u0440 \u044D\u0442\u043E\u0433\u043E \u0433\u043E\u043B\u043E\u0441\u0430 (\u043E\u043D \u0434\u0443\u043C\u0430\u0435\u0442, \u0447\u0442\u043E \u044D\u0442\u043E ".concat(vote.author.nameWhenVoted, "). ")); fitsOtherCriteria = false; } if (vote.author.name !== vote.author.nameWhenVoted) { _logLink = mw.util.getUrl('Служебная:Журналы', { page: 'Участник:' + vote.author.nameWhenVoted }); message.texts.push("Соответствие требованиям определялось для учётной записи " + vote.author.name + ", в которую [" + logLink + " была переименована] учётная запись " + vote.author.nameWhenVoted + "."); } if (votingPeriodOk && !vote.date) { if (category === 'meets' || category === 'possiblyMeets') { message.texts.push('Не удалось определить время голоса. Необходимо проверить, подан ли голос вовремя. '); if (!vote.confusingAuthor) { category = 'possiblyMeets'; message.icons = ['help']; } } } if (category === 'possiblyMeets' && fitsOtherCriteria) { message.texts[message.texts.length - 1] += 'Остальным требованиям участник соответствует. '; } message.icons = cc.util.removeDuplicates(message.icons); message.accented = true; vote.summary = summary; votesSummary[category].push(vote); $message.remove(); $target.prepend(cc.createMessage(message, vote.anchor)); case 93: i++; _context2.next = 8; break; case 96: $checkedPercent.text('100'); cc.admin.votesSummary = votesSummary; formUserList = function formUserList(votes) { return votes.reduce(function (s, vote) { return s + "[[#" + vote.anchor + "|" + vote.author.nameWhenVoted + "]], "; }, '').slice(0, -2); }; text = 'Проверка завершена. '; if (votes.length) { if (rawCriteria) { text += 'Не были найдены метаданные о требованиях, поэтому они извлекались прямо из текста, что могло привести к ошибкам (к примеру, неизвестно время начала голосования, поэтому все правки в день начала включались при определении соответствия 1-му и 4-му требованию). '; } if (!votingPeriodOk) { text += 'Не были найдены корректные метаданные о дате начала и конца голосования, поэтому время подачи голосов не проверялось. '; } } else { text += 'Никто ещё не голосовал. '; } icons = []; if (votesSummary.error.length) { icons.push('error'); userList = formUserList(votesSummary.error); text += "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C ".concat(votesSummary.error.length, " ").concat(cc.util.plural(votesSummary.error.length, 'голос', 'голоса', 'голосов'), ": ").concat(userList, ". "); showButton('checkAll'); } if (votesSummary.notMeets.length) { icons.push('close'); _userList = formUserList(votesSummary.notMeets); text += "".concat(votesSummary.notMeets.length, " ").concat(cc.util.plural(votesSummary.notMeets.length, 'голос', 'голоса', 'голосов'), " \u043D\u0435 ").concat(cc.util.plural(votesSummary.notMeets.length, 'соответствует', 'соответствуют', 'соответствуют'), " \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C: ").concat(_userList, ". "); } if (votesSummary.possiblyMeets.length) { icons.push('help'); _userList2 = formUserList(votesSummary.possiblyMeets); text += "\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0443\u0447\u043D\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 ".concat(votesSummary.possiblyMeets.length, " ").concat(cc.util.plural(votesSummary.possiblyMeets.length, 'голоса', 'голосов', 'голосов'), ": ").concat(_userList2, ". "); } if (votesSummary.meets.length) { icons.push('check'); text += "".concat(votesSummary.meets.length, " ").concat(cc.util.plural(votesSummary.meets.length, 'голос соответствует', 'голоса соответствуют', 'голосов соответствуют'), " \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C. "); } $criteriaBoxMessage.remove(); $criteriaBox.append(cc.createMessage({ text: text, icons: icons, big: true })); if (votes.length && (resultsTable.totalVotes === votes.length || !resultsTable.totalVotes && resultsTable.totalVotes !== 0)) { $criteriaBox.append(cc.createMessage({ text: 'Так как участники не всегда корректно используют вики-разметку, нет гарантии, что скрипт верно извлёк все голоса. Пожалуйста, убедитесь, что все голоса были проверены: пройдитесь по списку голосов и удостоверьтесь, что у каждого голоса стоит отметка. ', icon: 'warning' })); } else if (resultsTable.totalVotes || resultsTable.totalVotes === 0) { $criteriaBox.append(cc.createMessage({ text: "<b>\u0427\u0438\u0441\u043B\u043E \u0433\u043E\u043B\u043E\u0441\u043E\u0432 \u0441\u043E\u0433\u043B\u0430\u0441\u043D\u043E \u0442\u0430\u0431\u043B\u0438\u0446\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 (".concat(resultsTable.totalVotes, ") \u043D\u0435 \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u0435\u0442 \u0441 \u0447\u0438\u0441\u043B\u043E\u043C \u0433\u043E\u043B\u043E\u0441\u043E\u0432 \u0441 \u0442\u043E\u0447\u043A\u0438 \u0437\u0440\u0435\u043D\u0438\u044F \u0441\u043A\u0440\u0438\u043F\u0442\u0430 (").concat(votes.length, ").</b> ") + (resultsTable.totalVotes > votes.length ? 'Пожалуйста, пройдитесь по списку голосов, найдите недостающие голоса и проверьте их вручную. ' : 'Пожалуйста, пройдитесь по списку голосов и удостоверьтесь в том, что отметки на них стоят корректно. '), icon: 'warning' })); } case 109: case "end": return _context2.stop(); } } }, _callee2, null, [[30, 38], [67, 71, 75, 83], [76,, 78, 82]]); })); function checkAll() { return _checkAll.apply(this, arguments); } return checkAll; }(), checkCandidate: function () { var _checkCandidate = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee3() { var $checkingMessage, summary, message, fitsOtherCriteria, text, _iteratorNormalCompletion5, _didIteratorError5, _iteratorError5, _iterator5, _step5, result, _text4, _text5, _text6, distance; return regenerator_default.a.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: hideButton('checkCandidate'); $checkingMessage = cc.createMessage({ icon: 'loading', text: 'Проверяем кандидата…', big: true }).appendTo($criteriaBox); message = { icons: [], texts: [] }; fitsOtherCriteria = true; _context3.prev = 4; _context3.t0 = cc; _context3.next = 8; return candidate.check(candidateCriteria); case 8: _context3.t1 = _context3.sent; summary = _context3.t0.summarize.call(_context3.t0, _context3.t1); _context3.next = 17; break; case 12: _context3.prev = 12; _context3.t2 = _context3["catch"](4); console.error(_context3.t2); message = { icons: ['error'], texts: ['Не удалось завершить проверку. См. подробности в консоли (F12 → Консоль). '] }; showButton('checkCandidate'); case 17: if (!summary) { _context3.next = 51; break; } if (!(summary.conclusion === 'meets')) { _context3.next = 22; break; } message = { icons: ['check'], texts: [] }; _context3.next = 49; break; case 22: if (!(summary.conclusion === 'notMeets')) { _context3.next = 28; break; } text = "\u041A\u0430\u043D\u0434\u0438\u0434\u0430\u0442 \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044E: <em>".concat(summary.firstFailedResult.criterion.text, "</em>. "); if (summary.firstFailedResult.criterion.type === 'editCountNotLess') { text += "\u0423 \u043D\u0435\u0433\u043E \u0442\u043E\u043B\u044C\u043A\u043E ".concat(summary.firstFailedResult.editCount, " \u043F\u0440\u0430\u0432\u043E\u043A. "); } message = { icons: ['close'], texts: [text] }; _context3.next = 49; break; case 28: if (!(summary.conclusion === 'possiblyMeets')) { _context3.next = 49; break; } message.icons = ['help']; _iteratorNormalCompletion5 = true; _didIteratorError5 = false; _iteratorError5 = undefined; _context3.prev = 33; for (_iterator5 = summary.results.filter(cc.util.otherThanMeets)[Symbol.iterator](); !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { result = _step5.value; if (result.result === 'notEnoughRights') { _text4 = "\u0423 \u0432\u0430\u0441 \u043D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u043F\u0440\u0430\u0432, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0432\u0441\u0435 \u0434\u0430\u043D\u043D\u044B\u0435, \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B\u0435 \u0434\u043B\u044F \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044F \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044E: <em>".concat(result.criterion.text, "</em>. \u0421\u043E\u0433\u043B\u0430\u0441\u043D\u043E \u0442\u0435\u043C \u0434\u0430\u043D\u043D\u044B\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C, \u043A\u0430\u043D\u0434\u0438\u0434\u0430\u0442 \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044F\u043C. "); message.texts.push(_text4); fitsOtherCriteria = false; } else if (result.result === 'needsManualCheck') { _text5 = "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0440\u0443\u0447\u043D\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044F \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044E: <em>".concat(result.criterion.text, "</em>. "); if (result.criterion.comment) { _text5 += result.criterion.comment + ' '; } message.texts.push(_text5); } else if (result.result === 'possiblyMeets') { _text6 = "\u041A\u0430\u043D\u0434\u0438\u0434\u0430\u0442 \u043C\u043E\u0436\u0435\u0442 \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0442\u0440\u0435\u0431\u043E\u0432\u0430\u043D\u0438\u044E: <em>".concat(result.criterion.text, "</em>. "); if (result.criterion.type === 'hadFlagFor') { distance = period % (1000 * 60 * 60 * 24); _text6 += "\u041A\u0430\u043D\u0434\u0430\u0434\u0430\u0442 \u043E\u0431\u043B\u0430\u0434\u0430\u043B \u0444\u043B\u0430\u0433\u043E\u043C ".concat(result.flag, " \u0432 \u0442\u0435\u0447\u0435\u043D\u0438\u0435 ").concat(plural(distance, 'дня', 'дней', 'дней'), ". "); } message.texts.push(_text6); } } _context3.next = 41; break; case 37: _context3.prev = 37; _context3.t3 = _context3["catch"](33); _didIteratorError5 = true; _iteratorError5 = _context3.t3; case 41: _context3.prev = 41; _context3.prev = 42; if (!_iteratorNormalCompletion5 && _iterator5["return"] != null) { _iterator5["return"](); } case 44: _context3.prev = 44; if (!_didIteratorError5) { _context3.next = 47; break; } throw _iteratorError5; case 47: return _context3.finish(44); case 48: return _context3.finish(41); case 49: if (summary.result === 'meets') { message.texts.push('Кандидат соответствует требованиям для выдвижения. '); } if (summary.conclusion === 'possiblyMeets' && fitsOtherCriteria) { message.texts[message.texts.length - 1] += 'Остальным требованиям кандидат соответствует. '; } case 51: message.big = true; $checkingMessage.remove(); $criteriaBox.append(cc.createMessage(message)); case 54: case "end": return _context3.stop(); } } }, _callee3, null, [[4, 12], [33, 37, 41, 49], [42,, 44, 48]]); })); function checkCandidate() { return _checkCandidate.apply(this, arguments); } return checkCandidate; }()});// CONCATENATED MODULE: ./src/applications/arbcom.js/* harmony default export */ var arbcom = ({ getVoterCriteria: function getVoterCriteria(nominationStartDate) { return [{ text: 'стаж не менее трёх месяцев', type: 'registrationDateNotLater', // addDays, потому что трактовка с датой невключительно закреплена на основных страницах // выборов value: addDays(subMonths(nominationStartDate, 3), 1) }, { text: 'не менее 500 действий к началу выдвижения кандидатов', type: 'actionCountNotLess', value: 500, periodEnd: nominationStartDate, filterVotes: true }, { text: 'не менее 100 действий за последние полгода до начала выдвижения кандидатов', type: 'actionCountNotLess', value: 100, periodStart: subMonths(nominationStartDate, 6), periodEnd: nominationStartDate, filterVotes: true }]; }, getCandidateCriteria: function getCandidateCriteria(nominationStartDate) { return [{ text: 'с момента регистрации в русской Википедии до момента начала номинации кандидатов прошло не менее 8 месяцев', type: 'registrationDateNotLater', // addDays, потому что эта трактовка закреплена на основных страницах выборов value: addDays(subMonths(nominationStartDate, 8), 1) }, { text: 'сделал в русской Википедии не менее 2000 правок до момента начала номинации', type: 'editCountNotLess', value: 2000, periodEnd: nominationStartDate }, { text: 'Кандидатом в арбитры не может быть бессрочно заблокированный участник, а также участник, имеющий на момент начала выдвижения кандидатур блокировку, срок действия которой истекает после окончания процедуры обсуждения кандидатур арбитров', type: 'noActiveBlockBetweenDates', ns: 4, periodStart: nominationStartDate, periodEnd: addDays(nominationStartDate, 10) }]; }, extractVoters: function () { var _extractVoters = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee(election) { var response, text, content, $sandbox, $userLinks, voters; return regenerator_default.a.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (election) { _context.next = 2; break; } return _context.abrupt("return"); case 2: election = encodeURI(election.replace(/ /g, '_')); _context.next = 5; return fetch("https://www.search.com.vn/wiki/ru/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%92%D1%8B%D0%B1%D0%BE%D1%80%D1%8B_%D0%B0%D1%80%D0%B1%D0%B8%D1%82%D1%80%D0%BE%D0%B2/".concat(election, "/%D0%93%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/*"), { credentials: 'omit' }); case 5: response = _context.sent; _context.next = 8; return response.text(); case 8: text = _context.sent; content = text.replace(/^[\s\S]+id="mw-content-text"[^>]+>/, '').replace(/<\/div><noscript>[\s\S]+$/, ''); $sandbox = $('<div>').addClass('criteriaCheck-sandbox').append(content).appendTo('body'); $userLinks = $sandbox.find('.mw-parser-output table:has(td[id]) a').filter(cc.util.filterUserLinks); voters = cc.util.removeDuplicates($userLinks.map(function (i, el) { return cc.util.getUserNameFromLink($(el)); }).get()); $sandbox.remove(); return _context.abrupt("return", voters); case 15: case "end": return _context.stop(); } } }, _callee); })); function extractVoters(_x) { return _extractVoters.apply(this, arguments); } return extractVoters; }()});// CONCATENATED MODULE: ./src/index.jsmw.loader.using(['mediawiki.api', 'mediawiki.util', 'oojs', 'oojs-ui']).done(function () { cc.util = util; cc.admin = admin; cc.arbcom = arbcom; cc.customHandlers = []; cc.createMessage = function (message, anchor) { function parseText(text) { mw.messages.set('criteriaCheck-temp', text); return mw.message('criteriaCheck-temp').parse(); } if (!message.icons) { message.icons = message.icon ? [message.icon] : []; } var $icons = message.icons.map(function (icon) { return $('<span>').addClass('criteriaCheck-icon').addClass('criteriaCheck-icon-' + icon); }); if (!message.texts) { message.texts = message.text ? [message.text] : []; } var text = message.texts.length === 1 ? message.texts[0] : message.texts.reduce(function (s, text, i) { return "".concat(s).concat(i + 1, ". ").concat(text, " "); }, ''); var $el = $(text ? '<div>' : '<span>').addClass('criteriaCheck-message').attr('id', anchor).append($icons); if (text) { text = parseText(text); var $text = $('<span>').append(text); $el.addClass('criteriaCheck-message-withText').append($text); } if (message.accented) { $el.addClass('criteriaCheck-message-accented'); } if (message.big) { $el.addClass('criteriaCheck-message-big'); } return $el; }; cc.getUser = function (name) { if (!name) return; cc.users = cc.users || []; if (!cc.users[name]) { cc.users[name] = new User_User(name); } return cc.users[name]; }; cc.extractCriteria = function ($container) { return $container.find('[data-criterion]').map(function () { var data = Object.assign({}, $(this).data()); data.text = $(this).text().replace(/[,;.]$/, ''); data.type = data.criterion; delete data.criterion; return data; }).get(); }; cc.summarize = function (results) { var details = []; var conclusion = 'meets'; var warnings = []; var summary = {}; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = results[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var result = _step.value; if (result.result === 'userMissing') { conclusion = 'userMissing'; break; } else if (result.result === 'notMeets') { conclusion = 'notMeets'; summary.firstFailedResult = result; } else if (['possiblyMeets', 'notEnoughRights', 'needsManualCheck'].indexOf(result.result) !== -1 && conclusion !== 'notMeets') { conclusion = 'possiblyMeets'; } if (['notEnoughRights', 'needsManualCheck'].indexOf(result.result) !== -1) { warnings.push(result.result); } if (result.overallEditCount === 0) { warnings.push('0edits'); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator["return"] != null) { _iterator["return"](); } } finally { if (_didIteratorError) { throw _iteratorError; } } } warnings = cc.util.removeDuplicates(warnings); if (conclusion !== 'userMissing') { summary.results = results; summary.warnings = warnings; } summary.conclusion = conclusion; summary.user = results && results[0].user; return summary; }; cc.check = /*#__PURE__*/ function () { var _ref = asyncToGenerator_default()( /*#__PURE__*/ regenerator_default.a.mark(function _callee(userNames, criteria, callback) { var doSummarize, results, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, userName, result, _args = arguments; return regenerator_default.a.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: doSummarize = _args.length > 3 && _args[3] !== undefined ? _args[3] : true; if (typeof userNames === 'string') { userNames = [userNames]; } results = []; _iteratorNormalCompletion2 = true; _didIteratorError2 = false; _iteratorError2 = undefined; _context.prev = 6; _iterator2 = userNames[Symbol.iterator](); case 8: if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) { _context.next = 19; break; } userName = _step2.value; _context.next = 12; return cc.getUser(userName).check(criteria); case 12: result = _context.sent; if (doSummarize) { result = cc.summarize(result); } results.push(result); if (callback) { callback(result); } case 16: _iteratorNormalCompletion2 = true; _context.next = 8; break; case 19: _context.next = 25; break; case 21: _context.prev = 21; _context.t0 = _context["catch"](6); _didIteratorError2 = true; _iteratorError2 = _context.t0; case 25: _context.prev = 25; _context.prev = 26; if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) { _iterator2["return"](); } case 28: _context.prev = 28; if (!_didIteratorError2) { _context.next = 31; break; } throw _iteratorError2; case 31: return _context.finish(28); case 32: return _context.finish(25); case 33: return _context.abrupt("return", results); case 34: case "end": return _context.stop(); } } }, _callee, null, [[6, 21, 25, 33], [26,, 28, 32]]); })); return function (_x, _x2, _x3) { return _ref.apply(this, arguments); }; }(); cc.addHandler = function (criterionType, handler) { cc.customHandlers[criterionType] = handler; }; cc.currentUser = cc.getUser(mw.config.get('wgUserName')); if (cc.admin.isRelevantPage()) { cc.admin.main(); } // Предзагружаем иконки var $div = $('<div>').css({ position: 'absolute', top: -10000 }).append(cc.createMessage({ icons: ['check', 'close', 'help', 'error', 'loading', 'warning'] })).appendTo('body'); setTimeout(function () { $div.remove(); }, 1);});/***/ })/******/ ]);
🔥 Top keywords: Заглавная страницаЯндексЦивилёва, Анна ЕвгеньевнаБотулизмСлужебная:ПоискЧемпионат Европы по футболу 2024Годовщины свадьбыYouTubeГорнин, Леонид ВладимировичЦивилёв, Сергей ЕвгеньевичШевцова, Татьяна ВикторовнаКурбан-байрамЧемпионат Европы по футболу 2020Фрадков, Михаил ЕфимовичБРИКССпортивные игры БРИКС 2024Список умерших в 2024 годуДом Дракона (2-й сезон)Мбаппе, КилианПопов, Павел АнатольевичРоссияСавельев, Олег ГенриховичЧемпионат Европы по футболуЦаликов, Руслан ХаджисмеловичСборная Украины по футболуБриджертоныПацаны (4-й сезон)Путин, Владимир ВладимировичКлеопатраЛепс, Григорий ВикторовичЛукаку, РомелуДом ДраконаГоловоломка 2Криштиану РоналдуТедеско, ДоменикоСборная Румынии по футболуРебров, Сергей СтаниславовичЧикатило, Андрей РомановичСборная Франции по футболу