mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-05 22:56:11 +00:00
lint: upgrade dev-deps and fix formatting
This commit is contained in:
@@ -1,7 +1,4 @@
|
||||
{
|
||||
"requirePragma": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "all",
|
||||
"bracketSpacing": false,
|
||||
"jsxBracketSameLine": true
|
||||
"trailingComma": "all"
|
||||
}
|
||||
|
||||
@@ -10,11 +10,7 @@ export default class ClipPath extends Shape {
|
||||
const { props } = this;
|
||||
const { id, children } = props;
|
||||
return (
|
||||
<RNSVGClipPath
|
||||
ref={this.refMethod}
|
||||
name={id}
|
||||
{...extractClipPath(props)}
|
||||
>
|
||||
<RNSVGClipPath ref={this.refMethod} name={id} {...extractClipPath(props)}>
|
||||
{children}
|
||||
</RNSVGClipPath>
|
||||
);
|
||||
|
||||
@@ -10,11 +10,7 @@ export default class Symbol extends Shape {
|
||||
const { props } = this;
|
||||
const { id, children } = props;
|
||||
return (
|
||||
<RNSVGSymbol
|
||||
ref={this.refMethod}
|
||||
name={id}
|
||||
{...extractViewBox(props)}
|
||||
>
|
||||
<RNSVGSymbol ref={this.refMethod} name={id} {...extractViewBox(props)}>
|
||||
{children}
|
||||
</RNSVGSymbol>
|
||||
);
|
||||
|
||||
9
index.js
9
index.js
@@ -20,14 +20,7 @@ import Stop from './elements/Stop';
|
||||
import ClipPath from './elements/ClipPath';
|
||||
import Pattern from './elements/Pattern';
|
||||
import Mask from './elements/Mask';
|
||||
import {
|
||||
parse,
|
||||
SvgAst,
|
||||
SvgFromUri,
|
||||
SvgFromXml,
|
||||
SvgUri,
|
||||
SvgXml,
|
||||
} from './xml'
|
||||
import { parse, SvgAst, SvgFromUri, SvgFromXml, SvgUri, SvgXml } from './xml';
|
||||
|
||||
export {
|
||||
Svg,
|
||||
|
||||
@@ -48,7 +48,8 @@ export default function extractResponder(props, ref) {
|
||||
o.onResponderRelease = ref.touchableHandleResponderRelease;
|
||||
o.onResponderTerminate = ref.touchableHandleResponderTerminate;
|
||||
o.onStartShouldSetResponder = ref.touchableHandleStartShouldSetResponder;
|
||||
o.onResponderTerminationRequest = ref.touchableHandleResponderTerminationRequest;
|
||||
o.onResponderTerminationRequest =
|
||||
ref.touchableHandleResponderTerminationRequest;
|
||||
}
|
||||
|
||||
if (responsible) {
|
||||
|
||||
@@ -3,7 +3,15 @@ import { parse } from './transform';
|
||||
|
||||
function appendTransformProps(props) {
|
||||
const {
|
||||
x, y, originX, originY, scaleX, scaleY, rotation, skewX, skewY,
|
||||
x,
|
||||
y,
|
||||
originX,
|
||||
originY,
|
||||
scaleX,
|
||||
scaleY,
|
||||
rotation,
|
||||
skewX,
|
||||
skewY,
|
||||
} = props;
|
||||
appendTransform(
|
||||
x + originX,
|
||||
@@ -55,12 +63,21 @@ function universal2axis(universal, axisX, axisY, defaultValue) {
|
||||
|
||||
export function props2transform(props) {
|
||||
const {
|
||||
translate, translateX, translateY,
|
||||
origin, originX, originY,
|
||||
scale, scaleX, scaleY,
|
||||
skew, skewX, skewY,
|
||||
translate,
|
||||
translateX,
|
||||
translateY,
|
||||
origin,
|
||||
originX,
|
||||
originY,
|
||||
scale,
|
||||
scaleX,
|
||||
scaleY,
|
||||
skew,
|
||||
skewX,
|
||||
skewY,
|
||||
rotation,
|
||||
x, y,
|
||||
x,
|
||||
y,
|
||||
} = props;
|
||||
|
||||
const tr = universal2axis(translate, translateX || x, translateY || y);
|
||||
|
||||
140
package-lock.json
generated
140
package-lock.json
generated
@@ -248,15 +248,15 @@
|
||||
}
|
||||
},
|
||||
"acorn": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz",
|
||||
"integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==",
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz",
|
||||
"integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==",
|
||||
"dev": true
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
|
||||
"integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
|
||||
"integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==",
|
||||
"dev": true
|
||||
},
|
||||
"ajv": {
|
||||
@@ -318,17 +318,28 @@
|
||||
"dev": true
|
||||
},
|
||||
"babel-eslint": {
|
||||
"version": "10.0.2",
|
||||
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz",
|
||||
"integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==",
|
||||
"version": "10.0.3",
|
||||
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz",
|
||||
"integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"@babel/parser": "^7.0.0",
|
||||
"@babel/traverse": "^7.0.0",
|
||||
"@babel/types": "^7.0.0",
|
||||
"eslint-scope": "3.7.1",
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
"eslint-visitor-keys": "^1.0.0",
|
||||
"resolve": "^1.12.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"resolve": {
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
|
||||
"integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"path-parse": "^1.0.6"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"balanced-match": {
|
||||
@@ -490,9 +501,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"eslint": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz",
|
||||
"integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==",
|
||||
"version": "6.2.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.2.2.tgz",
|
||||
"integrity": "sha512-mf0elOkxHbdyGX1IJEUsNBzCDdyoUgljF3rRlgfyYh0pwGnreLc0jjD6ZuleOibjmnUWZLY2eXwSooeOgGJ2jw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
@@ -502,9 +513,9 @@
|
||||
"debug": "^4.0.1",
|
||||
"doctrine": "^3.0.0",
|
||||
"eslint-scope": "^5.0.0",
|
||||
"eslint-utils": "^1.3.1",
|
||||
"eslint-visitor-keys": "^1.0.0",
|
||||
"espree": "^6.0.0",
|
||||
"eslint-utils": "^1.4.2",
|
||||
"eslint-visitor-keys": "^1.1.0",
|
||||
"espree": "^6.1.1",
|
||||
"esquery": "^1.0.1",
|
||||
"esutils": "^2.0.2",
|
||||
"file-entry-cache": "^5.0.1",
|
||||
@@ -553,6 +564,21 @@
|
||||
"estraverse": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"eslint-utils": {
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
|
||||
"integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"eslint-visitor-keys": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
|
||||
"integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
|
||||
"dev": true
|
||||
},
|
||||
"ignore": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
|
||||
@@ -602,9 +628,9 @@
|
||||
}
|
||||
},
|
||||
"eslint-plugin-react": {
|
||||
"version": "7.14.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.2.tgz",
|
||||
"integrity": "sha512-jZdnKe3ip7FQOdjxks9XPN0pjUKZYq48OggNMd16Sk+8VXx6JOvXmlElxROCgp7tiUsTsze3jd78s/9AFJP2mA==",
|
||||
"version": "7.14.3",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz",
|
||||
"integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"array-includes": "^3.0.3",
|
||||
@@ -616,17 +642,6 @@
|
||||
"object.values": "^1.1.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"resolve": "^1.10.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"doctrine": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
|
||||
"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esutils": "^2.0.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"eslint-plugin-react-hooks": {
|
||||
@@ -661,9 +676,9 @@
|
||||
}
|
||||
},
|
||||
"eslint-utils": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.0.tgz",
|
||||
"integrity": "sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ==",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
|
||||
"integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
@@ -676,14 +691,22 @@
|
||||
"dev": true
|
||||
},
|
||||
"espree": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz",
|
||||
"integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==",
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz",
|
||||
"integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"acorn": "^6.0.7",
|
||||
"acorn-jsx": "^5.0.0",
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
"acorn": "^7.0.0",
|
||||
"acorn-jsx": "^5.0.2",
|
||||
"eslint-visitor-keys": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"eslint-visitor-keys": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
|
||||
"integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"esprima": {
|
||||
@@ -908,9 +931,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"inquirer": {
|
||||
"version": "6.5.0",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz",
|
||||
"integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==",
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
|
||||
"integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-escapes": "^3.2.0",
|
||||
@@ -1302,15 +1325,14 @@
|
||||
"dev": true
|
||||
},
|
||||
"react": {
|
||||
"version": "16.8.6",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz",
|
||||
"integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==",
|
||||
"version": "16.9.0",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz",
|
||||
"integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"prop-types": "^15.6.2",
|
||||
"scheduler": "^0.13.6"
|
||||
"prop-types": "^15.6.2"
|
||||
}
|
||||
},
|
||||
"react-is": {
|
||||
@@ -1383,16 +1405,6 @@
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||
"dev": true
|
||||
},
|
||||
"scheduler": {
|
||||
"version": "0.13.6",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
|
||||
"integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
|
||||
@@ -1497,9 +1509,9 @@
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
"version": "5.4.4",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-5.4.4.tgz",
|
||||
"integrity": "sha512-IIfEAUx5QlODLblLrGTTLJA7Tk0iLSGBvgY8essPRVNGHAzThujww1YqHLs6h3HfTg55h++RzLHH5Xw/rfv+mg==",
|
||||
"version": "5.4.6",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
|
||||
"integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.10.2",
|
||||
@@ -1588,9 +1600,9 @@
|
||||
}
|
||||
},
|
||||
"v8-compile-cache": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
|
||||
"integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
|
||||
"integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
|
||||
"dev": true
|
||||
},
|
||||
"which": {
|
||||
|
||||
10
package.json
10
package.json
@@ -21,7 +21,7 @@
|
||||
],
|
||||
"scripts": {
|
||||
"lint": "eslint ./",
|
||||
"format": "prettier index.js index.web.js './{elements,lib}/*.js' './lib/extract/e*.js' --write",
|
||||
"format": "prettier index.js index.web.js xml.js README.md './{elements,lib}/*.js' './lib/extract/e*.js' --write",
|
||||
"peg": "pegjs -o ./lib/extract/transform.js ./lib/extract/transform.peg"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -31,13 +31,13 @@
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@react-native-community/eslint-config": "^0.0.5",
|
||||
"babel-eslint": "^10.0.2",
|
||||
"eslint": "^6.1.0",
|
||||
"babel-eslint": "^10.0.3",
|
||||
"eslint": "^6.2.2",
|
||||
"eslint-plugin-prettier": "^3.1.0",
|
||||
"eslint-plugin-react": "^7.14.2",
|
||||
"eslint-plugin-react": "^7.14.3",
|
||||
"pegjs": "^0.10.0",
|
||||
"prettier": "^1.18.2",
|
||||
"react": "^16.8.6"
|
||||
"react": "^16.9.0"
|
||||
},
|
||||
"nativePackage": true
|
||||
}
|
||||
|
||||
132
xml.js
132
xml.js
@@ -1,4 +1,4 @@
|
||||
import React, { Component, useState, useEffect, useMemo } from "react";
|
||||
import React, { Component, useState, useEffect, useMemo } from 'react';
|
||||
import Rect from './elements/Rect';
|
||||
import Circle from './elements/Circle';
|
||||
import Ellipse from './elements/Ellipse';
|
||||
@@ -44,7 +44,7 @@ export const tags = {
|
||||
stop: Stop,
|
||||
clipPath: ClipPath,
|
||||
pattern: Pattern,
|
||||
mask: Mask
|
||||
mask: Mask,
|
||||
};
|
||||
|
||||
export function SvgAst({ ast, override }) {
|
||||
@@ -138,22 +138,22 @@ const camelCase = phrase => phrase.replace(/-([a-z])/g, upperCase);
|
||||
|
||||
export function getStyle(string) {
|
||||
const style = {};
|
||||
const declarations = string.split(";");
|
||||
const declarations = string.split(';');
|
||||
const { length } = declarations;
|
||||
for (let i = 0; i < length; i++) {
|
||||
const declaration = declarations[i];
|
||||
if (declaration.length !== 0) {
|
||||
const split = declaration.split(":");
|
||||
const split = declaration.split(':');
|
||||
const property = split[0];
|
||||
const value = split[1];
|
||||
style[camelCase(property.trim())] = value.trim();
|
||||
}
|
||||
style[camelCase(property.trim())] = value.trim();
|
||||
}
|
||||
}
|
||||
return style;
|
||||
}
|
||||
|
||||
export function astToReact(child, i) {
|
||||
if (typeof child === "object") {
|
||||
if (typeof child === 'object') {
|
||||
const { Tag, props, children } = child;
|
||||
return (
|
||||
<Tag key={i} {...props}>
|
||||
@@ -167,7 +167,7 @@ export function astToReact(child, i) {
|
||||
// slimmed down parser based on https://github.com/Rich-Harris/svg-parser
|
||||
|
||||
function locate(source, search) {
|
||||
const lines = source.split("\n");
|
||||
const lines = source.split('\n');
|
||||
const nLines = lines.length;
|
||||
for (let line = 0; line < nLines; line++) {
|
||||
const { length } = lines[line];
|
||||
@@ -181,11 +181,13 @@ function locate(source, search) {
|
||||
|
||||
const validNameCharacters = /[a-zA-Z0-9:_-]/;
|
||||
const whitespace = /[\s\t\r\n]/;
|
||||
const quotemark = /['"]/;
|
||||
const quotemarks = /['"]/;
|
||||
|
||||
function repeat(str, i) {
|
||||
let result = "";
|
||||
while (i--) result += str;
|
||||
let result = '';
|
||||
while (i--) {
|
||||
result += str;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -201,26 +203,26 @@ export function parse(source) {
|
||||
const { line, column } = locate(source, i);
|
||||
const before = source
|
||||
.slice(0, i)
|
||||
.replace(/^\t+/, match => repeat(" ", match.length));
|
||||
.replace(/^\t+/, match => repeat(' ', match.length));
|
||||
const beforeLine = /(^|\n).*$/.exec(before)[0];
|
||||
const after = source.slice(i);
|
||||
const afterLine = /.*(\n|$)/.exec(after)[0];
|
||||
|
||||
const snippet = `${beforeLine}${afterLine}\n${repeat(
|
||||
" ",
|
||||
beforeLine.length
|
||||
' ',
|
||||
beforeLine.length,
|
||||
)}^`;
|
||||
|
||||
throw new Error(
|
||||
`${message} (${line}:${column}). If this is valid SVG, it's probably a bug. Please raise an issue\n\n${snippet}`
|
||||
`${message} (${line}:${column}). If this is valid SVG, it's probably a bug. Please raise an issue\n\n${snippet}`,
|
||||
);
|
||||
}
|
||||
|
||||
function metadata() {
|
||||
while (
|
||||
i + 1 < length &&
|
||||
(source[i] !== "<" || !validNameCharacters.test(source[i + 1]))
|
||||
) {
|
||||
(source[i] !== '<' || !validNameCharacters.test(source[i + 1]))
|
||||
) {
|
||||
i++;
|
||||
}
|
||||
|
||||
@@ -228,9 +230,9 @@ export function parse(source) {
|
||||
}
|
||||
|
||||
function neutral() {
|
||||
let text = "";
|
||||
let text = '';
|
||||
let char;
|
||||
while (i < length && (char = source[i]) !== "<") {
|
||||
while (i < length && (char = source[i]) !== '<') {
|
||||
text += char;
|
||||
i += 1;
|
||||
}
|
||||
@@ -239,7 +241,7 @@ export function parse(source) {
|
||||
children.push(text);
|
||||
}
|
||||
|
||||
if (source[i] === "<") {
|
||||
if (source[i] === '<') {
|
||||
return openingTag;
|
||||
}
|
||||
|
||||
@@ -249,16 +251,26 @@ export function parse(source) {
|
||||
function openingTag() {
|
||||
const char = source[i];
|
||||
|
||||
if (char === "?") return neutral; // <?xml...
|
||||
if (char === '?') {
|
||||
return neutral;
|
||||
} // <?xml...
|
||||
|
||||
if (char === "!") {
|
||||
if (char === '!') {
|
||||
let start = i + 1;
|
||||
if (source.slice(start, i + 3) === "--") return comment;
|
||||
if (source.slice(start, i + 8) === "[CDATA[") return cdata;
|
||||
if (/doctype/i.test(source.slice(start, i + 8))) return neutral;
|
||||
if (source.slice(start, i + 3) === '--') {
|
||||
return comment;
|
||||
}
|
||||
if (source.slice(start, i + 8) === '[CDATA[') {
|
||||
return cdata;
|
||||
}
|
||||
if (/doctype/i.test(source.slice(start, i + 8))) {
|
||||
return neutral;
|
||||
}
|
||||
}
|
||||
|
||||
if (char === "/") return closingTag;
|
||||
if (char === '/') {
|
||||
return closingTag;
|
||||
}
|
||||
|
||||
const tag = getName();
|
||||
const props = {};
|
||||
@@ -266,7 +278,7 @@ export function parse(source) {
|
||||
tag,
|
||||
props,
|
||||
children: [],
|
||||
Tag: tags[tag]
|
||||
Tag: tags[tag],
|
||||
};
|
||||
|
||||
if (currentElement) {
|
||||
@@ -284,13 +296,13 @@ export function parse(source) {
|
||||
|
||||
let selfClosing = false;
|
||||
|
||||
if (source[i] === "/") {
|
||||
if (source[i] === '/') {
|
||||
i += 1;
|
||||
selfClosing = true;
|
||||
}
|
||||
|
||||
if (source[i] !== ">") {
|
||||
error("Expected >");
|
||||
if (source[i] !== '>') {
|
||||
error('Expected >');
|
||||
}
|
||||
|
||||
if (!selfClosing) {
|
||||
@@ -303,16 +315,20 @@ export function parse(source) {
|
||||
}
|
||||
|
||||
function comment() {
|
||||
const index = source.indexOf("-->", i);
|
||||
if (!~index) error("expected -->");
|
||||
const index = source.indexOf('-->', i);
|
||||
if (!~index) {
|
||||
error('expected -->');
|
||||
}
|
||||
|
||||
i = index + 2;
|
||||
return neutral;
|
||||
}
|
||||
|
||||
function cdata() {
|
||||
const index = source.indexOf("]]>", i);
|
||||
if (!~index) error("expected ]]>");
|
||||
const index = source.indexOf(']]>', i);
|
||||
if (!~index) {
|
||||
error('expected ]]>');
|
||||
}
|
||||
|
||||
i = index + 2;
|
||||
return neutral;
|
||||
@@ -321,18 +337,18 @@ export function parse(source) {
|
||||
function closingTag() {
|
||||
const tag = getName();
|
||||
|
||||
if (!tag) error("Expected tag name");
|
||||
if (!tag) {
|
||||
error('Expected tag name');
|
||||
}
|
||||
|
||||
if (tag !== currentElement.tag) {
|
||||
error(
|
||||
`Expected closing tag </${tag}> to match opening tag <${
|
||||
currentElement.tag
|
||||
}>`
|
||||
`Expected closing tag </${tag}> to match opening tag <${currentElement.tag}>`,
|
||||
);
|
||||
}
|
||||
|
||||
if (source[i] !== ">") {
|
||||
error("Expected >");
|
||||
if (source[i] !== '>') {
|
||||
error('Expected >');
|
||||
}
|
||||
|
||||
stack.pop();
|
||||
@@ -345,7 +361,7 @@ export function parse(source) {
|
||||
}
|
||||
|
||||
function getName() {
|
||||
let name = "";
|
||||
let name = '';
|
||||
let char;
|
||||
while (i < length && validNameCharacters.test((char = source[i]))) {
|
||||
name += char;
|
||||
@@ -357,21 +373,27 @@ export function parse(source) {
|
||||
|
||||
function getAttributes(props) {
|
||||
while (i < length) {
|
||||
if (!whitespace.test(source[i])) return;
|
||||
if (!whitespace.test(source[i])) {
|
||||
return;
|
||||
}
|
||||
allowSpaces();
|
||||
|
||||
const name = getName();
|
||||
if (!name) return;
|
||||
if (!name) {
|
||||
return;
|
||||
}
|
||||
|
||||
let value = true;
|
||||
|
||||
allowSpaces();
|
||||
if (source[i] === "=") {
|
||||
if (source[i] === '=') {
|
||||
i += 1;
|
||||
allowSpaces();
|
||||
|
||||
value = getAttributeValue();
|
||||
if (!isNaN(value) && value.trim() !== "") value = +value;
|
||||
if (!isNaN(value) && value.trim() !== '') {
|
||||
value = +value;
|
||||
}
|
||||
}
|
||||
|
||||
props[camelCase(name)] = value;
|
||||
@@ -379,16 +401,16 @@ export function parse(source) {
|
||||
}
|
||||
|
||||
function getAttributeValue() {
|
||||
return quotemark.test(source[i])
|
||||
return quotemarks.test(source[i])
|
||||
? getQuotedAttributeValue()
|
||||
: getUnquotedAttributeValue();
|
||||
}
|
||||
|
||||
function getUnquotedAttributeValue() {
|
||||
let value = "";
|
||||
let value = '';
|
||||
do {
|
||||
const char = source[i];
|
||||
if (char === " " || char === ">" || char === "/") {
|
||||
if (char === ' ' || char === '>' || char === '/') {
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -402,7 +424,7 @@ export function parse(source) {
|
||||
function getQuotedAttributeValue() {
|
||||
const quotemark = source[i++];
|
||||
|
||||
let value = "";
|
||||
let value = '';
|
||||
let escaped = false;
|
||||
|
||||
while (i < length) {
|
||||
@@ -411,7 +433,7 @@ export function parse(source) {
|
||||
return value;
|
||||
}
|
||||
|
||||
if (char === "\\" && !escaped) {
|
||||
if (char === '\\' && !escaped) {
|
||||
escaped = true;
|
||||
}
|
||||
|
||||
@@ -421,18 +443,22 @@ export function parse(source) {
|
||||
}
|
||||
|
||||
function allowSpaces() {
|
||||
while (i < length && whitespace.test(source[i])) i += 1;
|
||||
while (i < length && whitespace.test(source[i])) {
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
while (i < length) {
|
||||
if (!state) error("Unexpected character");
|
||||
if (!state) {
|
||||
error('Unexpected character');
|
||||
}
|
||||
state = state();
|
||||
i += 1;
|
||||
}
|
||||
|
||||
if (state !== neutral) {
|
||||
error("Unexpected end of input");
|
||||
error('Unexpected end of input');
|
||||
}
|
||||
|
||||
root.children = root.children.map(astToReact);
|
||||
|
||||
98
yarn.lock
98
yarn.lock
@@ -155,15 +155,15 @@
|
||||
lodash.unescape "4.0.1"
|
||||
semver "5.5.0"
|
||||
|
||||
acorn-jsx@^5.0.0:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
|
||||
integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
|
||||
acorn-jsx@^5.0.2:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f"
|
||||
integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
|
||||
|
||||
acorn@^6.0.7:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3"
|
||||
integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==
|
||||
acorn@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a"
|
||||
integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==
|
||||
|
||||
ajv@^6.10.0, ajv@^6.10.2:
|
||||
version "6.10.2"
|
||||
@@ -229,17 +229,17 @@ babel-eslint@10.0.1:
|
||||
eslint-scope "3.7.1"
|
||||
eslint-visitor-keys "^1.0.0"
|
||||
|
||||
babel-eslint@^10.0.2:
|
||||
version "10.0.2"
|
||||
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.2.tgz#182d5ac204579ff0881684b040560fdcc1558456"
|
||||
integrity sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==
|
||||
babel-eslint@^10.0.3:
|
||||
version "10.0.3"
|
||||
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a"
|
||||
integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
"@babel/parser" "^7.0.0"
|
||||
"@babel/traverse" "^7.0.0"
|
||||
"@babel/types" "^7.0.0"
|
||||
eslint-scope "3.7.1"
|
||||
eslint-visitor-keys "^1.0.0"
|
||||
resolve "^1.12.0"
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
@@ -442,10 +442,10 @@ eslint-plugin-react@7.12.4:
|
||||
prop-types "^15.6.2"
|
||||
resolve "^1.9.0"
|
||||
|
||||
eslint-plugin-react@^7.14.2:
|
||||
version "7.14.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.2.tgz#94c193cc77a899ac0ecbb2766fbef88685b7ecc1"
|
||||
integrity sha512-jZdnKe3ip7FQOdjxks9XPN0pjUKZYq48OggNMd16Sk+8VXx6JOvXmlElxROCgp7tiUsTsze3jd78s/9AFJP2mA==
|
||||
eslint-plugin-react@^7.14.3:
|
||||
version "7.14.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13"
|
||||
integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==
|
||||
dependencies:
|
||||
array-includes "^3.0.3"
|
||||
doctrine "^2.1.0"
|
||||
@@ -488,15 +488,27 @@ eslint-utils@^1.3.1:
|
||||
dependencies:
|
||||
eslint-visitor-keys "^1.0.0"
|
||||
|
||||
eslint-utils@^1.4.2:
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab"
|
||||
integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==
|
||||
dependencies:
|
||||
eslint-visitor-keys "^1.0.0"
|
||||
|
||||
eslint-visitor-keys@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
|
||||
integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
|
||||
|
||||
eslint@^6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646"
|
||||
integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==
|
||||
eslint-visitor-keys@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
|
||||
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
|
||||
|
||||
eslint@^6.2.2:
|
||||
version "6.2.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.2.2.tgz#03298280e7750d81fcd31431f3d333e43d93f24f"
|
||||
integrity sha512-mf0elOkxHbdyGX1IJEUsNBzCDdyoUgljF3rRlgfyYh0pwGnreLc0jjD6ZuleOibjmnUWZLY2eXwSooeOgGJ2jw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
ajv "^6.10.0"
|
||||
@@ -505,9 +517,9 @@ eslint@^6.1.0:
|
||||
debug "^4.0.1"
|
||||
doctrine "^3.0.0"
|
||||
eslint-scope "^5.0.0"
|
||||
eslint-utils "^1.3.1"
|
||||
eslint-visitor-keys "^1.0.0"
|
||||
espree "^6.0.0"
|
||||
eslint-utils "^1.4.2"
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
espree "^6.1.1"
|
||||
esquery "^1.0.1"
|
||||
esutils "^2.0.2"
|
||||
file-entry-cache "^5.0.1"
|
||||
@@ -536,14 +548,14 @@ eslint@^6.1.0:
|
||||
text-table "^0.2.0"
|
||||
v8-compile-cache "^2.0.3"
|
||||
|
||||
espree@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6"
|
||||
integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==
|
||||
espree@^6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de"
|
||||
integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==
|
||||
dependencies:
|
||||
acorn "^6.0.7"
|
||||
acorn-jsx "^5.0.0"
|
||||
eslint-visitor-keys "^1.0.0"
|
||||
acorn "^7.0.0"
|
||||
acorn-jsx "^5.0.2"
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
|
||||
esprima@^4.0.0:
|
||||
version "4.0.1"
|
||||
@@ -1074,15 +1086,14 @@ react-is@^16.8.1:
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
|
||||
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
|
||||
|
||||
react@^16.8.6:
|
||||
version "16.8.6"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe"
|
||||
integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==
|
||||
react@^16.9.0:
|
||||
version "16.9.0"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa"
|
||||
integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
prop-types "^15.6.2"
|
||||
scheduler "^0.13.6"
|
||||
|
||||
regexpp@^2.0.1:
|
||||
version "2.0.1"
|
||||
@@ -1101,6 +1112,13 @@ resolve@^1.10.1, resolve@^1.9.0:
|
||||
dependencies:
|
||||
path-parse "^1.0.6"
|
||||
|
||||
resolve@^1.12.0:
|
||||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
|
||||
integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
|
||||
dependencies:
|
||||
path-parse "^1.0.6"
|
||||
|
||||
restore-cursor@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
||||
@@ -1135,14 +1153,6 @@ rxjs@^6.4.0:
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
||||
scheduler@^0.13.6:
|
||||
version "0.13.6"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889"
|
||||
integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
|
||||
semver@5.5.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
||||
|
||||
Reference in New Issue
Block a user