diff --git a/src/Console/Command/GenerateExtensionCommand.php b/src/Console/Command/GenerateExtensionCommand.php deleted file mode 100644 index 0870ba9bd..000000000 --- a/src/Console/Command/GenerateExtensionCommand.php +++ /dev/null @@ -1,125 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Flarum\Console\Command; - -use Flarum\Foundation\Application; -use Symfony\Component\Console\Question\Question; - -class GenerateExtensionCommand extends AbstractCommand -{ - protected function configure() - { - $this - ->setName('generate:extension') - ->setDescription('Generate a Flarum extension skeleton'); - } - - /** - * Execute the console command. - * - * @return mixed - */ - protected function fire() - { - do { - $name = $this->ask('Extension name:'); - } while (! preg_match('/^([a-z0-9-]+)$/i', $name)); - - do { - $namespace = $this->ask('Namespace:'); - } while (! preg_match('/^([a-z0-9_\\\\]+)$/i', $namespace)); - - do { - $title = $this->ask('Title:'); - } while (! $title); - - $description = $this->ask('Description:'); - - $authorName = $this->ask('Author name:'); - - $authorEmail = $this->ask('Author email:'); - - $license = $this->ask('License:'); - - $this->info('Generating extension skeleton for "'.$name.'"...'); - - $dir = public_path().'/extensions/'.$name; - - $replacements = [ - '{{namespace}}' => $namespace, - '{{escapedNamespace}}' => str_replace('\\', '\\\\', $namespace), - '{{name}}' => $name - ]; - - $this->copyStub($dir, $replacements); - - $manifest = [ - 'name' => $name, - 'title' => $title, - 'description' => $description, - 'keywords' => [], - 'version' => '0.1.0', - 'author' => [ - 'name' => $authorName, - 'email' => $authorEmail, - 'homepage' => '' - ], - 'license' => $license, - 'require' => [ - 'flarum' => '>='.Application::VERSION - ], - 'icon' => [ - 'name' => '', - 'backgroundColor' => '', - 'color' => '' - ] - ]; - - file_put_contents($dir.'/flarum.json', json_encode($manifest, JSON_PRETTY_PRINT)); - - passthru("cd $dir; composer install; cd js/forum; npm install; gulp; cd ../admin; npm install; gulp"); - - $this->info('Extension "'.$name.'" generated!'); - } - - protected function ask($question, $default = null) - { - $question = new Question("$question ", $default); - - return $this->getHelperSet()->get('question')->ask($this->input, $this->output, $question); - } - - protected function copyStub($destination, $replacements = []) - { - $this->recursiveCopy(__DIR__.'/../../../stubs/extension', $destination, $replacements); - } - - protected function recursiveCopy($src, $dst, $replacements = []) - { - $dir = opendir($src); - @mkdir($dst); - - while (($file = readdir($dir)) !== false) { - if ($file != '.' && $file != '..') { - if (is_dir($src.'/'.$file)) { - $this->recursiveCopy($src.'/'.$file, $dst.'/'.$file, $replacements); - } else { - $contents = file_get_contents($src.'/'.$file); - $contents = str_replace(array_keys($replacements), array_values($replacements), $contents); - - file_put_contents($dst.'/'.$file, $contents); - } - } - } - - closedir($dir); - } -} diff --git a/src/Console/Server.php b/src/Console/Server.php index d20ca0d76..f58971735 100644 --- a/src/Console/Server.php +++ b/src/Console/Server.php @@ -11,7 +11,6 @@ namespace Flarum\Console; -use Flarum\Console\Command\GenerateExtensionCommand; use Flarum\Console\Command\GenerateMigrationCommand; use Flarum\Debug\Console\CacheClearCommand; use Flarum\Debug\Console\InfoCommand; @@ -42,7 +41,6 @@ class Server extends AbstractServer $commands = [ InstallCommand::class, MigrateCommand::class, - GenerateExtensionCommand::class, GenerateMigrationCommand::class, ]; diff --git a/stubs/extension/.editorconfig b/stubs/extension/.editorconfig deleted file mode 100644 index 87694ddab..000000000 --- a/stubs/extension/.editorconfig +++ /dev/null @@ -1,19 +0,0 @@ -# EditorConfig helps developers define and maintain consistent -# coding styles between different editors and IDEs -# editorconfig.org - -root = true - -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -indent_style = space -indent_size = 2 - -[*.{diff,md}] -trim_trailing_whitespace = false - -[*.php] -indent_size = 4 diff --git a/stubs/extension/.eslintignore b/stubs/extension/.eslintignore deleted file mode 100644 index 86b7c8854..000000000 --- a/stubs/extension/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -**/bower_components/**/* -**/node_modules/**/* -vendor/**/* -**/Gulpfile.js -**/dist/**/* diff --git a/stubs/extension/.eslintrc b/stubs/extension/.eslintrc deleted file mode 100644 index 9e89e6ba6..000000000 --- a/stubs/extension/.eslintrc +++ /dev/null @@ -1,175 +0,0 @@ -{ - "parser": "babel-eslint", // https://github.com/babel/babel-eslint - "env": { // http://eslint.org/docs/user-guide/configuring.html#specifying-environments - "browser": true // browser global variables - }, - "ecmaFeatures": { - "arrowFunctions": true, - "blockBindings": true, - "classes": true, - "defaultParams": true, - "destructuring": true, - "forOf": true, - "generators": false, - "modules": true, - "objectLiteralComputedProperties": true, - "objectLiteralDuplicateProperties": false, - "objectLiteralShorthandMethods": true, - "objectLiteralShorthandProperties": true, - "spread": true, - "superInFunctions": true, - "templateStrings": true, - "jsx": true - }, - "globals": { - "m": true, - "app": true, - "$": true, - "moment": true - }, - "plugins": [ - "react" - ], - "rules": { - "react/jsx-uses-vars": 1, - -/** - * Strict mode - */ - // babel inserts "use strict"; for us - "strict": [2, "never"], // http://eslint.org/docs/rules/strict - -/** - * ES6 - */ - "no-var": 2, // http://eslint.org/docs/rules/no-var - "prefer-const": 2, // http://eslint.org/docs/rules/prefer-const - -/** - * Variables - */ - "no-shadow": 2, // http://eslint.org/docs/rules/no-shadow - "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names - "no-unused-vars": [2, { // http://eslint.org/docs/rules/no-unused-vars - "vars": "local", - "args": "after-used" - }], - "no-use-before-define": 2, // http://eslint.org/docs/rules/no-use-before-define - -/** - * Possible errors - */ - "comma-dangle": [2, "never"], // http://eslint.org/docs/rules/comma-dangle - "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign - "no-console": 1, // http://eslint.org/docs/rules/no-console - "no-debugger": 1, // http://eslint.org/docs/rules/no-debugger - "no-alert": 1, // http://eslint.org/docs/rules/no-alert - "no-constant-condition": 1, // http://eslint.org/docs/rules/no-constant-condition - "no-dupe-keys": 2, // http://eslint.org/docs/rules/no-dupe-keys - "no-duplicate-case": 2, // http://eslint.org/docs/rules/no-duplicate-case - "no-empty": 2, // http://eslint.org/docs/rules/no-empty - "no-ex-assign": 2, // http://eslint.org/docs/rules/no-ex-assign - "no-extra-boolean-cast": 0, // http://eslint.org/docs/rules/no-extra-boolean-cast - "no-extra-semi": 2, // http://eslint.org/docs/rules/no-extra-semi - "no-func-assign": 2, // http://eslint.org/docs/rules/no-func-assign - "no-inner-declarations": 2, // http://eslint.org/docs/rules/no-inner-declarations - "no-invalid-regexp": 2, // http://eslint.org/docs/rules/no-invalid-regexp - "no-irregular-whitespace": 2, // http://eslint.org/docs/rules/no-irregular-whitespace - "no-obj-calls": 2, // http://eslint.org/docs/rules/no-obj-calls - "no-reserved-keys": 2, // http://eslint.org/docs/rules/no-reserved-keys - "no-sparse-arrays": 2, // http://eslint.org/docs/rules/no-sparse-arrays - "no-unreachable": 2, // http://eslint.org/docs/rules/no-unreachable - "use-isnan": 2, // http://eslint.org/docs/rules/use-isnan - "block-scoped-var": 2, // http://eslint.org/docs/rules/block-scoped-var - -/** - * Best practices - */ - "consistent-return": 2, // http://eslint.org/docs/rules/consistent-return - "curly": [2, "multi-line"], // http://eslint.org/docs/rules/curly - "default-case": 2, // http://eslint.org/docs/rules/default-case - "dot-notation": [2, { // http://eslint.org/docs/rules/dot-notation - "allowKeywords": true - }], - "eqeqeq": 2, // http://eslint.org/docs/rules/eqeqeq - "no-caller": 2, // http://eslint.org/docs/rules/no-caller - "no-else-return": 2, // http://eslint.org/docs/rules/no-else-return - "no-eq-null": 2, // http://eslint.org/docs/rules/no-eq-null - "no-eval": 2, // http://eslint.org/docs/rules/no-eval - "no-extend-native": 2, // http://eslint.org/docs/rules/no-extend-native - "no-extra-bind": 2, // http://eslint.org/docs/rules/no-extra-bind - "no-fallthrough": 2, // http://eslint.org/docs/rules/no-fallthrough - "no-floating-decimal": 2, // http://eslint.org/docs/rules/no-floating-decimal - "no-implied-eval": 2, // http://eslint.org/docs/rules/no-implied-eval - "no-lone-blocks": 2, // http://eslint.org/docs/rules/no-lone-blocks - "no-loop-func": 2, // http://eslint.org/docs/rules/no-loop-func - "no-multi-str": 2, // http://eslint.org/docs/rules/no-multi-str - "no-native-reassign": 2, // http://eslint.org/docs/rules/no-native-reassign - "no-new": 2, // http://eslint.org/docs/rules/no-new - "no-new-func": 2, // http://eslint.org/docs/rules/no-new-func - "no-new-wrappers": 2, // http://eslint.org/docs/rules/no-new-wrappers - "no-octal": 2, // http://eslint.org/docs/rules/no-octal - "no-octal-escape": 2, // http://eslint.org/docs/rules/no-octal-escape - "no-param-reassign": 2, // http://eslint.org/docs/rules/no-param-reassign - "no-proto": 2, // http://eslint.org/docs/rules/no-proto - "no-redeclare": 2, // http://eslint.org/docs/rules/no-redeclare - "no-return-assign": 2, // http://eslint.org/docs/rules/no-return-assign - "no-self-compare": 2, // http://eslint.org/docs/rules/no-self-compare - "no-sequences": 2, // http://eslint.org/docs/rules/no-sequences - "no-throw-literal": 2, // http://eslint.org/docs/rules/no-throw-literal - "no-with": 2, // http://eslint.org/docs/rules/no-with - "radix": 2, // http://eslint.org/docs/rules/radix - "vars-on-top": 2, // http://eslint.org/docs/rules/vars-on-top - "wrap-iife": [2, "any"], // http://eslint.org/docs/rules/wrap-iife - "yoda": 2, // http://eslint.org/docs/rules/yoda - -/** - * Style - */ - "indent": [2, 2], // http://eslint.org/docs/rules/indent - "brace-style": [2, // http://eslint.org/docs/rules/brace-style - "1tbs", { - "allowSingleLine": true - }], - "quotes": [ - 2, "single", "avoid-escape" // http://eslint.org/docs/rules/quotes - ], - "camelcase": [2, { // http://eslint.org/docs/rules/camelcase - "properties": "never" - }], - "comma-spacing": [2, { // http://eslint.org/docs/rules/comma-spacing - "before": false, - "after": true - }], - "comma-style": [2, "last"], // http://eslint.org/docs/rules/comma-style - "eol-last": 2, // http://eslint.org/docs/rules/eol-last - "key-spacing": [2, { // http://eslint.org/docs/rules/key-spacing - "beforeColon": false, - "afterColon": true - }], - "new-cap": [2, { // http://eslint.org/docs/rules/new-cap - "newIsCap": true - }], - "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines - "max": 2 - }], - "no-new-object": 2, // http://eslint.org/docs/rules/no-new-object - "no-spaced-func": 2, // http://eslint.org/docs/rules/no-spaced-func - "no-trailing-spaces": 2, // http://eslint.org/docs/rules/no-trailing-spaces - "no-wrap-func": 2, // http://eslint.org/docs/rules/no-wrap-func - "no-underscore-dangle": 0, // http://eslint.org/docs/rules/no-underscore-dangle - "one-var": [2, "never"], // http://eslint.org/docs/rules/one-var - "padded-blocks": [2, "never"], // http://eslint.org/docs/rules/padded-blocks - "semi": [2, "always"], // http://eslint.org/docs/rules/semi - "semi-spacing": [2, { // http://eslint.org/docs/rules/semi-spacing - "before": false, - "after": true - }], - "space-after-keywords": 2, // http://eslint.org/docs/rules/space-after-keywords - "space-before-blocks": 2, // http://eslint.org/docs/rules/space-before-blocks - "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren - "space-infix-ops": 2, // http://eslint.org/docs/rules/space-infix-ops - "space-return-throw-case": 2, // http://eslint.org/docs/rules/space-return-throw-case - "spaced-line-comment": 2, // http://eslint.org/docs/rules/spaced-line-comment - } -} diff --git a/stubs/extension/.gitignore b/stubs/extension/.gitignore deleted file mode 100644 index 4181b9dca..000000000 --- a/stubs/extension/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/vendor -composer.phar -.DS_Store -Thumbs.db -node_modules -bower_components \ No newline at end of file diff --git a/stubs/extension/bootstrap.php b/stubs/extension/bootstrap.php deleted file mode 100644 index b0c515f41..000000000 --- a/stubs/extension/bootstrap.php +++ /dev/null @@ -1,14 +0,0 @@ -subscribe(Listener\AddClientAssets::class); -}; diff --git a/stubs/extension/composer.json b/stubs/extension/composer.json deleted file mode 100644 index 74f608c32..000000000 --- a/stubs/extension/composer.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "autoload": { - "psr-4": { - "{{escapedNamespace}}\\": "src/" - } - } -} diff --git a/stubs/extension/js/admin/Gulpfile.js b/stubs/extension/js/admin/Gulpfile.js deleted file mode 100644 index 12ff60341..000000000 --- a/stubs/extension/js/admin/Gulpfile.js +++ /dev/null @@ -1,7 +0,0 @@ -var gulp = require('flarum-gulp'); - -gulp({ - modules: { - '{{name}}': 'src/**/*.js' - } -}); diff --git a/stubs/extension/js/admin/package.json b/stubs/extension/js/admin/package.json deleted file mode 100644 index 62ea6c691..000000000 --- a/stubs/extension/js/admin/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "private": true, - "devDependencies": { - "gulp": "^3.8.11", - "flarum-gulp": "^0.1.0" - } -} diff --git a/stubs/extension/js/admin/src/main.js b/stubs/extension/js/admin/src/main.js deleted file mode 100644 index f0b420e7c..000000000 --- a/stubs/extension/js/admin/src/main.js +++ /dev/null @@ -1,6 +0,0 @@ -import { extend } from 'flarum/extend'; -import app from 'flarum/app'; - -app.initializers.add('{{name}}', () => { - // TODO -}); diff --git a/stubs/extension/js/forum/Gulpfile.js b/stubs/extension/js/forum/Gulpfile.js deleted file mode 100644 index 12ff60341..000000000 --- a/stubs/extension/js/forum/Gulpfile.js +++ /dev/null @@ -1,7 +0,0 @@ -var gulp = require('flarum-gulp'); - -gulp({ - modules: { - '{{name}}': 'src/**/*.js' - } -}); diff --git a/stubs/extension/js/forum/package.json b/stubs/extension/js/forum/package.json deleted file mode 100644 index 62ea6c691..000000000 --- a/stubs/extension/js/forum/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "private": true, - "devDependencies": { - "gulp": "^3.8.11", - "flarum-gulp": "^0.1.0" - } -} diff --git a/stubs/extension/js/forum/src/main.js b/stubs/extension/js/forum/src/main.js deleted file mode 100644 index f0b420e7c..000000000 --- a/stubs/extension/js/forum/src/main.js +++ /dev/null @@ -1,6 +0,0 @@ -import { extend } from 'flarum/extend'; -import app from 'flarum/app'; - -app.initializers.add('{{name}}', () => { - // TODO -}); diff --git a/stubs/extension/less/admin/extension.less b/stubs/extension/less/admin/extension.less deleted file mode 100644 index e69de29bb..000000000 diff --git a/stubs/extension/less/forum/extension.less b/stubs/extension/less/forum/extension.less deleted file mode 100644 index e69de29bb..000000000 diff --git a/stubs/extension/src/Listener/AddClientAssets.php b/stubs/extension/src/Listener/AddClientAssets.php deleted file mode 100755 index babc8c68f..000000000 --- a/stubs/extension/src/Listener/AddClientAssets.php +++ /dev/null @@ -1,31 +0,0 @@ -listen(ConfigureWebApp::class, [$this, 'addAssets']); - } - - public function addAssets(ConfigureWebApp $event) - { - if ($event->isForum()) { - $event->addAssets([ - __DIR__.'/../../js/forum/dist/extension.js', - __DIR__.'/../../less/forum/extension.less', - ]); - $event->addBootstrapper('{{name}}/main'); - } - - if ($event->isAdmin()) { - $event->addAssets([ - __DIR__.'/../../js/admin/dist/extension.js', - __DIR__.'/../../less/admin/extension.less', - ]); - $event->addBootstrapper('{{name}}/main'); - } - } -}