Merge branch 'feature/improvements' into develop
# Conflicts: # package.json
This commit is contained in:
commit
6411d5b046
1
.gitignore
vendored
1
.gitignore
vendored
@ -26,6 +26,7 @@ $RECYCLE.BIN/
|
|||||||
.lock-wscript
|
.lock-wscript
|
||||||
.node_repl_history
|
.node_repl_history
|
||||||
.npm
|
.npm
|
||||||
|
.nyc_output
|
||||||
Desktop.ini
|
Desktop.ini
|
||||||
Icon
|
Icon
|
||||||
Network Trash Folder
|
Network Trash Folder
|
||||||
|
@ -47,6 +47,6 @@
|
|||||||
"test"
|
"test"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"normalize.css": "latest"
|
"normalize.css": "~5.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,6 @@
|
|||||||
"test"
|
"test"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"normalize.css": "latest"
|
"normalize.css": "~5.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
17
dist/milligram.css
vendored
17
dist/milligram.css
vendored
@ -6,6 +6,12 @@
|
|||||||
* Licensed under the MIT license
|
* Licensed under the MIT license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
*,
|
||||||
|
*:after,
|
||||||
|
*:before {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
font-size: 62.5%;
|
font-size: 62.5%;
|
||||||
@ -20,12 +26,6 @@ body {
|
|||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
*,
|
|
||||||
*:after,
|
|
||||||
*:before {
|
|
||||||
box-sizing: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
border-left: 0.3rem solid #d1d1d1;
|
border-left: 0.3rem solid #d1d1d1;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
@ -525,6 +525,11 @@ th:last-child {
|
|||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
2
dist/milligram.css.map
vendored
2
dist/milligram.css.map
vendored
File diff suppressed because one or more lines are too long
2
dist/milligram.min.css
vendored
2
dist/milligram.min.css
vendored
File diff suppressed because one or more lines are too long
2
dist/milligram.min.css.map
vendored
2
dist/milligram.min.css.map
vendored
File diff suppressed because one or more lines are too long
17
package.json
17
package.json
@ -47,21 +47,20 @@
|
|||||||
"test"
|
"test"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"normalize.css": "latest"
|
"normalize.css": "~5.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer": "^6.5.3",
|
"autoprefixer": "^6.5.3",
|
||||||
|
"ava": "^0.17.0",
|
||||||
"backstopjs": "^2.3.3",
|
"backstopjs": "^2.3.3",
|
||||||
|
"banner-cli": "^0.4.0",
|
||||||
"browser-sync": "^2.18.1",
|
"browser-sync": "^2.18.1",
|
||||||
"coveralls": "^2.11.15",
|
"coveralls": "^2.11.15",
|
||||||
"intelli-espower-loader": "^1.0.1",
|
|
||||||
"istanbul": "^0.4.5",
|
|
||||||
"mocha": "^3.1.2",
|
|
||||||
"node-sass": "^3.13.0",
|
"node-sass": "^3.13.0",
|
||||||
"npm-run-all": "^2.3.0",
|
"npm-run-all": "^2.3.0",
|
||||||
|
"nyc": "^10.0.0",
|
||||||
"onchange": "^2.5.0",
|
"onchange": "^2.5.0",
|
||||||
"postcss-cli": "^2.6.0",
|
"postcss-cli": "^2.6.0",
|
||||||
"power-assert": "^1.4.2",
|
|
||||||
"sass-lint": "^1.10.2"
|
"sass-lint": "^1.10.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -70,16 +69,16 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"prestart": "npm install",
|
"prestart": "npm install",
|
||||||
"pretest": "npm install",
|
"pretest": "npm install",
|
||||||
"banner": "for m in dist/*.css; do echo \"/*!\n * Milligram v1.2.0\n * http://milligram.github.io\n *\n * Copyright (c) 2016 CJ Patoilo\n * Licensed under the MIT license\n*/\n\" | cat - $m > temp && mv temp $m; done",
|
"banner": "banner-cli dist/*.css",
|
||||||
"autoprefixer": "postcss -u autoprefixer --no-map.inline --autoprefixer.browsers \"last 1 versions\" -r dist/*.css",
|
"autoprefixer": "postcss -u autoprefixer --no-map.inline --autoprefixer.browsers \"last 1 versions\" -r dist/*.css",
|
||||||
"sass": "node-sass --output-style expanded src/milligram.sass dist/milligram.css && node-sass --output-style compressed src/milligram.sass dist/milligram.min.css",
|
"sass": "node-sass --output-style expanded src/milligram.sass dist/milligram.css && node-sass --output-style compressed src/milligram.sass dist/milligram.min.css",
|
||||||
"lint": "sass-lint -c .sasslintrc 'src/*.sass' --verbose --no-exit",
|
"lint": "sass-lint -c .sasslintrc \"src/*.sass\" --verbose --no-exit",
|
||||||
"build": "run-s lint sass autoprefixer banner",
|
"build": "run-s lint sass autoprefixer banner",
|
||||||
"watch": "onchange src -- npm run build",
|
"watch": "onchange src -- npm run build",
|
||||||
"serve": "browser-sync start --no-notify -s test --ss dist -f dist",
|
"serve": "browser-sync start --no-notify -s test --ss dist -f dist",
|
||||||
"start": "run-p watch serve",
|
"start": "run-p watch serve",
|
||||||
"test": "run-s build coverage",
|
"test": "run-s build",
|
||||||
"coverage": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --require intelli-espower-loader test/unit/*.js",
|
"coverage": "nyc ava | coveralls",
|
||||||
"reference": "backstop reference --configPath=backstop.conf.js",
|
"reference": "backstop reference --configPath=backstop.conf.js",
|
||||||
"compare": "backstop test --configPath=backstop.conf.js",
|
"compare": "backstop test --configPath=backstop.conf.js",
|
||||||
"backstop": "run-s build && run-p serve compare"
|
"backstop": "run-s build && run-p serve compare"
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<a align="center" href="http://milligram.github.io"><img width="100%" src="https://milligram.github.io/images/thumbnail.jpg" alt="Milligram - A minimalist CSS framework"></a>
|
<a align="center" href="http://milligram.github.io"><img width="100%" src="https://milligram.github.io/images/thumbnail.png" alt="Milligram - A minimalist CSS framework"></a>
|
||||||
|
|
||||||
> A minimalist CSS framework.
|
> A minimalist CSS framework.
|
||||||
|
|
||||||
[![Travis Status](https://travis-ci.org/milligram/milligram.svg?branch=master)](https://travis-ci.org/milligram/milligram?branch=master)
|
[![Travis Status](https://travis-ci.org/milligram/milligram.svg?branch=master)](https://travis-ci.org/milligram/milligram?branch=master)
|
||||||
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/wabkk000uh6d97xk?svg=true)](https://ci.appveyor.com/project/cjpatoilo/milligram)
|
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/wabkk000uh6d97xk?svg=true)](https://ci.appveyor.com/project/cjpatoilo/milligram)
|
||||||
[![Codacy Status](https://img.shields.io/codacy/grade/848fb4bd6902434fab0bcfb5461284fe/master.svg)](https://www.codacy.com/app/cjpatoilo/milligram/dashboard)
|
[![Codacy Status](https://img.shields.io/codacy/grade/848fb4bd6902434fab0bcfb5461284fe/master.svg)](https://www.codacy.com/app/milligram/milligram/dashboard)
|
||||||
[![Dependencies Status](https://david-dm.org/milligram/milligram.svg)](https://travis-ci.org/milligram/milligram?branch=master)
|
[![Dependencies Status](https://david-dm.org/milligram/milligram.svg)](https://travis-ci.org/milligram/milligram?branch=master)
|
||||||
[![Download Status](https://img.shields.io/npm/dt/milligram.svg)](https://www.npmjs.com/package/milligram)
|
[![Download Status](https://img.shields.io/npm/dt/milligram.svg)](https://www.npmjs.com/package/milligram)
|
||||||
[![Version Status](https://badge.fury.io/js/milligram.svg)](https://www.npmjs.com/package/milligram)
|
[![Version Status](https://badge.fury.io/js/milligram.svg)](https://www.npmjs.com/package/milligram)
|
||||||
|
@ -2,6 +2,12 @@
|
|||||||
// Base
|
// Base
|
||||||
// ––––––––––––––––––––––––––––––––––––––––––––––––––
|
// ––––––––––––––––––––––––––––––––––––––––––––––––––
|
||||||
|
|
||||||
|
// Set box-sizing globally to handle padding and border widths
|
||||||
|
*,
|
||||||
|
*:after,
|
||||||
|
*:before
|
||||||
|
box-sizing: inherit
|
||||||
|
|
||||||
// The base font-size is set at 62.5% for having the convenience
|
// The base font-size is set at 62.5% for having the convenience
|
||||||
// of sizing rems in a way that is similar to using px: 1.6rem = 16px
|
// of sizing rems in a way that is similar to using px: 1.6rem = 16px
|
||||||
html
|
html
|
||||||
@ -16,9 +22,3 @@ body
|
|||||||
font-weight: 300
|
font-weight: 300
|
||||||
letter-spacing: .01em
|
letter-spacing: .01em
|
||||||
line-height: 1.6
|
line-height: 1.6
|
||||||
|
|
||||||
// Set box-sizing globally to handle padding and border widths
|
|
||||||
*,
|
|
||||||
*:after,
|
|
||||||
*:before
|
|
||||||
box-sizing: inherit
|
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// Typography
|
// Typography
|
||||||
// ––––––––––––––––––––––––––––––––––––––––––––––––––
|
// ––––––––––––––––––––––––––––––––––––––––––––––––––
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong
|
||||||
|
font-weight: bold
|
||||||
|
|
||||||
p
|
p
|
||||||
margin-top: 0
|
margin-top: 0
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<title>Milligram | A minimalist CSS framework.</title>
|
<title>Milligram | A minimalist CSS framework.</title>
|
||||||
<link rel="icon" href="https://milligram.github.io/images/favicon.ico">
|
<link rel="icon" href="https://milligram.github.io/images/favicon.ico">
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic">
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.css">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.css">
|
||||||
<link rel="stylesheet" href="milligram.min.css"><!-- to generate this style run `$ npm start` -->
|
<link rel="stylesheet" href="milligram.min.css"><!-- to generate this style run `$ npm start` -->
|
||||||
<link rel="stylesheet" href="https://milligram.github.io/styles/main.min.css">
|
<link rel="stylesheet" href="https://milligram.github.io/styles/main.min.css">
|
||||||
</head>
|
</head>
|
||||||
@ -17,7 +17,7 @@
|
|||||||
<main class="wrapper">
|
<main class="wrapper">
|
||||||
|
|
||||||
<section class="container" id="image">
|
<section class="container" id="image">
|
||||||
<img src="https://raw.githubusercontent.com/milligram/milligram.github.io/master/images/thumbnail.jpg" alt="Image">
|
<img src="https://milligram.github.io/images/thumbnail.png" alt="Milligram | A minimalist CSS framework.">
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="container" id="typography">
|
<section class="container" id="typography">
|
||||||
@ -541,7 +541,7 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<div class="example">
|
<div class="example">
|
||||||
<pre><code>.milligram {
|
<pre><code>.milligram {
|
||||||
color: #9b4dca;
|
color: #9b4dca;
|
||||||
}</code></pre>
|
}</code></pre>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -1,135 +0,0 @@
|
|||||||
const assert = require('power-assert');
|
|
||||||
const npm = require('../../package.json');
|
|
||||||
const bower = require('../../bower.json');
|
|
||||||
const composer = require('../../composer.json');
|
|
||||||
|
|
||||||
const packages = [
|
|
||||||
npm,
|
|
||||||
bower,
|
|
||||||
composer
|
|
||||||
];
|
|
||||||
|
|
||||||
describe('Package', () => {
|
|
||||||
|
|
||||||
describe('Name', () => {
|
|
||||||
|
|
||||||
it(`should be equal "${npm.name}"`, () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (compareValue.name.match('/')) compareValue.name = compareValue.name.split('/')[1]
|
|
||||||
if (referenceIndex !== compareIndex) assert(referenceValue.name === compareValue.name);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Version', () => {
|
|
||||||
|
|
||||||
it(`should be equal to "v${npm.version}"`, () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(referenceValue.version === compareValue.version);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Description', () => {
|
|
||||||
|
|
||||||
it(`should be equal to "${npm.description}"`, () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(referenceValue.description === compareValue.description);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Homepage', () => {
|
|
||||||
|
|
||||||
it(`should be equal to "${npm.homepage}"`, () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(referenceValue.homepage === compareValue.homepage);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Repository', () => {
|
|
||||||
|
|
||||||
it(`should be equal to "${npm.repository}"`, () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(referenceValue.repository === compareValue.repository);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('License', () => {
|
|
||||||
|
|
||||||
it(`should be equal to "${npm.license}"`, () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(referenceValue.license === compareValue.license);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Author Name', () => {
|
|
||||||
|
|
||||||
it(`should be equal to "${npm.author}"`, () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(referenceValue.author === compareValue.author);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Main File', () => {
|
|
||||||
|
|
||||||
it(`should be equal to "${npm.main}"`, () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(referenceValue.main === compareValue.main);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Ignore', () => {
|
|
||||||
|
|
||||||
it('should be equal', () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(JSON.stringify(referenceValue.ignore) === JSON.stringify(compareValue.ignore));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Keywords', () => {
|
|
||||||
|
|
||||||
it('should be equal', () => {
|
|
||||||
packages.map((referenceValue, referenceIndex) => {
|
|
||||||
packages.map((compareValue, compareIndex) => {
|
|
||||||
if (referenceIndex !== compareIndex) assert(JSON.stringify(referenceValue.keywords) === JSON.stringify(compareValue.keywords));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
92
test/unit/packages.js
Normal file
92
test/unit/packages.js
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
const test = require('ava');
|
||||||
|
const npm = require('../../package.json');
|
||||||
|
const bower = require('../../bower.json');
|
||||||
|
const composer = require('../../composer.json');
|
||||||
|
|
||||||
|
const packages = [
|
||||||
|
npm,
|
||||||
|
bower,
|
||||||
|
composer
|
||||||
|
];
|
||||||
|
|
||||||
|
test(`Name should be equal "${npm.name}"`, t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (compareValue.name.match('/')) compareValue.name = compareValue.name.split('/')[1]
|
||||||
|
if (referenceIndex !== compareIndex) t.is(referenceValue.name, compareValue.name);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`Version should be equal to "v${npm.version}"`, t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(referenceValue.version, compareValue.version);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`Description should be equal to "${npm.description}"`, t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(referenceValue.description, compareValue.description);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`Homepage should be equal to "${npm.homepage}"`, t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(referenceValue.homepage, compareValue.homepage);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`Repository should be equal to "${npm.repository}"`, t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(referenceValue.repository, compareValue.repository);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`License should be equal to "${npm.license}"`, t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(referenceValue.license, compareValue.license);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`Author Name should be equal to "${npm.author}"`, t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(referenceValue.author, compareValue.author);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test(`Main File should be equal to "${npm.main}"`, t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(referenceValue.main, compareValue.main);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Ignore should be equal', t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(JSON.stringify(referenceValue.ignore), JSON.stringify(compareValue.ignore));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Keywords should be equal', t => {
|
||||||
|
packages.map((referenceValue, referenceIndex) => {
|
||||||
|
packages.map((compareValue, compareIndex) => {
|
||||||
|
if (referenceIndex !== compareIndex) t.is(JSON.stringify(referenceValue.keywords), JSON.stringify(compareValue.keywords));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user