mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-10-30 04:32:45 +01:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
89cf3bf201 |
2
.bowerrc
2
.bowerrc
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"directory": "website/client-old/bower_components"
|
||||
"directory": "website/client/bower_components"
|
||||
}
|
||||
|
||||
7
.ebextensions/01-increase-timeout.config
Normal file
7
.ebextensions/01-increase-timeout.config
Normal file
@@ -0,0 +1,7 @@
|
||||
option_settings:
|
||||
- namespace: aws:elasticbeanstalk:command
|
||||
option_name: Timeout
|
||||
value: 1800
|
||||
- namespace: aws:elb:policies
|
||||
option_name: ConnectionSettingIdleTimeout
|
||||
value: 900
|
||||
@@ -1,20 +1,6 @@
|
||||
option_settings:
|
||||
- namespace: aws:elasticbeanstalk:command
|
||||
option_name: Timeout
|
||||
value: 1800
|
||||
- namespace: aws:elb:policies
|
||||
option_name: ConnectionSettingIdleTimeout
|
||||
value: 900
|
||||
commands:
|
||||
01_sym_node:
|
||||
01_sym:
|
||||
command: "ln -sf $(ls -td /opt/elasticbeanstalk/node-install/node-* | head -1)/bin/node /bin/node"
|
||||
files:
|
||||
"/opt/elasticbeanstalk/hooks/appdeploy/pre/41update_npm.sh" :
|
||||
mode: "000775"
|
||||
owner: root
|
||||
group: users
|
||||
content: |
|
||||
$(ls -td /opt/elasticbeanstalk/node-install/node-* | head -1)/bin/npm install -g npm@3
|
||||
container_commands:
|
||||
01_makeBabel:
|
||||
command: "touch /tmp/.babel.json"
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
# top level config
|
||||
root = true
|
||||
|
||||
# all files
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf # Unix-style
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
@@ -1,26 +1,35 @@
|
||||
# Compiled and vendored files
|
||||
common/dist/
|
||||
common/transpiled-babel/
|
||||
coverage/
|
||||
database_reports/
|
||||
website/build/
|
||||
website/transpiled-babel/
|
||||
website/common/transpiled-babel/
|
||||
dist/
|
||||
dist-client/
|
||||
|
||||
# Not linted
|
||||
migrations/*
|
||||
website/client-old/
|
||||
|
||||
# The files in website/client/js should be moved out and browserified
|
||||
website/client/
|
||||
|
||||
# Temporarilly disabled. These should be removed when the linting errors are fixed
|
||||
common/script/content/index.js
|
||||
common/script/public/**/*.js
|
||||
|
||||
website/server/**/api-v2/**/*.js
|
||||
website/server/routes/payments.js
|
||||
website/server/routes/pages.js
|
||||
website/server/middlewares/apiThrottle.js
|
||||
website/server/middlewares/forceRefresh.js
|
||||
|
||||
debug-scripts/*
|
||||
scripts/*
|
||||
test/server_side/**/*
|
||||
test/client-old/spec/**/*
|
||||
|
||||
# Temporarilly disabled. These should be removed when the linting errors are fixed TODO
|
||||
website/common/script/content/index.js
|
||||
website/common/browserify.js
|
||||
test/content/**/*
|
||||
Gruntfile.js
|
||||
tasks/*.js
|
||||
gulpfile.js
|
||||
gulp
|
||||
webpack
|
||||
test/client
|
||||
Gruntfile.js
|
||||
newrelic.js
|
||||
|
||||
test/api-legacy/**/*
|
||||
test/common/simulations/**/*
|
||||
test/content/**/*
|
||||
test/server_side/**/*
|
||||
test/spec/**/*
|
||||
|
||||
11
.eslintrc
11
.eslintrc
@@ -1,10 +1,9 @@
|
||||
{
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true,
|
||||
},
|
||||
"extends": [
|
||||
"habitrpg/es6",
|
||||
"habitrpg"
|
||||
"habitrpg/server",
|
||||
"habitrpg/babel"
|
||||
],
|
||||
"globals": {
|
||||
"Promise": true
|
||||
}
|
||||
}
|
||||
|
||||
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,4 +1,4 @@
|
||||
[//]: # (Before logging this issue, look through common problems at https://github.com/HabitRPG/habitrpg/issues If you find your issue there, read at least the first post to see if there is a workaround for you)
|
||||
[//]: # (Before logging this issue, look through common problems at https://github.com/HabitRPG/habitrpg/issue If you find your issue there, read at least the first post to see if there is a workaround for you)
|
||||
|
||||
[//]: # (Github is primarily used for reporting bugs. If you have a feature request, use "Help > Request a Feature" so that the feature request can be vetted by the larger Habitica community)
|
||||
|
||||
|
||||
24
.gitignore
vendored
24
.gitignore
vendored
@@ -1,19 +1,17 @@
|
||||
.DS_Store
|
||||
website/client-old/gen
|
||||
website/client-old/common
|
||||
website/client-old/apidoc
|
||||
website/client-old/js/habitrpg-shared.js*
|
||||
website/client-old/css/habitrpg-shared.css
|
||||
website/client/gen
|
||||
website/client/common
|
||||
website/client/apidoc
|
||||
website/transpiled-babel/
|
||||
website/common/transpiled-babel/
|
||||
common/transpiled-babel/
|
||||
node_modules
|
||||
*.swp
|
||||
.idea*
|
||||
config.json
|
||||
npm-debug.log*
|
||||
lib
|
||||
website/client-old/bower_components
|
||||
website/client-old/new-stuff.html
|
||||
website/client/bower_components
|
||||
website/client/new-stuff.html
|
||||
website/build
|
||||
newrelic_agent.log
|
||||
.bower-tmp
|
||||
@@ -27,16 +25,14 @@ src/*/*.map
|
||||
src/*/*/*.map
|
||||
test/*.js
|
||||
test/*.map
|
||||
website/client-old/docs
|
||||
website/client/docs
|
||||
*.sublime-workspace
|
||||
coverage
|
||||
coverage.html
|
||||
common/dist/scripts/*
|
||||
dist
|
||||
dist-client
|
||||
test/client/unit/coverage
|
||||
test/client/e2e/reports
|
||||
test/client-old/spec/mocks/translations.js
|
||||
common/dist/sprites/habitrpg-shared.css
|
||||
|
||||
test/spec/mocks/translations.js
|
||||
|
||||
# Elastic Beanstalk Files
|
||||
.elasticbeanstalk/*
|
||||
|
||||
@@ -2,12 +2,9 @@ node_modules/**
|
||||
.bower-cache/**
|
||||
.bower-tmp/**
|
||||
.bower-registry/**
|
||||
website/client-old/**
|
||||
website/client/**
|
||||
website/views/**
|
||||
website/build/**
|
||||
dist/**
|
||||
test/**
|
||||
.git/**
|
||||
Gruntfile.js
|
||||
CHANGELOG.md
|
||||
|
||||
@@ -25,7 +25,6 @@ RUN apt-get clean
|
||||
RUN rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install global packages
|
||||
RUN npm install -g npm@3
|
||||
RUN npm install -g gulp grunt-cli bower
|
||||
|
||||
# Clone Habitica repo and install dependencies
|
||||
|
||||
58
Gruntfile.js
58
Gruntfile.js
@@ -9,10 +9,10 @@ module.exports = function(grunt) {
|
||||
|
||||
karma: {
|
||||
unit: {
|
||||
configFile: 'test/client-old/spec/karma.conf.js'
|
||||
configFile: 'karma.conf.js'
|
||||
},
|
||||
continuous: {
|
||||
configFile: 'test/client-old/spec/karma.conf.js',
|
||||
configFile: 'karma.conf.js',
|
||||
singleRun: true,
|
||||
autoWatch: false
|
||||
}
|
||||
@@ -28,11 +28,11 @@ module.exports = function(grunt) {
|
||||
report: 'gzip'
|
||||
},
|
||||
files:{
|
||||
"website/client-old/css/habitrpg-shared.css": [
|
||||
"website/assets/sprites/dist/spritesmith*.css",
|
||||
"website/assets/sprites/css/backer.css",
|
||||
"website/assets/sprites/css/Mounts.css",
|
||||
"website/assets/sprites/css/index.css"
|
||||
"common/dist/sprites/habitrpg-shared.css": [
|
||||
"common/dist/sprites/spritesmith*.css",
|
||||
"common/css/backer.css",
|
||||
"common/css/Mounts.css",
|
||||
"common/css/index.css"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -43,11 +43,11 @@ module.exports = function(grunt) {
|
||||
options: {
|
||||
compress: false, // AFTER
|
||||
'include css': true,
|
||||
paths: ['website/client-old']
|
||||
paths: ['website/client']
|
||||
},
|
||||
files: {
|
||||
'website/build/app.css': ['website/client-old/css/index.styl'],
|
||||
'website/build/static.css': ['website/client-old/css/static.styl']
|
||||
'website/build/app.css': ['website/client/css/index.styl'],
|
||||
'website/build/static.css': ['website/client/css/static.styl']
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -55,13 +55,13 @@ module.exports = function(grunt) {
|
||||
copy: {
|
||||
build: {
|
||||
files: [
|
||||
{expand: true, cwd: 'website/client-old/', src: 'favicon.ico', dest: 'website/build/'},
|
||||
{expand: true, cwd: 'website/client-old/', src: 'favicon_192x192.png', dest: 'website/build/'},
|
||||
{expand: true, cwd: 'website/assets/sprites/dist/', src: 'spritesmith*.png', dest: 'website/build/'},
|
||||
{expand: true, cwd: 'website/assets/sprites/', src: 'backer-only/*.gif', dest: 'website/build/'},
|
||||
{expand: true, cwd: 'website/assets/sprites/', src: 'npc_ian.gif', dest: 'website/build/'},
|
||||
{expand: true, cwd: 'website/assets/sprites/', src: 'quest_*.gif', dest: 'website/build/'},
|
||||
{expand: true, cwd: 'website/client-old/', src: 'bower_components/bootstrap/dist/fonts/*', dest: 'website/build/'}
|
||||
{expand: true, cwd: 'website/client/', src: 'favicon.ico', dest: 'website/build/'},
|
||||
{expand: true, cwd: 'website/client/', src: 'favicon_192x192.png', dest: 'website/build/'},
|
||||
{expand: true, cwd: '', src: 'common/dist/sprites/spritesmith*.png', dest: 'website/build/'},
|
||||
{expand: true, cwd: '', src: 'common/img/sprites/backer-only/*.gif', dest: 'website/build/'},
|
||||
{expand: true, cwd: '', src: 'common/img/sprites/npc_ian.gif', dest: 'website/build/'},
|
||||
{expand: true, cwd: '', src: 'common/img/sprites/quest_*.gif', dest: 'website/build/'},
|
||||
{expand: true, cwd: 'website/client/', src: 'bower_components/bootstrap/dist/fonts/*', dest: 'website/build/'}
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -77,8 +77,10 @@ module.exports = function(grunt) {
|
||||
'website/build/*.css',
|
||||
'website/build/favicon.ico',
|
||||
'website/build/favicon_192x192.png',
|
||||
'website/build/*.png',
|
||||
'website/build/*.gif',
|
||||
'website/build/common/dist/sprites/*.png',
|
||||
'website/build/common/img/sprites/backer-only/*.gif',
|
||||
'website/build/common/img/sprites/npc_ian.gif',
|
||||
'website/build/common/img/sprites/quest_*.gif',
|
||||
'website/build/bower_components/bootstrap/dist/fonts/*'
|
||||
],
|
||||
dest: 'website/build/*.css'
|
||||
@@ -86,9 +88,9 @@ module.exports = function(grunt) {
|
||||
}
|
||||
});
|
||||
|
||||
//Load build files from client-old/manifest.json
|
||||
grunt.registerTask('loadManifestFiles', 'Load all build files from client-old/manifest.json', function(){
|
||||
var files = grunt.file.readJSON('./website/client-old/manifest.json');
|
||||
//Load build files from client/manifest.json
|
||||
grunt.registerTask('loadManifestFiles', 'Load all build files from client/manifest.json', function(){
|
||||
var files = grunt.file.readJSON('./website/client/manifest.json');
|
||||
var uglify = {};
|
||||
var cssmin = {};
|
||||
|
||||
@@ -99,7 +101,7 @@ module.exports = function(grunt) {
|
||||
_.each(files[key].js, function(val){
|
||||
var path = "./";
|
||||
if( val.indexOf('common/') == -1)
|
||||
path = './website/client-old/';
|
||||
path = './website/client/';
|
||||
js.push(path + val);
|
||||
});
|
||||
|
||||
@@ -108,7 +110,7 @@ module.exports = function(grunt) {
|
||||
_.each(files[key].css, function(val){
|
||||
var path = "./";
|
||||
if( val.indexOf('common/') == -1) {
|
||||
path = (val == 'app.css' || val == 'static.css') ? './website/build/' : './website/client-old/';
|
||||
path = (val == 'app.css' || val == 'static.css') ? './website/build/' : './website/client/';
|
||||
}
|
||||
css.push(path + val)
|
||||
});
|
||||
@@ -120,7 +122,7 @@ module.exports = function(grunt) {
|
||||
|
||||
grunt.config.set('cssmin.build.files', cssmin);
|
||||
// Rewrite urls to relative path
|
||||
grunt.config.set('cssmin.build.options', {'target': 'website/client-old/css/whatever-css.css'});
|
||||
grunt.config.set('cssmin.build.options', {'target': 'website/client/css/whatever-css.css'});
|
||||
});
|
||||
|
||||
// Register tasks.
|
||||
@@ -129,9 +131,9 @@ module.exports = function(grunt) {
|
||||
grunt.registerTask('build:test', ['test:prepare:translations', 'build:dev']);
|
||||
|
||||
grunt.registerTask('test:prepare:translations', function() {
|
||||
var i18n = require('./website/server/libs/i18n'),
|
||||
var i18n = require('./website/server/libs/api-v3/i18n'),
|
||||
fs = require('fs');
|
||||
fs.writeFileSync('test/client-old/spec/mocks/translations.js',
|
||||
fs.writeFileSync('test/spec/mocks/translations.js',
|
||||
"if(!window.env) window.env = {};\n" +
|
||||
"window.env.translations = " + JSON.stringify(i18n.translations['en']) + ';');
|
||||
});
|
||||
@@ -144,6 +146,6 @@ module.exports = function(grunt) {
|
||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-hashres');
|
||||
if (process.env.NODE_ENV !== 'production') grunt.loadNpmTasks('grunt-karma');
|
||||
grunt.loadNpmTasks('grunt-karma');
|
||||
|
||||
};
|
||||
|
||||
7
LICENSE
7
LICENSE
@@ -2,9 +2,8 @@
|
||||
This Source Code is subject to the terms of the GNU General Public License, v. 3.0.
|
||||
If a copy of the GPL was not distributed with this file, You can obtain one at http://www.gnu.org/licenses/gpl-3.0.txt
|
||||
|
||||
* Assets and content designed for Mozilla BrowserQuest are licensed under CC-BY-SA 3.0:
|
||||
* Assets and content designed for Mozilla BrowserQuest is licensed under CC-BY-SA 3.0:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
* Assets and content designed for HabitRPG are licensed under CC-BY-NC-SA 3.0:
|
||||
http://creativecommons.org/licenses/by-nc-sa/3.0/
|
||||
|
||||
* Assets and content designed for HabitRPG is licensed under CC-BY-NC-SA 3.0:
|
||||
http://creativecommons.org/licenses/by-nc-sa/3.0/
|
||||
@@ -6,7 +6,7 @@ VAGRANTFILE_API_VERSION = "2"
|
||||
|
||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
config.vm.provider "virtualbox" do |v|
|
||||
v.memory = 4096
|
||||
v.memory = 768
|
||||
v.cpus = 1
|
||||
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
|
||||
end
|
||||
|
||||
11
bower.json
11
bower.json
@@ -9,12 +9,13 @@
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"website/client-old/bower_components",
|
||||
"website/client/bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"dependencies": {
|
||||
"Angular-At-Directive": "snicker/Angular-At-Directive#c27bae207aa06d1e",
|
||||
"BrowserQuest": "browserquest/BrowserQuest#c3a960b03031dad5d",
|
||||
"angular": "1.3.9",
|
||||
"angular-bootstrap": "0.13.0",
|
||||
"angular-filter": "0.5.1",
|
||||
@@ -30,7 +31,7 @@
|
||||
"bootstrap-tour": "0.10.1",
|
||||
"css-social-buttons": "samcollins/css-social-buttons#v1.1.1 ",
|
||||
"github-buttons": "mdo/github-buttons#v3.0.0",
|
||||
"hello": "1.13.4",
|
||||
"hello": "1.5.0",
|
||||
"jquery": "2.1.0",
|
||||
"jquery-colorbox": "1.4.36",
|
||||
"jquery-ui": "1.10.3",
|
||||
@@ -38,12 +39,10 @@
|
||||
"js-emoji": "snicker/js-emoji#f25d8a303f",
|
||||
"ngInfiniteScroll": "1.0.0",
|
||||
"pnotify": "1.3.1",
|
||||
"sticky": "1.0.3",
|
||||
"sticky": "*",
|
||||
"swagger-ui": "wordnik/swagger-ui#v2.0.24",
|
||||
"smart-app-banner": "78ef9c0679723b25be1a0ae04f7b4aef7cbced4f",
|
||||
"habitica-markdown": "1.2.2",
|
||||
"pusher-js-auth": "^2.0.0",
|
||||
"pusher-websocket-iso": "pusher#^3.2.0"
|
||||
"habitica-markdown": "^1.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"angular-mocks": "1.3.9"
|
||||
|
||||
4
common/.eslintrc
Normal file
4
common/.eslintrc
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"extends": "habitrpg/browser"
|
||||
}
|
||||
|
||||
16
common/README.md
Normal file
16
common/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# Common
|
||||
|
||||
Shared resources useful for the multiple Habitica repositories, that way all the repositories remain in-sync with common characteristics. Includes things like:
|
||||
|
||||
* Assets - sprites, images, etc
|
||||
* CSS - especially, esp. sprite-sheet mapping
|
||||
* Algorithms - level up algorithm, scoring functions, etc
|
||||
* View helper functions that may come in handy for multiple client MVCs
|
||||
* Item definitions - weapons, armor, pets
|
||||
|
||||
## Compiling spritesheets
|
||||
Because of some wonkiness with Heroku, the spritesheet compilation is not part of the production build process and must be done manually when new images are added by running:
|
||||
|
||||
``` bash
|
||||
npm run sprites
|
||||
```
|
||||
60
common/css/backer.css
Normal file
60
common/css/backer.css
Normal file
@@ -0,0 +1,60 @@
|
||||
/* These sprites are oversized until a move to 105 avatar box happens*/
|
||||
|
||||
/* Backer */
|
||||
.weapon_special_0, .head_special_0 {
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
margin-left: -3px;
|
||||
margin-top: -18px;
|
||||
}
|
||||
.slim_armor_special_0, .broad_armor_special_0, .shield_special_0 {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
|
||||
/* Critical */
|
||||
.weapon_special_critical {
|
||||
background: url("/common/img/sprites/backer-only/weapon_special_critical.gif") no-repeat;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
margin-left:-12px;
|
||||
margin-top:12px;
|
||||
}
|
||||
|
||||
/* This is oversized until a move to 105 avatar box happens*/
|
||||
.weapon_special_1 {
|
||||
margin-left: -12px;
|
||||
}
|
||||
.broad_armor_special_1, .slim_armor_special_1, .head_special_1 {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
|
||||
.head_special_0 {
|
||||
background: url("/common/img/sprites/backer-only/BackerOnly-Equip-ShadeHelmet.gif") no-repeat;
|
||||
}
|
||||
.head_special_1 {
|
||||
background: url("/common/img/sprites/backer-only/ContributorOnly-Equip-CrystalHelmet.gif") no-repeat;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.broad_armor_special_0,.slim_armor_special_0 {
|
||||
background: url("/common/img/sprites/backer-only/BackerOnly-Equip-ShadeArmor.gif") no-repeat;
|
||||
}
|
||||
.broad_armor_special_1,.slim_armor_special_1 {
|
||||
background: url("/common/img/sprites/backer-only/ContributorOnly-Equip-CrystalArmor.gif") no-repeat;
|
||||
}
|
||||
|
||||
.shield_special_0 {
|
||||
background: url("/common/img/sprites/backer-only/BackerOnly-Shield-TormentedSkull.gif") no-repeat;
|
||||
}
|
||||
|
||||
.weapon_special_0 {
|
||||
background: url("/common/img/sprites/backer-only/BackerOnly-Weapon-DarkSoulsBlade.gif") no-repeat;
|
||||
}
|
||||
|
||||
.Pet-Wolf-Cerberus {
|
||||
width: 105px;
|
||||
height: 72px;
|
||||
background: url("/common/img/sprites/backer-only/BackerOnly-Pet-CerberusPup.gif") no-repeat;
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
{{#sprites}}
|
||||
.{{name}} {
|
||||
background-image: url(/{{{escaped_image}}});
|
||||
background-image: url({{{escaped_image}}});
|
||||
background-position: {{px.offset_x}} {{px.offset_y}};
|
||||
width: {{px.width}};
|
||||
height: {{px.height}};
|
||||
}
|
||||
{{#if custom}}
|
||||
.customize-option.{{name}} {
|
||||
background-image: url(/{{{escaped_image}}});
|
||||
background-image: url({{{escaped_image}}});
|
||||
background-position: {{custom.px.offset_x}} {{custom.px.offset_y}};
|
||||
width: {{custom.px.width}};
|
||||
height: {{custom.px.height}};
|
||||
@@ -1,18 +1,18 @@
|
||||
/* Comment out for holiday events */
|
||||
/* .npc_ian {
|
||||
background: url("/npc_ian.gif") no-repeat;
|
||||
.npc_ian {
|
||||
background: url("/common/img/sprites/npc_ian.gif") no-repeat;
|
||||
width: 78px;
|
||||
height: 135px;
|
||||
} */
|
||||
}
|
||||
|
||||
.quest_burnout {
|
||||
background: url("/quest_burnout.gif") no-repeat;
|
||||
background: url("/common/img/sprites/quest_burnout.gif") no-repeat;
|
||||
width: 219px;
|
||||
height: 249px;
|
||||
}
|
||||
|
||||
.quest_bewilder {
|
||||
background: url("/quest_bewilder.gif") no-repeat;
|
||||
background: url("/common/img/sprites/quest_bewilder.gif") no-repeat;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user