- // ==UserScript==
- // @name Embed Me!
- // @version 0.4.0
- // @description Embed video, images from links.
- // @license MIT
- // @author eight04 <eight04@gmail.com>
- // @homepageURL https://github.com/eight04/embed-me
- // @supportURL https://github.com/eight04/embed-me/issues
- // @namespace eight04.blogspot.com
- // @grant GM_addStyle
- // @grant GM_registerMenuCommand
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_deleteValue
- // @grant GM_xmlhttpRequest
- // @require https://gf.qytechs.cn/scripts/371339-gm-webextpref/code/GM_webextPref.js?version=705415
- // @connect gfycat.com
- // @connect soundcloud.com
- // @connect www.youtube.com
- // @noframes true
- // @include *
- // ==/UserScript==
-
- const _module_exports_$9 = {};
- Object.defineProperty(_module_exports_$9, "__esModule", { value: true });
- _module_exports_$9.parseRotation = _module_exports_$9.parseRotationName = _module_exports_$9.Rotation = _module_exports_$9.parsePiece = _module_exports_$9.parsePieceName = _module_exports_$9.isMinoPiece = _module_exports_$9.Piece = void 0;
- var Piece;
- (function (Piece) {
- Piece[Piece["Empty"] = 0] = "Empty";
- Piece[Piece["I"] = 1] = "I";
- Piece[Piece["L"] = 2] = "L";
- Piece[Piece["O"] = 3] = "O";
- Piece[Piece["Z"] = 4] = "Z";
- Piece[Piece["T"] = 5] = "T";
- Piece[Piece["J"] = 6] = "J";
- Piece[Piece["S"] = 7] = "S";
- Piece[Piece["Gray"] = 8] = "Gray";
- })(Piece = _module_exports_$9.Piece || (_module_exports_$9.Piece = {}));
- function isMinoPiece(piece) {
- return piece !== Piece.Empty && piece !== Piece.Gray;
- }
- _module_exports_$9.isMinoPiece = isMinoPiece;
- function parsePieceName(piece) {
- switch (piece) {
- case Piece.I:
- return 'I';
- case Piece.L:
- return 'L';
- case Piece.O:
- return 'O';
- case Piece.Z:
- return 'Z';
- case Piece.T:
- return 'T';
- case Piece.J:
- return 'J';
- case Piece.S:
- return 'S';
- case Piece.Gray:
- return 'X';
- case Piece.Empty:
- return '_';
- }
- throw new Error("Unknown piece: ".concat(piece));
- }
- _module_exports_$9.parsePieceName = parsePieceName;
- function parsePiece(piece) {
- switch (piece.toUpperCase()) {
- case 'I':
- return Piece.I;
- case 'L':
- return Piece.L;
- case 'O':
- return Piece.O;
- case 'Z':
- return Piece.Z;
- case 'T':
- return Piece.T;
- case 'J':
- return Piece.J;
- case 'S':
- return Piece.S;
- case 'X':
- case 'GRAY':
- return Piece.Gray;
- case ' ':
- case '_':
- case 'EMPTY':
- return Piece.Empty;
- }
- throw new Error("Unknown piece: ".concat(piece));
- }
- _module_exports_$9.parsePiece = parsePiece;
- var Rotation;
- (function (Rotation) {
- Rotation[Rotation["Spawn"] = 0] = "Spawn";
- Rotation[Rotation["Right"] = 1] = "Right";
- Rotation[Rotation["Reverse"] = 2] = "Reverse";
- Rotation[Rotation["Left"] = 3] = "Left";
- })(Rotation = _module_exports_$9.Rotation || (_module_exports_$9.Rotation = {}));
- function parseRotationName(rotation) {
- switch (rotation) {
- case Rotation.Spawn:
- return 'spawn';
- case Rotation.Left:
- return 'left';
- case Rotation.Right:
- return 'right';
- case Rotation.Reverse:
- return 'reverse';
- }
- throw new Error("Unknown rotation: ".concat(rotation));
- }
- _module_exports_$9.parseRotationName = parseRotationName;
- function parseRotation(rotation) {
- switch (rotation.toLowerCase()) {
- case 'spawn':
- return Rotation.Spawn;
- case 'left':
- return Rotation.Left;
- case 'right':
- return Rotation.Right;
- case 'reverse':
- return Rotation.Reverse;
- }
- throw new Error("Unknown rotation: ".concat(rotation));
- }
- _module_exports_$9.parseRotation = parseRotation;
-
- const _module_exports_$8 = {};
- Object.defineProperty(_module_exports_$8, "__esModule", { value: true });
- _module_exports_$8.getPieces = _module_exports_$8.getBlocks = _module_exports_$8.getBlockXYs = _module_exports_$8.getBlockPositions = _module_exports_$8.PlayField = _module_exports_$8.InnerField = _module_exports_$8.createInnerField = _module_exports_$8.createNewInnerField = void 0;
- var FieldConstants$2 = {
- Width: 10,
- Height: 23,
- PlayBlocks: 23 * 10, // Height * Width
- };
- function createNewInnerField() {
- return new InnerField({});
- }
- _module_exports_$8.createNewInnerField = createNewInnerField;
- function createInnerField(field) {
- var innerField = new InnerField({});
- for (var y = -1; y < FieldConstants$2.Height; y += 1) {
- for (var x = 0; x < FieldConstants$2.Width; x += 1) {
- var at = field.at(x, y);
- innerField.setNumberAt(x, y, (0, _module_exports_$9.parsePiece)(at));
- }
- }
- return innerField;
- }
- _module_exports_$8.createInnerField = createInnerField;
- var InnerField = /** @class */ (function () {
- function InnerField(_a) {
- var _b = _a.field, field = _b === void 0 ? InnerField.create(FieldConstants$2.PlayBlocks) : _b, _c = _a.garbage, garbage = _c === void 0 ? InnerField.create(FieldConstants$2.Width) : _c;
- this.field = field;
- this.garbage = garbage;
- }
- InnerField.create = function (length) {
- return new PlayField({ length: length });
- };
- InnerField.prototype.fill = function (operation) {
- this.field.fill(operation);
- };
- InnerField.prototype.fillAll = function (positions, type) {
- this.field.fillAll(positions, type);
- };
- InnerField.prototype.canFill = function (piece, rotation, x, y) {
- var _this = this;
- var positions = getBlockPositions(piece, rotation, x, y);
- return positions.every(function (_a) {
- var px = _a[0], py = _a[1];
- return 0 <= px && px < 10
- && 0 <= py && py < FieldConstants$2.Height
- && _this.getNumberAt(px, py) === _module_exports_$9.Piece.Empty;
- });
- };
- InnerField.prototype.canFillAll = function (positions) {
- var _this = this;
- return positions.every(function (_a) {
- var x = _a.x, y = _a.y;
- return 0 <= x && x < 10
- && 0 <= y && y < FieldConstants$2.Height
- && _this.getNumberAt(x, y) === _module_exports_$9.Piece.Empty;
- });
- };
- InnerField.prototype.isOnGround = function (piece, rotation, x, y) {
- return !this.canFill(piece, rotation, x, y - 1);
- };
- InnerField.prototype.clearLine = function () {
- this.field.clearLine();
- };
- InnerField.prototype.riseGarbage = function () {
- this.field.up(this.garbage);
- this.garbage.clearAll();
- };
- InnerField.prototype.mirror = function () {
- this.field.mirror();
- };
- InnerField.prototype.shiftToLeft = function () {
- this.field.shiftToLeft();
- };
- InnerField.prototype.shiftToRight = function () {
- this.field.shiftToRight();
- };
- InnerField.prototype.shiftToUp = function () {
- this.field.shiftToUp();
- };
- InnerField.prototype.shiftToBottom = function () {
- this.field.shiftToBottom();
- };
- InnerField.prototype.copy = function () {
- return new InnerField({ field: this.field.copy(), garbage: this.garbage.copy() });
- };
- InnerField.prototype.equals = function (other) {
- return this.field.equals(other.field) && this.garbage.equals(other.garbage);
- };
- InnerField.prototype.addNumber = function (x, y, value) {
- if (0 <= y) {
- this.field.addOffset(x, y, value);
- }
- else {
- this.garbage.addOffset(x, -(y + 1), value);
- }
- };
- InnerField.prototype.setNumberFieldAt = function (index, value) {
- this.field.setAt(index, value);
- };
- InnerField.prototype.setNumberGarbageAt = function (index, value) {
- this.garbage.setAt(index, value);
- };
- InnerField.prototype.setNumberAt = function (x, y, value) {
- return 0 <= y ? this.field.set(x, y, value) : this.garbage.set(x, -(y + 1), value);
- };
- InnerField.prototype.getNumberAt = function (x, y) {
- return 0 <= y ? this.field.get(x, y) : this.garbage.get(x, -(y + 1));
- };
- InnerField.prototype.getNumberAtIndex = function (index, isField) {
- if (isField) {
- return this.getNumberAt(index % 10, Math.floor(index / 10));
- }
- return this.getNumberAt(index % 10, -(Math.floor(index / 10) + 1));
- };
- InnerField.prototype.toFieldNumberArray = function () {
- return this.field.toArray();
- };
- InnerField.prototype.toGarbageNumberArray = function () {
- return this.garbage.toArray();
- };
- return InnerField;
- }());
- _module_exports_$8.InnerField = InnerField;
- var PlayField = /** @class */ (function () {
- function PlayField(_a) {
- var pieces = _a.pieces, _b = _a.length, length = _b === void 0 ? FieldConstants$2.PlayBlocks : _b;
- if (pieces !== undefined) {
- this.pieces = pieces;
- }
- else {
- this.pieces = Array.from({ length: length }).map(function () { return _module_exports_$9.Piece.Empty; });
- }
- this.length = length;
- }
- PlayField.load = function () {
- var lines = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- lines[_i] = arguments[_i];
- }
- var blocks = lines.join('').trim();
- return PlayField.loadInner(blocks);
- };
- PlayField.loadMinify = function () {
- var lines = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- lines[_i] = arguments[_i];
- }
- var blocks = lines.join('').trim();
- return PlayField.loadInner(blocks, blocks.length);
- };
- PlayField.loadInner = function (blocks, length) {
- var len = length !== undefined ? length : blocks.length;
- if (len % 10 !== 0) {
- throw new Error('Num of blocks in field should be mod 10');
- }
- var field = length !== undefined ? new PlayField({ length: length }) : new PlayField({});
- for (var index = 0; index < len; index += 1) {
- var block = blocks[index];
- field.set(index % 10, Math.floor((len - index - 1) / 10), (0, _module_exports_$9.parsePiece)(block));
- }
- return field;
- };
- PlayField.prototype.get = function (x, y) {
- return this.pieces[x + y * FieldConstants$2.Width];
- };
- PlayField.prototype.addOffset = function (x, y, value) {
- this.pieces[x + y * FieldConstants$2.Width] += value;
- };
- PlayField.prototype.set = function (x, y, piece) {
- this.setAt(x + y * FieldConstants$2.Width, piece);
- };
- PlayField.prototype.setAt = function (index, piece) {
- this.pieces[index] = piece;
- };
- PlayField.prototype.fill = function (_a) {
- var type = _a.type, rotation = _a.rotation, x = _a.x, y = _a.y;
- var blocks = getBlocks(type, rotation);
- for (var _i = 0, blocks_1 = blocks; _i < blocks_1.length; _i++) {
- var block = blocks_1[_i];
- var _b = [x + block[0], y + block[1]], nx = _b[0], ny = _b[1];
- this.set(nx, ny, type);
- }
- };
- PlayField.prototype.fillAll = function (positions, type) {
- for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
- var _a = positions_1[_i], x = _a.x, y = _a.y;
- this.set(x, y, type);
- }
- };
- PlayField.prototype.clearLine = function () {
- var newField = this.pieces.concat();
- var top = this.pieces.length / FieldConstants$2.Width - 1;
- for (var y = top; 0 <= y; y -= 1) {
- var line = this.pieces.slice(y * FieldConstants$2.Width, (y + 1) * FieldConstants$2.Width);
- var isFilled = line.every(function (value) { return value !== _module_exports_$9.Piece.Empty; });
- if (isFilled) {
- var bottom = newField.slice(0, y * FieldConstants$2.Width);
- var over = newField.slice((y + 1) * FieldConstants$2.Width);
- newField = bottom.concat(over, Array.from({ length: FieldConstants$2.Width }).map(function () { return _module_exports_$9.Piece.Empty; }));
- }
- }
- this.pieces = newField;
- };
- PlayField.prototype.up = function (blockUp) {
- this.pieces = blockUp.pieces.concat(this.pieces).slice(0, this.length);
- };
- PlayField.prototype.mirror = function () {
- var newField = [];
- for (var y = 0; y < this.pieces.length; y += 1) {
- var line = this.pieces.slice(y * FieldConstants$2.Width, (y + 1) * FieldConstants$2.Width);
- line.reverse();
- for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {
- var obj = line_1[_i];
- newField.push(obj);
- }
- }
- this.pieces = newField;
- };
- PlayField.prototype.shiftToLeft = function () {
- var height = this.pieces.length / 10;
- for (var y = 0; y < height; y += 1) {
- for (var x = 0; x < FieldConstants$2.Width - 1; x += 1) {
- this.pieces[x + y * FieldConstants$2.Width] = this.pieces[x + 1 + y * FieldConstants$2.Width];
- }
- this.pieces[9 + y * FieldConstants$2.Width] = _module_exports_$9.Piece.Empty;
- }
- };
- PlayField.prototype.shiftToRight = function () {
- var height = this.pieces.length / 10;
- for (var y = 0; y < height; y += 1) {
- for (var x = FieldConstants$2.Width - 1; 1 <= x; x -= 1) {
- this.pieces[x + y * FieldConstants$2.Width] = this.pieces[x - 1 + y * FieldConstants$2.Width];
- }
- this.pieces[y * FieldConstants$2.Width] = _module_exports_$9.Piece.Empty;
- }
- };
- PlayField.prototype.shiftToUp = function () {
- var blanks = Array.from({ length: 10 }).map(function () { return _module_exports_$9.Piece.Empty; });
- this.pieces = blanks.concat(this.pieces).slice(0, this.length);
- };
- PlayField.prototype.shiftToBottom = function () {
- var blanks = Array.from({ length: 10 }).map(function () { return _module_exports_$9.Piece.Empty; });
- this.pieces = this.pieces.slice(10, this.length).concat(blanks);
- };
- PlayField.prototype.toArray = function () {
- return this.pieces.concat();
- };
- Object.defineProperty(PlayField.prototype, "numOfBlocks", {
- get: function () {
- return this.pieces.length;
- },
- enumerable: false,
- configurable: true
- });
- PlayField.prototype.copy = function () {
- return new PlayField({ pieces: this.pieces.concat(), length: this.length });
- };
- PlayField.prototype.toShallowArray = function () {
- return this.pieces;
- };
- PlayField.prototype.clearAll = function () {
- this.pieces = this.pieces.map(function () { return _module_exports_$9.Piece.Empty; });
- };
- PlayField.prototype.equals = function (other) {
- if (this.pieces.length !== other.pieces.length) {
- return false;
- }
- for (var index = 0; index < this.pieces.length; index += 1) {
- if (this.pieces[index] !== other.pieces[index]) {
- return false;
- }
- }
- return true;
- };
- return PlayField;
- }());
- _module_exports_$8.PlayField = PlayField;
- function getBlockPositions(piece, rotation, x, y) {
- return getBlocks(piece, rotation).map(function (position) {
- position[0] += x;
- position[1] += y;
- return position;
- });
- }
- _module_exports_$8.getBlockPositions = getBlockPositions;
- function getBlockXYs(piece, rotation, x, y) {
- return getBlocks(piece, rotation).map(function (position) {
- return { x: position[0] + x, y: position[1] + y };
- });
- }
- _module_exports_$8.getBlockXYs = getBlockXYs;
- function getBlocks(piece, rotation) {
- var blocks = getPieces(piece);
- switch (rotation) {
- case _module_exports_$9.Rotation.Spawn:
- return blocks;
- case _module_exports_$9.Rotation.Left:
- return rotateLeft(blocks);
- case _module_exports_$9.Rotation.Reverse:
- return rotateReverse(blocks);
- case _module_exports_$9.Rotation.Right:
- return rotateRight(blocks);
- }
- throw new Error('Unsupported block');
- }
- _module_exports_$8.getBlocks = getBlocks;
- function getPieces(piece) {
- switch (piece) {
- case _module_exports_$9.Piece.I:
- return [[0, 0], [-1, 0], [1, 0], [2, 0]];
- case _module_exports_$9.Piece.T:
- return [[0, 0], [-1, 0], [1, 0], [0, 1]];
- case _module_exports_$9.Piece.O:
- return [[0, 0], [1, 0], [0, 1], [1, 1]];
- case _module_exports_$9.Piece.L:
- return [[0, 0], [-1, 0], [1, 0], [1, 1]];
- case _module_exports_$9.Piece.J:
- return [[0, 0], [-1, 0], [1, 0], [-1, 1]];
- case _module_exports_$9.Piece.S:
- return [[0, 0], [-1, 0], [0, 1], [1, 1]];
- case _module_exports_$9.Piece.Z:
- return [[0, 0], [1, 0], [0, 1], [-1, 1]];
- }
- throw new Error('Unsupported rotation');
- }
- _module_exports_$8.getPieces = getPieces;
- function rotateRight(positions) {
- return positions.map(function (current) { return [current[1], -current[0]]; });
- }
- function rotateLeft(positions) {
- return positions.map(function (current) { return [-current[1], current[0]]; });
- }
- function rotateReverse(positions) {
- return positions.map(function (current) { return [-current[0], -current[1]]; });
- }
-
- const _module_exports_$7 = {};
- Object.defineProperty(_module_exports_$7, "__esModule", { value: true });
- _module_exports_$7.Buffer = void 0;
- var ENCODE_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
- var Buffer = /** @class */ (function () {
- function Buffer(data) {
- if (data === void 0) { data = ''; }
- this.values = data.split('').map(decodeToValue);
- }
- Buffer.prototype.poll = function (max) {
- var value = 0;
- for (var count = 0; count < max; count += 1) {
- var v = this.values.shift();
- if (v === undefined) {
- throw new Error('Unexpected fumen');
- }
- value += v * Math.pow(Buffer.tableLength, count);
- }
- return value;
- };
- Buffer.prototype.push = function (value, splitCount) {
- if (splitCount === void 0) { splitCount = 1; }
- var current = value;
- for (var count = 0; count < splitCount; count += 1) {
- this.values.push(current % Buffer.tableLength);
- current = Math.floor(current / Buffer.tableLength);
- }
- };
- Buffer.prototype.merge = function (postBuffer) {
- for (var _i = 0, _a = postBuffer.values; _i < _a.length; _i++) {
- var value = _a[_i];
- this.values.push(value);
- }
- };
- Buffer.prototype.isEmpty = function () {
- return this.values.length === 0;
- };
- Object.defineProperty(Buffer.prototype, "length", {
- get: function () {
- return this.values.length;
- },
- enumerable: false,
- configurable: true
- });
- Buffer.prototype.get = function (index) {
- return this.values[index];
- };
- Buffer.prototype.set = function (index, value) {
- this.values[index] = value;
- };
- Buffer.prototype.toString = function () {
- return this.values.map(encodeFromValue).join('');
- };
- Buffer.tableLength = ENCODE_TABLE.length;
- return Buffer;
- }());
- _module_exports_$7.Buffer = Buffer;
- function decodeToValue(v) {
- return ENCODE_TABLE.indexOf(v);
- }
- function encodeFromValue(index) {
- return ENCODE_TABLE[index];
- }
-
- const _module_exports_$6 = {};
- var __assign$2 = (undefined && undefined.__assign) || function () {
- __assign$2 = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign$2.apply(this, arguments);
- };
- Object.defineProperty(_module_exports_$6, "__esModule", { value: true });
- _module_exports_$6.createActionEncoder = _module_exports_$6.createActionDecoder = void 0;
- function decodeBool(n) {
- return n !== 0;
- }
- var createActionDecoder = function (width, fieldTop, garbageLine) {
- var fieldMaxHeight = fieldTop + garbageLine;
- var numFieldBlocks = fieldMaxHeight * width;
- function decodePiece(n) {
- switch (n) {
- case 0:
- return _module_exports_$9.Piece.Empty;
- case 1:
- return _module_exports_$9.Piece.I;
- case 2:
- return _module_exports_$9.Piece.L;
- case 3:
- return _module_exports_$9.Piece.O;
- case 4:
- return _module_exports_$9.Piece.Z;
- case 5:
- return _module_exports_$9.Piece.T;
- case 6:
- return _module_exports_$9.Piece.J;
- case 7:
- return _module_exports_$9.Piece.S;
- case 8:
- return _module_exports_$9.Piece.Gray;
- }
- throw new Error('Unexpected piece');
- }
- function decodeRotation(n) {
- switch (n) {
- case 0:
- return _module_exports_$9.Rotation.Reverse;
- case 1:
- return _module_exports_$9.Rotation.Right;
- case 2:
- return _module_exports_$9.Rotation.Spawn;
- case 3:
- return _module_exports_$9.Rotation.Left;
- }
- throw new Error('Unexpected rotation');
- }
- function decodeCoordinate(n, piece, rotation) {
- var x = n % width;
- var originY = Math.floor(n / 10);
- var y = fieldTop - originY - 1;
- if (piece === _module_exports_$9.Piece.O && rotation === _module_exports_$9.Rotation.Left) {
- x += 1;
- y -= 1;
- }
- else if (piece === _module_exports_$9.Piece.O && rotation === _module_exports_$9.Rotation.Reverse) {
- x += 1;
- }
- else if (piece === _module_exports_$9.Piece.O && rotation === _module_exports_$9.Rotation.Spawn) {
- y -= 1;
- }
- else if (piece === _module_exports_$9.Piece.I && rotation === _module_exports_$9.Rotation.Reverse) {
- x += 1;
- }
- else if (piece === _module_exports_$9.Piece.I && rotation === _module_exports_$9.Rotation.Left) {
- y -= 1;
- }
- else if (piece === _module_exports_$9.Piece.S && rotation === _module_exports_$9.Rotation.Spawn) {
- y -= 1;
- }
- else if (piece === _module_exports_$9.Piece.S && rotation === _module_exports_$9.Rotation.Right) {
- x -= 1;
- }
- else if (piece === _module_exports_$9.Piece.Z && rotation === _module_exports_$9.Rotation.Spawn) {
- y -= 1;
- }
- else if (piece === _module_exports_$9.Piece.Z && rotation === _module_exports_$9.Rotation.Left) {
- x += 1;
- }
- return { x: x, y: y };
- }
- return {
- decode: function (v) {
- var value = v;
- var type = decodePiece(value % 8);
- value = Math.floor(value / 8);
- var rotation = decodeRotation(value % 4);
- value = Math.floor(value / 4);
- var coordinate = decodeCoordinate(value % numFieldBlocks, type, rotation);
- value = Math.floor(value / numFieldBlocks);
- var isBlockUp = decodeBool(value % 2);
- value = Math.floor(value / 2);
- var isMirror = decodeBool(value % 2);
- value = Math.floor(value / 2);
- var isColor = decodeBool(value % 2);
- value = Math.floor(value / 2);
- var isComment = decodeBool(value % 2);
- value = Math.floor(value / 2);
- var isLock = !decodeBool(value % 2);
- return {
- rise: isBlockUp,
- mirror: isMirror,
- colorize: isColor,
- comment: isComment,
- lock: isLock,
- piece: __assign$2(__assign$2({}, coordinate), { type: type, rotation: rotation }),
- };
- },
- };
- };
- _module_exports_$6.createActionDecoder = createActionDecoder;
- function encodeBool(flag) {
- return flag ? 1 : 0;
- }
- var createActionEncoder = function (width, fieldTop, garbageLine) {
- var fieldMaxHeight = fieldTop + garbageLine;
- var numFieldBlocks = fieldMaxHeight * width;
- function encodePosition(operation) {
- var type = operation.type, rotation = operation.rotation;
- var x = operation.x;
- var y = operation.y;
- if (!(0, _module_exports_$9.isMinoPiece)(type)) {
- x = 0;
- y = 22;
- }
- else if (type === _module_exports_$9.Piece.O && rotation === _module_exports_$9.Rotation.Left) {
- x -= 1;
- y += 1;
- }
- else if (type === _module_exports_$9.Piece.O && rotation === _module_exports_$9.Rotation.Reverse) {
- x -= 1;
- }
- else if (type === _module_exports_$9.Piece.O && rotation === _module_exports_$9.Rotation.Spawn) {
- y += 1;
- }
- else if (type === _module_exports_$9.Piece.I && rotation === _module_exports_$9.Rotation.Reverse) {
- x -= 1;
- }
- else if (type === _module_exports_$9.Piece.I && rotation === _module_exports_$9.Rotation.Left) {
- y += 1;
- }
- else if (type === _module_exports_$9.Piece.S && rotation === _module_exports_$9.Rotation.Spawn) {
- y += 1;
- }
- else if (type === _module_exports_$9.Piece.S && rotation === _module_exports_$9.Rotation.Right) {
- x += 1;
- }
- else if (type === _module_exports_$9.Piece.Z && rotation === _module_exports_$9.Rotation.Spawn) {
- y += 1;
- }
- else if (type === _module_exports_$9.Piece.Z && rotation === _module_exports_$9.Rotation.Left) {
- x -= 1;
- }
- return (fieldTop - y - 1) * width + x;
- }
- function encodeRotation(_a) {
- var type = _a.type, rotation = _a.rotation;
- if (!(0, _module_exports_$9.isMinoPiece)(type)) {
- return 0;
- }
- switch (rotation) {
- case _module_exports_$9.Rotation.Reverse:
- return 0;
- case _module_exports_$9.Rotation.Right:
- return 1;
- case _module_exports_$9.Rotation.Spawn:
- return 2;
- case _module_exports_$9.Rotation.Left:
- return 3;
- }
- throw new Error('No reachable');
- }
- return {
- encode: function (action) {
- var lock = action.lock, comment = action.comment, colorize = action.colorize, mirror = action.mirror, rise = action.rise, piece = action.piece;
- var value = encodeBool(!lock);
- value *= 2;
- value += encodeBool(comment);
- value *= 2;
- value += (encodeBool(colorize));
- value *= 2;
- value += encodeBool(mirror);
- value *= 2;
- value += encodeBool(rise);
- value *= numFieldBlocks;
- value += encodePosition(piece);
- value *= 4;
- value += encodeRotation(piece);
- value *= 8;
- value += piece.type;
- return value;
- },
- };
- };
- _module_exports_$6.createActionEncoder = createActionEncoder;
-
- const _module_exports_$5 = {};
- Object.defineProperty(_module_exports_$5, "__esModule", { value: true });
- _module_exports_$5.createCommentParser = void 0;
- var COMMENT_TABLE = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
- var MAX_COMMENT_CHAR_VALUE = COMMENT_TABLE.length + 1;
- var createCommentParser = function () {
- return {
- decode: function (v) {
- var str = '';
- var value = v;
- for (var count = 0; count < 4; count += 1) {
- var index = value % MAX_COMMENT_CHAR_VALUE;
- str += COMMENT_TABLE[index];
- value = Math.floor(value / MAX_COMMENT_CHAR_VALUE);
- }
- return str;
- },
- encode: function (ch, count) {
- return COMMENT_TABLE.indexOf(ch) * Math.pow(MAX_COMMENT_CHAR_VALUE, count);
- },
- };
- };
- _module_exports_$5.createCommentParser = createCommentParser;
-
- const _module_exports_$4 = {};
- Object.defineProperty(_module_exports_$4, "__esModule", { value: true });
- _module_exports_$4.Quiz = void 0;
- var Operation;
- (function (Operation) {
- Operation["Direct"] = "direct";
- Operation["Swap"] = "swap";
- Operation["Stock"] = "stock";
- })(Operation || (Operation = {}));
- var Quiz = /** @class */ (function () {
- function Quiz(quiz) {
- this.quiz = Quiz.verify(quiz);
- }
- Object.defineProperty(Quiz.prototype, "next", {
- get: function () {
- var index = this.quiz.indexOf(')') + 1;
- var name = this.quiz[index];
- if (name === undefined || name === ';') {
- return '';
- }
- return name;
- },
- enumerable: false,
- configurable: true
- });
- Quiz.isQuizComment = function (comment) {
- return comment.startsWith('#Q=');
- };
- Quiz.create = function (first, second) {
- var create = function (hold, other) {
- var parse = function (s) { return s ? s : ''; };
- return new Quiz("#Q=[".concat(parse(hold), "](").concat(parse(other[0]), ")").concat(parse(other.substring(1))));
- };
- return second !== undefined ? create(first, second) : create(undefined, first);
- };
- Quiz.trim = function (quiz) {
- return quiz.trim().replace(/\s+/g, '');
- };
- Object.defineProperty(Quiz.prototype, "least", {
- get: function () {
- var index = this.quiz.indexOf(')');
- return this.quiz.substr(index + 1);
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(Quiz.prototype, "current", {
- get: function () {
- var index = this.quiz.indexOf('(') + 1;
- var name = this.quiz[index];
- if (name === ')') {
- return '';
- }
- return name;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(Quiz.prototype, "hold", {
- get: function () {
- var index = this.quiz.indexOf('[') + 1;
- var name = this.quiz[index];
- if (name === ']') {
- return '';
- }
- return name;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(Quiz.prototype, "leastAfterNext2", {
- get: function () {
- var index = this.quiz.indexOf(')');
- if (this.quiz[index + 1] === ';') {
- return this.quiz.substr(index + 1);
- }
- return this.quiz.substr(index + 2);
- },
- enumerable: false,
- configurable: true
- });
- Quiz.prototype.getOperation = function (used) {
- var usedName = (0, _module_exports_$9.parsePieceName)(used);
- var current = this.current;
- if (usedName === current) {
- return Operation.Direct;
- }
- var hold = this.hold;
- if (usedName === hold) {
- return Operation.Swap;
- }
- // 次のミノを利用できる
- if (hold === '') {
- if (usedName === this.next) {
- return Operation.Stock;
- }
- }
- else {
- if (current === '' && usedName === this.next) {
- return Operation.Direct;
- }
- }
- throw new Error("Unexpected hold piece in quiz: ".concat(this.quiz));
- };
- Object.defineProperty(Quiz.prototype, "leastInActiveBag", {
- get: function () {
- var separateIndex = this.quiz.indexOf(';');
- var quiz = 0 <= separateIndex ? this.quiz.substring(0, separateIndex) : this.quiz;
- var index = quiz.indexOf(')');
- if (quiz[index + 1] === ';') {
- return quiz.substr(index + 1);
- }
- return quiz.substr(index + 2);
- },
- enumerable: false,
- configurable: true
- });
- Quiz.verify = function (quiz) {
- var replaced = this.trim(quiz);
- if (replaced.length === 0 || quiz === '#Q=[]()' || !quiz.startsWith('#Q=')) {
- return quiz;
- }
- if (!replaced.match(/^#Q=\[[TIOSZJL]?]\([TIOSZJL]?\)[TIOSZJL]*;?.*$/i)) {
- throw new Error("Current piece doesn't exist, however next pieces exist: ".concat(quiz));
- }
- return replaced;
- };
- Quiz.prototype.direct = function () {
- if (this.current === '') {
- var least = this.leastAfterNext2;
- return new Quiz("#Q=[".concat(this.hold, "](").concat(least[0], ")").concat(least.substr(1)));
- }
- return new Quiz("#Q=[".concat(this.hold, "](").concat(this.next, ")").concat(this.leastAfterNext2));
- };
- Quiz.prototype.swap = function () {
- if (this.hold === '') {
- throw new Error("Cannot find hold piece: ".concat(this.quiz));
- }
- var next = this.next;
- return new Quiz("#Q=[".concat(this.current, "](").concat(next, ")").concat(this.leastAfterNext2));
- };
- Quiz.prototype.stock = function () {
- if (this.hold !== '' || this.next === '') {
- throw new Error("Cannot stock: ".concat(this.quiz));
- }
- var least = this.leastAfterNext2;
- var head = least[0] !== undefined ? least[0] : '';
- if (1 < least.length) {
- return new Quiz("#Q=[".concat(this.current, "](").concat(head, ")").concat(least.substr(1)));
- }
- return new Quiz("#Q=[".concat(this.current, "](").concat(head, ")"));
- };
- Quiz.prototype.operate = function (operation) {
- switch (operation) {
- case Operation.Direct:
- return this.direct();
- case Operation.Swap:
- return this.swap();
- case Operation.Stock:
- return this.stock();
- }
- throw new Error('Unexpected operation');
- };
- Quiz.prototype.format = function () {
- var quiz = this.nextIfEnd();
- if (quiz.quiz === '#Q=[]()') {
- return new Quiz('');
- }
- var current = quiz.current;
- var hold = quiz.hold;
- if (current === '' && hold !== '') {
- return new Quiz("#Q=[](".concat(hold, ")").concat(quiz.least));
- }
- if (current === '') {
- var least = quiz.least;
- var head = least[0];
- if (head === undefined) {
- return new Quiz('');
- }
- if (head === ';') {
- return new Quiz(least.substr(1));
- }
- return new Quiz("#Q=[](".concat(head, ")").concat(least.substr(1)));
- }
- return quiz;
- };
- Quiz.prototype.getHoldPiece = function () {
- if (!this.canOperate()) {
- return _module_exports_$9.Piece.Empty;
- }
- var name = this.hold;
- if (name === undefined || name === '' || name === ';') {
- return _module_exports_$9.Piece.Empty;
- }
- return (0, _module_exports_$9.parsePiece)(name);
- };
- Quiz.prototype.getNextPieces = function (max) {
- if (!this.canOperate()) {
- return max !== undefined ? Array.from({ length: max }).map(function () { return _module_exports_$9.Piece.Empty; }) : [];
- }
- var names = (this.current + this.next + this.leastInActiveBag).substr(0, max);
- if (max !== undefined && names.length < max) {
- names += ' '.repeat(max - names.length);
- }
- return names.split('').map(function (name) {
- if (name === undefined || name === ' ' || name === ';') {
- return _module_exports_$9.Piece.Empty;
- }
- return (0, _module_exports_$9.parsePiece)(name);
- });
- };
- Quiz.prototype.toString = function () {
- return this.quiz;
- };
- Quiz.prototype.canOperate = function () {
- var quiz = this.quiz;
- if (quiz.startsWith('#Q=[]();')) {
- quiz = this.quiz.substr(8);
- }
- return quiz.startsWith('#Q=') && quiz !== '#Q=[]()';
- };
- Quiz.prototype.nextIfEnd = function () {
- if (this.quiz.startsWith('#Q=[]();')) {
- return new Quiz(this.quiz.substr(8));
- }
- return this;
- };
- return Quiz;
- }());
- _module_exports_$4.Quiz = Quiz;
-
- const _module_exports_$3 = {};
- var __assign$1 = (undefined && undefined.__assign) || function () {
- __assign$1 = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign$1.apply(this, arguments);
- };
- Object.defineProperty(_module_exports_$3, "__esModule", { value: true });
- _module_exports_$3.Mino = _module_exports_$3.Field = void 0;
- function toMino(operationOrMino) {
- return operationOrMino instanceof Mino ? operationOrMino.copy() : Mino.from(operationOrMino);
- }
- var Field = /** @class */ (function () {
- function Field(field) {
- this.field = field;
- }
- Field.create = function (field, garbage) {
- return new Field(new _module_exports_$8.InnerField({
- field: field !== undefined ? _module_exports_$8.PlayField.load(field) : undefined,
- garbage: garbage !== undefined ? _module_exports_$8.PlayField.loadMinify(garbage) : undefined,
- }));
- };
- Field.prototype.canFill = function (operation) {
- if (operation === undefined) {
- return true;
- }
- var mino = toMino(operation);
- return this.field.canFillAll(mino.positions());
- };
- Field.prototype.canLock = function (operation) {
- if (operation === undefined) {
- return true;
- }
- if (!this.canFill(operation)) {
- return false;
- }
- // Check on the ground
- return !this.canFill(__assign$1(__assign$1({}, operation), { y: operation.y - 1 }));
- };
- Field.prototype.fill = function (operation, force) {
- if (force === void 0) { force = false; }
- if (operation === undefined) {
- return undefined;
- }
- var mino = toMino(operation);
- if (!force && !this.canFill(mino)) {
- throw Error('Cannot fill piece on field');
- }
- this.field.fillAll(mino.positions(), (0, _module_exports_$9.parsePiece)(mino.type));
- return mino;
- };
- Field.prototype.put = function (operation) {
- if (operation === undefined) {
- return undefined;
- }
- var mino = toMino(operation);
- for (; 0 <= mino.y; mino.y -= 1) {
- if (!this.canLock(mino)) {
- continue;
- }
- this.fill(mino);
- return mino;
- }
- throw Error('Cannot put piece on field');
- };
- Field.prototype.clearLine = function () {
- this.field.clearLine();
- };
- Field.prototype.at = function (x, y) {
- return (0, _module_exports_$9.parsePieceName)(this.field.getNumberAt(x, y));
- };
- Field.prototype.set = function (x, y, type) {
- this.field.setNumberAt(x, y, (0, _module_exports_$9.parsePiece)(type));
- };
- Field.prototype.copy = function () {
- return new Field(this.field.copy());
- };
- Field.prototype.str = function (option) {
- if (option === void 0) { option = {}; }
- var skip = option.reduced !== undefined ? option.reduced : true;
- var separator = option.separator !== undefined ? option.separator : '\n';
- var minY = option.garbage === undefined || option.garbage ? -1 : 0;
- var output = '';
- for (var y = 22; minY <= y; y -= 1) {
- var line = '';
- for (var x = 0; x < 10; x += 1) {
- line += this.at(x, y);
- }
- if (skip && line === '__________') {
- continue;
- }
- skip = false;
- output += line;
- if (y !== minY) {
- output += separator;
- }
- }
- return output;
- };
- return Field;
- }());
- _module_exports_$3.Field = Field;
- var Mino = /** @class */ (function () {
- function Mino(type, rotation, x, y) {
- this.type = type;
- this.rotation = rotation;
- this.x = x;
- this.y = y;
- }
- Mino.from = function (operation) {
- return new Mino(operation.type, operation.rotation, operation.x, operation.y);
- };
- Mino.prototype.positions = function () {
- return (0, _module_exports_$8.getBlockXYs)((0, _module_exports_$9.parsePiece)(this.type), (0, _module_exports_$9.parseRotation)(this.rotation), this.x, this.y).sort(function (a, b) {
- if (a.y === b.y) {
- return a.x - b.x;
- }
- return a.y - b.y;
- });
- };
- Mino.prototype.operation = function () {
- return {
- type: this.type,
- rotation: this.rotation,
- x: this.x,
- y: this.y,
- };
- };
- Mino.prototype.isValid = function () {
- try {
- (0, _module_exports_$9.parsePiece)(this.type);
- (0, _module_exports_$9.parseRotation)(this.rotation);
- }
- catch (e) {
- return false;
- }
- return this.positions().every(function (_a) {
- var x = _a.x, y = _a.y;
- return 0 <= x && x < 10 && 0 <= y && y < 23;
- });
- };
- Mino.prototype.copy = function () {
- return new Mino(this.type, this.rotation, this.x, this.y);
- };
- return Mino;
- }());
- _module_exports_$3.Mino = Mino;
-
- const _module_exports_$2 = {};
- Object.defineProperty(_module_exports_$2, "__esModule", { value: true });
- _module_exports_$2.decode = _module_exports_$2.extract = _module_exports_$2.Page = void 0;
- var Page = /** @class */ (function () {
- function Page(index, field, operation, comment, flags, refs) {
- this.index = index;
- this.operation = operation;
- this.comment = comment;
- this.flags = flags;
- this.refs = refs;
- this._field = field.copy();
- }
- Object.defineProperty(Page.prototype, "field", {
- get: function () {
- return new _module_exports_$3.Field(this._field.copy());
- },
- set: function (field) {
- this._field = (0, _module_exports_$8.createInnerField)(field);
- },
- enumerable: false,
- configurable: true
- });
- Page.prototype.mino = function () {
- return _module_exports_$3.Mino.from(this.operation);
- };
- return Page;
- }());
- _module_exports_$2.Page = Page;
- var FieldConstants$1 = {
- GarbageLine: 1,
- Width: 10,
- };
- function extract(str) {
- var format = function (version, data) {
- var trim = data.trim().replace(/[?\s]+/g, '');
- return { version: version, data: trim };
- };
- var data = str;
- // url parameters
- var paramIndex = data.indexOf('&');
- if (0 <= paramIndex) {
- data = data.substring(0, paramIndex);
- }
- // v115@~
- {
- var match = str.match(/[vmd]115@/);
- if (match !== undefined && match !== null && match.index !== undefined) {
- var sub = data.substr(match.index + 5);
- return format('115', sub);
- }
- }
- // v110@~
- {
- var match = str.match(/[vmd]110@/);
- if (match !== undefined && match !== null && match.index !== undefined) {
- var sub = data.substr(match.index + 5);
- return format('110', sub);
- }
- }
- throw new Error('Unsupported fumen version');
- }
- _module_exports_$2.extract = extract;
- function decode(fumen) {
- var _a = extract(fumen), version = _a.version, data = _a.data;
- switch (version) {
- case '115':
- return innerDecode(data, 23);
- case '110':
- return innerDecode(data, 21);
- }
- throw new Error('Unsupported fumen version');
- }
- _module_exports_$2.decode = decode;
- function innerDecode(data, fieldTop) {
- var fieldMaxHeight = fieldTop + FieldConstants$1.GarbageLine;
- var numFieldBlocks = fieldMaxHeight * FieldConstants$1.Width;
- var buffer = new _module_exports_$7.Buffer(data);
- var updateField = function (prev) {
- var result = {
- changed: true,
- field: prev,
- };
- var index = 0;
- while (index < numFieldBlocks) {
- var diffBlock = buffer.poll(2);
- var diff = Math.floor(diffBlock / numFieldBlocks);
- var numOfBlocks = diffBlock % numFieldBlocks;
- if (diff === 8 && numOfBlocks === numFieldBlocks - 1) {
- result.changed = false;
- }
- for (var block = 0; block < numOfBlocks + 1; block += 1) {
- var x = index % FieldConstants$1.Width;
- var y = fieldTop - Math.floor(index / FieldConstants$1.Width) - 1;
- result.field.addNumber(x, y, diff - 8);
- index += 1;
- }
- }
- return result;
- };
- var pageIndex = 0;
- var prevField = (0, _module_exports_$8.createNewInnerField)();
- var store = {
- repeatCount: -1,
- refIndex: {
- comment: 0,
- field: 0,
- },
- quiz: undefined,
- lastCommentText: '',
- };
- var pages = [];
- var actionDecoder = (0, _module_exports_$6.createActionDecoder)(FieldConstants$1.Width, fieldTop, FieldConstants$1.GarbageLine);
- var commentDecoder = (0, _module_exports_$5.createCommentParser)();
- while (!buffer.isEmpty()) {
- // Parse field
- var currentFieldObj = void 0;
- if (0 < store.repeatCount) {
- currentFieldObj = {
- field: prevField,
- changed: false,
- };
- store.repeatCount -= 1;
- }
- else {
- currentFieldObj = updateField(prevField.copy());
- if (!currentFieldObj.changed) {
- store.repeatCount = buffer.poll(1);
- }
- }
- // Parse action
- var actionValue = buffer.poll(3);
- var action = actionDecoder.decode(actionValue);
- // Parse comment
- var comment = void 0;
- if (action.comment) {
- // コメントに更新があるとき
- var commentValues = [];
- var commentLength = buffer.poll(2);
- for (var commentCounter = 0; commentCounter < Math.floor((commentLength + 3) / 4); commentCounter += 1) {
- var commentValue = buffer.poll(5);
- commentValues.push(commentValue);
- }
- var flatten = '';
- for (var _i = 0, commentValues_1 = commentValues; _i < commentValues_1.length; _i++) {
- var value = commentValues_1[_i];
- flatten += commentDecoder.decode(value);
- }
- var commentText = unescape(flatten.slice(0, commentLength));
- store.lastCommentText = commentText;
- comment = { text: commentText };
- store.refIndex.comment = pageIndex;
- var text = comment.text;
- if (_module_exports_$4.Quiz.isQuizComment(text)) {
- try {
- store.quiz = new _module_exports_$4.Quiz(text);
- }
- catch (e) {
- store.quiz = undefined;
- }
- }
- else {
- store.quiz = undefined;
- }
- }
- else if (pageIndex === 0) {
- // コメントに更新がないが、先頭のページのとき
- comment = { text: '' };
- }
- else {
- // コメントに更新がないとき
- comment = {
- text: store.quiz !== undefined ? store.quiz.format().toString() : undefined,
- ref: store.refIndex.comment,
- };
- }
- // Quiz用の操作を取得し、次ページ開始時点のQuizに1手進める
- var quiz = false;
- if (store.quiz !== undefined) {
- quiz = true;
- if (store.quiz.canOperate() && action.lock) {
- if ((0, _module_exports_$9.isMinoPiece)(action.piece.type)) {
- try {
- var nextQuiz = store.quiz.nextIfEnd();
- var operation = nextQuiz.getOperation(action.piece.type);
- store.quiz = nextQuiz.operate(operation);
- }
- catch (e) {
- // console.error(e.message);
- // Not operate
- store.quiz = store.quiz.format();
- }
- }
- else {
- store.quiz = store.quiz.format();
- }
- }
- }
- // データ処理用に加工する
- var currentPiece = void 0;
- if (action.piece.type !== _module_exports_$9.Piece.Empty) {
- currentPiece = action.piece;
- }
- // pageの作成
- var field = void 0;
- if (currentFieldObj.changed || pageIndex === 0) {
- // フィールドに変化があったとき
- // フィールドに変化がなかったが、先頭のページだったとき
- field = {};
- store.refIndex.field = pageIndex;
- }
- else {
- // フィールドに変化がないとき
- field = { ref: store.refIndex.field };
- }
- pages.push(new Page(pageIndex, currentFieldObj.field, currentPiece !== undefined ? _module_exports_$3.Mino.from({
- type: (0, _module_exports_$9.parsePieceName)(currentPiece.type),
- rotation: (0, _module_exports_$9.parseRotationName)(currentPiece.rotation),
- x: currentPiece.x,
- y: currentPiece.y,
- }) : undefined, comment.text !== undefined ? comment.text : store.lastCommentText, {
- quiz: quiz,
- lock: action.lock,
- mirror: action.mirror,
- colorize: action.colorize,
- rise: action.rise,
- }, {
- field: field.ref,
- comment: comment.ref,
- }));
- // callback(
- // currentFieldObj.field.copy()
- // , currentPiece
- // , store.quiz !== undefined ? store.quiz.format().toString() : store.lastCommentText,
- // );
- pageIndex += 1;
- if (action.lock) {
- if ((0, _module_exports_$9.isMinoPiece)(action.piece.type)) {
- currentFieldObj.field.fill(action.piece);
- }
- currentFieldObj.field.clearLine();
- if (action.rise) {
- currentFieldObj.field.riseGarbage();
- }
- if (action.mirror) {
- currentFieldObj.field.mirror();
- }
- }
- prevField = currentFieldObj.field;
- }
- return pages;
- }
-
- const _module_exports_$1 = {};
- var __assign = (undefined && undefined.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(_module_exports_$1, "__esModule", { value: true });
- _module_exports_$1.encode = void 0;
- var FieldConstants = {
- GarbageLine: 1,
- Width: 10,
- };
- function encode(pages) {
- var updateField = function (prev, current) {
- var _a = encodeField(prev, current), changed = _a.changed, values = _a.values;
- if (changed) {
- // フィールドを記録して、リピートを終了する
- buffer.merge(values);
- lastRepeatIndex = -1;
- }
- else if (lastRepeatIndex < 0 || buffer.get(lastRepeatIndex) === _module_exports_$7.Buffer.tableLength - 1) {
- // フィールドを記録して、リピートを開始する
- buffer.merge(values);
- buffer.push(0);
- lastRepeatIndex = buffer.length - 1;
- }
- else if (buffer.get(lastRepeatIndex) < (_module_exports_$7.Buffer.tableLength - 1)) {
- // フィールドは記録せず、リピートを進める
- var currentRepeatValue = buffer.get(lastRepeatIndex);
- buffer.set(lastRepeatIndex, currentRepeatValue + 1);
- }
- };
- var lastRepeatIndex = -1;
- var buffer = new _module_exports_$7.Buffer();
- var prevField = (0, _module_exports_$8.createNewInnerField)();
- var actionEncoder = (0, _module_exports_$6.createActionEncoder)(FieldConstants.Width, 23, FieldConstants.GarbageLine);
- var commentParser = (0, _module_exports_$5.createCommentParser)();
- var prevComment = '';
- var prevQuiz = undefined;
- var innerEncode = function (index) {
- var currentPage = pages[index];
- currentPage.flags = currentPage.flags ? currentPage.flags : {};
- var field = currentPage.field;
- var currentField = field !== undefined ? (0, _module_exports_$8.createInnerField)(field) : prevField.copy();
- // フィールドの更新
- updateField(prevField, currentField);
- // アクションの更新
- var currentComment = currentPage.comment !== undefined
- ? ((index !== 0 || currentPage.comment !== '') ? currentPage.comment : undefined)
- : undefined;
- var piece = currentPage.operation !== undefined ? {
- type: (0, _module_exports_$9.parsePiece)(currentPage.operation.type),
- rotation: (0, _module_exports_$9.parseRotation)(currentPage.operation.rotation),
- x: currentPage.operation.x,
- y: currentPage.operation.y,
- } : {
- type: _module_exports_$9.Piece.Empty,
- rotation: _module_exports_$9.Rotation.Reverse,
- x: 0,
- y: 22,
- };
- var nextComment;
- if (currentComment !== undefined) {
- if (currentComment.startsWith('#Q=')) {
- // Quiz on
- if (prevQuiz !== undefined && prevQuiz.format().toString() === currentComment) {
- nextComment = undefined;
- }
- else {
- nextComment = currentComment;
- prevComment = nextComment;
- prevQuiz = new _module_exports_$4.Quiz(currentComment);
- }
- }
- else {
- // Quiz off
- if (prevQuiz !== undefined && prevQuiz.format().toString() === currentComment) {
- nextComment = undefined;
- prevComment = currentComment;
- prevQuiz = undefined;
- }
- else {
- nextComment = prevComment !== currentComment ? currentComment : undefined;
- prevComment = prevComment !== currentComment ? nextComment : prevComment;
- prevQuiz = undefined;
- }
- }
- }
- else {
- nextComment = undefined;
- prevQuiz = undefined;
- }
- if (prevQuiz !== undefined && prevQuiz.canOperate() && currentPage.flags.lock) {
- if ((0, _module_exports_$9.isMinoPiece)(piece.type)) {
- try {
- var nextQuiz = prevQuiz.nextIfEnd();
- var operation = nextQuiz.getOperation(piece.type);
- prevQuiz = nextQuiz.operate(operation);
- }
- catch (e) {
- // console.error(e.message);
- // Not operate
- prevQuiz = prevQuiz.format();
- }
- }
- else {
- prevQuiz = prevQuiz.format();
- }
- }
- var currentFlags = __assign({ lock: true, colorize: index === 0 }, currentPage.flags);
- var action = {
- piece: piece,
- rise: !!currentFlags.rise,
- mirror: !!currentFlags.mirror,
- colorize: !!currentFlags.colorize,
- lock: !!currentFlags.lock,
- comment: nextComment !== undefined,
- };
- var actionNumber = actionEncoder.encode(action);
- buffer.push(actionNumber, 3);
- // コメントの更新
- if (nextComment !== undefined) {
- var comment = escape(currentPage.comment);
- var commentLength = Math.min(comment.length, 4095);
- buffer.push(commentLength, 2);
- // コメントを符号化
- for (var index_1 = 0; index_1 < commentLength; index_1 += 4) {
- var value = 0;
- for (var count = 0; count < 4; count += 1) {
- var newIndex = index_1 + count;
- if (commentLength <= newIndex) {
- break;
- }
- var ch = comment.charAt(newIndex);
- value += commentParser.encode(ch, count);
- }
- buffer.push(value, 5);
- }
- }
- else if (currentPage.comment === undefined) {
- prevComment = undefined;
- }
- // 地形の更新
- if (action.lock) {
- if ((0, _module_exports_$9.isMinoPiece)(action.piece.type)) {
- currentField.fill(action.piece);
- }
- currentField.clearLine();
- if (action.rise) {
- currentField.riseGarbage();
- }
- if (action.mirror) {
- currentField.mirror();
- }
- }
- prevField = currentField;
- };
- for (var index = 0; index < pages.length; index += 1) {
- innerEncode(index);
- }
- // テト譜が短いときはそのまま出力する
- // 47文字ごとに?が挿入されるが、実際は先頭にv115@が入るため、最初の?は42文字後になる
- var data = buffer.toString();
- if (data.length < 41) {
- return data;
- }
- // ?を挿入する
- var head = [data.substr(0, 42)];
- var tails = data.substring(42);
- var split = tails.match(/[\S]{1,47}/g) || [];
- return head.concat(split).join('?');
- }
- _module_exports_$1.encode = encode;
- // フィールドをエンコードする
- // 前のフィールドがないときは空のフィールドを指定する
- // 入力フィールドの高さは23, 幅は10
- function encodeField(prev, current) {
- var FIELD_TOP = 23;
- var FIELD_MAX_HEIGHT = FIELD_TOP + 1;
- var FIELD_BLOCKS = FIELD_MAX_HEIGHT * FieldConstants.Width;
- var buffer = new _module_exports_$7.Buffer();
- // 前のフィールドとの差を計算: 0〜16
- var getDiff = function (xIndex, yIndex) {
- var y = FIELD_TOP - yIndex - 1;
- return current.getNumberAt(xIndex, y) - prev.getNumberAt(xIndex, y) + 8;
- };
- // データの記録
- var recordBlockCounts = function (diff, counter) {
- var value = diff * FIELD_BLOCKS + counter;
- buffer.push(value, 2);
- };
- // フィールド値から連続したブロック数に変換
- var changed = true;
- var prev_diff = getDiff(0, 0);
- var counter = -1;
- for (var yIndex = 0; yIndex < FIELD_MAX_HEIGHT; yIndex += 1) {
- for (var xIndex = 0; xIndex < FieldConstants.Width; xIndex += 1) {
- var diff = getDiff(xIndex, yIndex);
- if (diff !== prev_diff) {
- recordBlockCounts(prev_diff, counter);
- counter = 0;
- prev_diff = diff;
- }
- else {
- counter += 1;
- }
- }
- }
- // 最後の連続ブロックを処理
- recordBlockCounts(prev_diff, counter);
- if (prev_diff === 8 && counter === FIELD_BLOCKS - 1) {
- changed = false;
- }
- return {
- changed: changed,
- values: buffer,
- };
- }
-
- const _module_exports_ = {};
- Object.defineProperty(_module_exports_, "__esModule", { value: true });
- _module_exports_.encoder = _module_exports_.decoder = _module_exports_.Mino = _module_exports_.Field = void 0;
- Object.defineProperty(_module_exports_, "Field", { enumerable: true, get: function () { return _module_exports_$3.Field; } });
- Object.defineProperty(_module_exports_, "Mino", { enumerable: true, get: function () { return _module_exports_$3.Mino; } });
- _module_exports_.decoder = {
- decode: function (data) {
- return (0, _module_exports_$2.decode)(data);
- },
- };
- _module_exports_.encoder = {
- encode: function (data) {
- return "v115@".concat((0, _module_exports_$1.encode)(data));
- },
- };
-
- /*!
- * escape-html
- * Copyright(c) 2012-2013 TJ Holowaychuk
- * Copyright(c) 2015 Andreas Lubbe
- * Copyright(c) 2015 Tiancheng "Timothy" Gu
- * MIT Licensed
- */
-
-
- /**
- * Module variables.
- * @private
- */
-
- var matchHtmlRegExp = /["'&<>]/;
-
- /**
- * Escape special characters in the given string of html.
- *
- * @param {string} string The string to escape for inserting into HTML
- * @return {string}
- * @public
- */
-
- function escapeHtml(string) {
- var str = '' + string;
- var match = matchHtmlRegExp.exec(str);
-
- if (!match) {
- return str;
- }
-
- var escape;
- var html = '';
- var index = 0;
- var lastIndex = 0;
-
- for (index = match.index; index < str.length; index++) {
- switch (str.charCodeAt(index)) {
- case 34: // "
- escape = '"';
- break;
- case 38: // &
- escape = '&';
- break;
- case 39: // '
- escape = ''';
- break;
- case 60: // <
- escape = '<';
- break;
- case 62: // >
- escape = '>';
- break;
- default:
- continue;
- }
-
- if (lastIndex !== index) {
- html += str.substring(lastIndex, index);
- }
-
- lastIndex = index + 1;
- html += escape;
- }
-
- return lastIndex !== index
- ? html + str.substring(lastIndex, index)
- : html;
- }
-
- const {decoder} = _module_exports_;
-
- const tiles = {
- _: "#000",
- X: "#999",
- Xl: "#ccc",
- I: "hsl(180, 100%, 35%)",
- Il: "#0ff",
- L: "hsl(30, 95%, 47%)",
- Ll: "hsl(36, 100%, 55%)",
- O: "hsl(60, 70%, 40%)",
- Ol: "#ff0",
- Z: "hsl(0, 70%, 50%)",
- Zl: "hsl(0, 100%, 63%)",
- T: "hsl(295, 80%, 47%)",
- Tl: "hsl(300, 90%, 57%)",
- J: "hsl(240, 75%, 50%)",
- Jl: "hsl(240, 100%, 60%)",
- S: "hsl(120, 100%, 33%)",
- Sl: "#0f0"
- };
-
- function createTile(name, size) {
- const fill = tiles[name];
- const stroke = name === "_" ? ' stroke="rgba(255,255,255,0.05)"' : "";
- return `<rect id="t${name}" fill="${fill}" width="${size}" height="${size}"${stroke}/>`;
- }
-
- function pageToFrame(page) {
- const field = page.field.copy();
- const filledMino = page.operation && field.fill(page.operation);
- const output = Array(200);
- const touchedY = new Set;
-
- // extract field data
- for (let y = 0; y < 20; y++) {
- for (let x = 0; x < 10; x++) {
- output[y * 10 + x] = {
- type: field.at(x, y),
- light: false
- };
- }
- }
-
- // draw active mino
- if (filledMino) {
- for (const {x, y} of filledMino.positions()) {
- touchedY.add(y);
- output[y * 10 + x].light = true;
- }
- }
-
- if (page.flags.lock) {
- // lighten lines which should be cleared
- for (const y of touchedY) {
- if (isLineFilled(field, y)) {
- for (let x = 0; x < 10; x++) {
- output[y * 10 + x].light = true;
- }
- }
- }
- }
- return output;
- }
-
- function isLineFilled(field, y) {
- for (let x = 0; x < 10; x++) {
- if (field.at(x, y) === "_") {
- return false;
- }
- }
- return true;
- }
-
- function createSVG({
- data,
- pages = decoder.decode(data),
- index,
- delay = 500,
- size = 16,
- commentSize = 16,
- animateType = "css",
- comment = "auto"
- }) {
- if (index != null) {
- pages = pages.slice(index, index + 1);
- }
- const frames = pages.map(pageToFrame);
- const drawComment =
- comment === "always" ? true :
- comment === "none" ? false :
- pages.some(p => p.comment);
- const commentHeight = Math.round(commentSize * 1.6);
- const commentOffset = commentSize * 1.2;
- const commentY = size * 20;
- const width = size * 10;
- const height = size * 20 + (drawComment ? commentHeight : 0);
-
- // diff frames
- for (let i = frames.length - 1; i >= 1; i--) {
- for (let j = 0; j < frames[i].length; j++) {
- if (isTileEqual(frames[i - 1][j], frames[i][j])) {
- frames[i][j] = null;
- }
- }
- }
-
- // diff comment
- for (let i = pages.length - 1; i >= 1; i--) {
- if (pages[i].comment && pages[i].comment === pages[i - 1].comment) {
- pages[i].comment = null;
- }
- }
-
- const layers = [];
- const usedTiles = new Set;
- for (let i = 0; i < frames.length; i++) {
- const layer = createLayer(frames[i], size);
- for (const t of layer.used) {
- usedTiles.add(t);
- }
- const comment = drawComment ?
- createComment({
- text: pages[i].comment,
- width,
- height: commentHeight,
- y: commentY,
- size: commentSize,
- offset: commentOffset,
- index: i
- }) : "";
- layers.push(`
- <svg viewBox="0 0 ${width} ${height}" id="f${i}">
- ${layer.tiles.join("")}
- ${comment}
- ${createAnimate(i, frames.length, delay, animateType)}
- </svg>`);
- }
- return `
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${width} ${height}" width="${width}" height="${height}" style="font-family: sans-serif">
- <defs>
- ${createDefs(usedTiles, size)}
- </defs>
- ${layers.join("")}
- ${createProgress(commentY, frames.length, width, delay, animateType)}
- </svg>`.trim().replace(/>\s+</g, ">\n<");
- }
-
- function createProgress(y, total, width, delay, type) {
- if (total === 1) {
- return "";
- }
- const attr = `d="M 0,${y} H${width}" stroke="silver" stroke-width="${width / 50}" stroke-dasharray="${width}"`;
- if (type === "css") {
- return `
- <path ${attr} id="p"/>
- <style>
- #p {animation: p ${delay * total}ms steps(${total}, start) infinite}
- @keyframes p {
- from {
- stroke-dashoffset: ${width};
- }
- to {
- stroke-dashoffset: 0;
- }
- }
- </style>`;
- }
- return `
- <path ${attr}>
- <animate attributeName="stroke-dashoffset" values="${createValues()}" calcMode="discrete" dur="${total * delay}ms" repeatCount="indefinite"/>
- </path>`;
-
- function createValues() {
- const values = [];
- for (let i = 0; i < total; i++) {
- values.push((total - i - 1) / total * width);
- }
- return values.join(";");
- }
- }
-
- function createComment({text, width, height, y, size, offset, index}) {
- if (!text && index) {
- return "";
- }
- const bg = index === 0 ?
- `<rect id="cbg" fill="#333" y="${y}" width="${width}" height="${height}"/>` :
- '<use href="#cbg"/>';
- const textEl = text ?
- `<text x="${width / 2}" y="${y + offset}" text-anchor="middle" font-size="${size}" fill="white">${escapeHtml(text)}</text>` : "";
- return bg + textEl;
- }
-
- function createAnimate(i, total, delay, type) {
- if (i === 0) {
- return "";
- }
- if (type === "css") {
- return `<style>
- #f${i} {
- animation: a${i} ${total * delay}ms step-end infinite;
- }
- @keyframes a${i} {
- 0% {visibility: hidden} ${i * 100 / total}% {visibility: visible}
- }
- </style>`;
- }
- return `<animate attributeName="display" values="none;inline" calcMode="discrete" keyTimes="0;${i/total}" dur="${delay * total}ms" repeatCount="indefinite" />`;
- }
-
- function createDefs(include, size) {
- const els = [];
- for (const name of include) {
- els.push(createTile(name, size));
- }
- return els.join("");
- }
-
- function createLayer(buffer, size) {
- const bgTiles = [];
- const tiles = [];
- const used = new Set;
- for (let i = 0; i < buffer.length; i++) {
- if (!buffer[i]) {
- continue;
- }
- const name = `${buffer[i].type}${buffer[i].light ? "l" : ""}`;
- used.add(name);
- const y = Math.floor(i / 10);
- const x = i % 10;
- const data = `<use href="#t${name}" x="${x * size}" y="${(20 - y - 1) * size}"/>`;
- if (name === "_") {
- bgTiles.push(data);
- } else {
- tiles.push(data);
- }
- }
- return {
- used,
- tiles: bgTiles.concat(tiles)
- };
- }
-
- function isTileEqual(a, b) {
- return a.type === b.type && a.light === b.light;
- }
-
- var fumen = {
- name: "Fumen",
- global: true,
- getPatterns: function() {
- return [
- /(?:fumen\.zui\.jp|harddrop\.com\/fumen)[^?]*\?(v115@.*)/i
- ];
- },
- getEmbedFunction: function() {
- return function (data, url, text, node) {
- var image = new Image;
- image.title = text;
- image.className = "embed-me-fumen";
- image.src = `data:image/svg+xml,${encodeURIComponent(createSVG({data}))}`;
- node = node.cloneNode(false);
- node.appendChild(image);
- return node;
- };
- }
- };
-
- var image = {
- name: "Image",
- global: true,
- getPatterns: function() {
- return [
- /^[^?#]+\.(?:jpg|png|gif|jpeg)(?:$|[?#])/i
- ];
- },
- getEmbedFunction: function() {
- GM_addStyle(".embed-me-image { max-width: 90%; }");
- return function(url, text, node) {
- var image = new Image;
- image.title = text;
- image.className = "embed-me-image";
- image.src = url;
- node = node.cloneNode(false);
- node.appendChild(image);
- return node;
- };
- }
- };
-
- var imgur = {
- name: "Imgur gifv",
- domains: ["i.imgur.com", "imgur.com"],
- getPatterns: function() {
- return [
- /imgur\.com\/(\w+)(\.gifv|$)/i
- ];
- },
- getEmbedFunction: function() {
- GM_addStyle('.imgur-embed-iframe-pub { box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.10); border: 1px solid #ddd; border-radius: 2px; margin: 10px 0; width: 540px; overflow: hidden; }');
-
- window.addEventListener("message", function(e){
- if (e.origin.indexOf("imgur.com") < 0) {
- return;
- }
-
- var data = JSON.parse(e.data),
- id = data.href.match(/imgur\.com\/(\w+)\//)[1],
- css = '.imgur-embed-iframe-pub-' + id + '-' + data.context + '-540 { height: ' + data.height + 'px!important; width: 540px!important; }';
-
- GM_addStyle(css);
- });
-
- return function(id) {
- var iframe = document.createElement("iframe");
- iframe.className = "imgur-embed-iframe-pub imgur-embed-iframe-pub-" + id + "-true-540";
- iframe.scrolling = "no";
- iframe.src = "//imgur.com/" + id + "/embed?w=540&ref=" + location.href + "#embed-me";
- return iframe;
- };
- }
- };
-
- var soundcloud = {
- name: "SoundCloud",
- domains: ["soundcloud.com"],
- getPatterns: function() {
- return [
- /soundcloud\.com\/[\w-]+\/[\w-]+(?:\?|$)/i
- ];
- },
- getEmbedFunction: function(){
- return function(url, text, node, replace) {
- GM_xmlhttpRequest({
- method: "GET",
- url: "https://soundcloud.com/oembed?format=json&url=" + url,
- onload: function(response) {
- if (!response.responseText) {
- return;
- }
- var html = JSON.parse(response.responseText).html;
- var container = document.createElement("div");
- container.innerHTML = html;
- replace(container);
- }
- });
- };
- }
- };
-
- var twitch = {
- name: "Twitch",
- domains: ["www.twitch.tv"],
- getPatterns: function() {
- return [
- /twitch\.tv\/(\w+)\/(v)\/(\d+)/i,
- /twitch\.tv\/()(videos)\/(\d+)/i,
- /twitch\.tv\/(\w+)\/(clip)\/([^/]+)/i,
- ];
- },
- getEmbedFunction: function() {
- return function (user, type, id) {
- var container = document.createElement("div");
- if (type == "v" || type == "videos") {
- container.innerHTML = `<iframe src="https://player.twitch.tv/?video=${id}&autoplay=false&parent=${location.hostname}" frameborder="0" allowfullscreen="true" scrolling="no" height="378" width="620"></iframe>`;
- } else if (type == "clip") {
- container.innerHTML = `<iframe src="https://clips.twitch.tv/embed?clip=${id}&autoplay=false&parent=${location.hostname}" frameborder="0" allowfullscreen="true" scrolling="no" height="378" width="620"></iframe>`;
- }
- return container;
- };
- }
- };
-
- var video = {
- name: "Video",
- global: true,
- getPatterns: function() {
- return [
- /^[^?#]+\.(?:mp4|webm|ogv|mov)(?:$|[?#])/i
- ];
- },
- getEmbedFunction: function() {
- return function (url, text) {
- var video = document.createElement("video");
- video.controls = true;
- video.title = text;
- video.src = url;
- return video;
- };
- }
- };
-
- var youtube = {
- name: "Youtube",
- domains: [
- "www.youtube.com",
- "youtu.be"
- ],
- getPatterns: function() {
- return [
- /youtube\.com\/watch\?.*?v=([^&]+)/i,
- /youtu\.be\/([^?]+)/i,
- /youtube\.com\/embed\/([^?#]+)/,
- /youtube\.com\/v\/([^?#]+)/
- ];
- },
- getEmbedFunction: function() {
- return function(id, url, text, node, replace) {
- url = "https://www.youtube.com/watch?v=" + id;
- GM_xmlhttpRequest({
- method: "GET",
- url: "https://www.youtube.com/oembed?format=json&url=" + url,
- onload: function(response) {
- var html = JSON.parse(response.responseText).html,
- container = document.createElement("div");
-
- container.innerHTML = html;
- replace(container);
- }
- });
- };
- }
- };
-
- var modules = [fumen,image,imgur,soundcloud,twitch,video,youtube];
-
- /* global GM_webextPref */
-
-
- const pref = GM_webextPref({
- default: {
- simple: true,
- excludes: "",
- ...Object.fromEntries(modules.map(m => [m.name, true]))
- },
- body: [
- {
- label: "Ignore complex anchor",
- type: "checkbox",
- key: "simple"
- },
- {
- label: "Excludes these urls (regexp per line)",
- type: "textarea",
- key: "excludes"
- },
- ...modules.map(module => ({
- label: module.name,
- key: module.name,
- type: "checkbox"
- }))
- ],
- getNewScope: () => location.hostname
- });
- const globalMods = [];
- const index = {};
- let excludedUrl = null;
-
- pref.ready()
- .then(() => pref.setCurrentScope(location.hostname))
- .then(init);
-
- function init() {
- pref.on("change", change => {
- if (change.excludes != null) {
- updateExclude();
- }
- });
- updateExclude();
-
- for (const mod of modules) {
- if (mod.global) {
- globalMods.push(mod);
- } else {
- var i;
- for (i = 0; i < mod.domains.length; i++) {
- index[mod.domains[i]] = mod;
- }
- }
- }
-
- observeDocument(function(node){
- var links = node.querySelectorAll("a[href]"), i;
- for (i = 0; i < links.length; i++) {
- embed(links[i]);
- }
- });
- }
-
- function validParent(node) {
- var cache = node;
- while (node != document.documentElement) {
- if (node.INVALID || node.className.indexOf("embed-me") >= 0) {
- cache.INVALID = true;
- return false;
- }
- if (!node.parentNode) {
- return false;
- }
- if (node.VALID) {
- break;
- }
- node = node.parentNode;
- }
- cache.VALID = true;
- return true;
- }
-
- function valid(node) {
- if (!validParent(node)) {
- return false;
- }
- if (node.nodeName != "A" || !node.href) {
- return false;
- }
- if (pref.get("simple") && (node.childNodes.length != 1 || node.childNodes[0].nodeType != 3)) {
- return false;
- }
- if (excludedUrl && excludedUrl.test(node.href)) {
- return false;
- }
- return true;
- }
-
- function getPatterns(mod) {
- if (!mod.getPatterns) {
- return [];
- }
- if (!mod.patterns) {
- mod.patterns = mod.getPatterns();
- }
- return mod.patterns;
- }
-
- function getEmbedFunction(mod) {
- if (!mod.embedFunction) {
- mod.embedFunction = mod.getEmbedFunction();
- }
- return mod.embedFunction;
- }
-
- function callEmbedFunc(node, params, func) {
- var replace = function (newNode) {
- if (!node.parentNode) {
- // The node was detached from DOM tree
- return;
- }
- newNode.classList.add("embed-me");
- node.parentNode.replaceChild(newNode, node);
- };
- params.push(node.href, node.textContent, node, replace);
- var result = func.apply(null, params);
- if (result) {
- replace(result);
- }
- }
-
- function embed(node) {
- if (!valid(node)) {
- return;
- }
- // Never process same element twice
- node.INVALID = true;
-
- var mods = [], mod, patterns, match, i, j;
-
- if (node.hostname in index) {
- mods.push(index[node.hostname]);
- }
-
- mods = mods.concat(globalMods).filter(mod => pref.get(mod.name));
-
- for (j = 0; j < mods.length; j++) {
- mod = mods[j];
- patterns = getPatterns(mod);
-
- for (i = 0; i < patterns.length; i++) {
- if ((match = patterns[i].exec(node.href))) {
- callEmbedFunc(node, Array.prototype.slice.call(match, 1), getEmbedFunction(mod));
- return;
- }
- }
- }
- }
-
- function observeDocument(callback) {
-
- setTimeout(callback, 0, document.body);
-
- new MutationObserver(function(mutations){
- var i;
- for (i = 0; i < mutations.length; i++) {
- if (!mutations[i].addedNodes.length) {
- continue;
- }
- callback(mutations[i].target);
- }
- }).observe(document.body, {
- childList: true,
- subtree: true
- });
- }
-
- function updateExclude() {
- const excludes = pref.get("excludes").trim();
- excludedUrl = excludes && new RegExp(excludes.split(/\s*\n\s*/).join("|"), "i");
- }