├── .travis.yml ├── generators ├── app │ ├── templates │ │ └── tree │ │ │ ├── public │ │ │ ├── robots.txt │ │ │ ├── favicon.ico │ │ │ └── humans.txt │ │ │ ├── .bem │ │ │ ├── level.js │ │ │ ├── configs │ │ │ │ ├── production.js │ │ │ │ ├── current │ │ │ │ └── development.js │ │ │ ├── levels │ │ │ │ ├── bundles.js │ │ │ │ └── blocks.js │ │ │ └── make.js │ │ │ ├── application.blocks │ │ │ ├── system │ │ │ │ ├── system.js │ │ │ │ ├── __controllers │ │ │ │ │ └── _system │ │ │ │ │ │ └── system__controllers_system.js │ │ │ │ ├── system.deps.js │ │ │ │ ├── __directives │ │ │ │ │ └── _awesome │ │ │ │ │ │ └── system__directives_awesome.js │ │ │ │ └── __routes │ │ │ │ │ └── system__routes.js │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── boot │ │ │ │ ├── boot.deps.js │ │ │ │ └── boot.js │ │ │ ├── common.blocks │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── page │ │ │ │ └── page.deps.js │ │ │ ├── service.blocks │ │ │ └── .bem │ │ │ │ └── level.js │ │ │ ├── service.pages │ │ │ ├── .bem │ │ │ │ └── level.js │ │ │ └── index │ │ │ │ ├── blocks │ │ │ │ └── .bem │ │ │ │ │ └── level.js │ │ │ │ └── index.bemjson.js │ │ │ ├── design │ │ │ ├── common.blocks │ │ │ │ └── .bem │ │ │ │ │ └── level.js │ │ │ └── service.blocks │ │ │ │ └── .bem │ │ │ │ └── level.js │ │ │ ├── .bowerrc │ │ │ ├── bower.json │ │ │ ├── .gitignore │ │ │ ├── .editorconfig │ │ │ ├── README.md │ │ │ ├── settings.json │ │ │ ├── package.json │ │ │ └── gulpfile.js │ └── index.js └── module │ ├── templates │ ├── _module.js │ ├── _controller.js │ ├── _module.deps.js │ └── _routes.js │ └── index.js ├── .gitignore ├── .editorconfig ├── .jshintrc ├── CONTRIBUTING.ru.md ├── CONTRIBUTING.md ├── package.json ├── .jscs.js ├── README.ru.md ├── README.md ├── CHANGELOG.md └── CHANGELOG.ru.md /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '0.10' 4 | 5 | -------------------------------------------------------------------------------- /generators/app/templates/tree/public/robots.txt: -------------------------------------------------------------------------------- 1 | # robotstxt.org/ 2 | 3 | User-agent: * 4 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('bem/lib/levels/project'); 2 | -------------------------------------------------------------------------------- /generators/module/templates/_module.js: -------------------------------------------------------------------------------- 1 | angular.module('<%= _.slugify(appname) %>.<%= _.slugify(module) %>', []); 2 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.bem/configs/production.js: -------------------------------------------------------------------------------- 1 | process.env.YENV = 'production'; 2 | 3 | module.exports = {}; 4 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.bem/configs/current: -------------------------------------------------------------------------------- 1 | process.env.BEMHTML_ENV = 'development'; 2 | 3 | module.exports = {}; 4 | -------------------------------------------------------------------------------- /generators/app/templates/tree/application.blocks/system/system.js: -------------------------------------------------------------------------------- 1 | angular.module('<%= _.slugify(appname) %>.system', []); 2 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.bem/configs/development.js: -------------------------------------------------------------------------------- 1 | process.env.BEMHTML_ENV = 'development'; 2 | 3 | module.exports = {}; 4 | -------------------------------------------------------------------------------- /generators/app/templates/tree/common.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /generators/app/templates/tree/application.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /generators/app/templates/tree/service.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /generators/app/templates/tree/service.pages/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../.bem/levels/bundles.js'); 2 | -------------------------------------------------------------------------------- /generators/app/templates/tree/design/common.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /generators/app/templates/tree/design/service.blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../.bem/levels/blocks.js'); 2 | -------------------------------------------------------------------------------- /generators/app/templates/tree/service.pages/index/blocks/.bem/level.js: -------------------------------------------------------------------------------- 1 | exports.baseLevelPath = require.resolve('../../../../.bem/levels/blocks'); 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | .tmp 4 | .sass-cache 5 | .DS_Store 6 | .bem/cache/ 7 | *.bundles/*/*.* 8 | !*.bundles/*/*.bemjson.js 9 | !*.bundles/.bem/* -------------------------------------------------------------------------------- /generators/app/templates/tree/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/awinogradov/generator-bem-ng/HEAD/generators/app/templates/tree/public/favicon.ico -------------------------------------------------------------------------------- /generators/app/templates/tree/application.blocks/boot/boot.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | {block: 'angularjs'}, 4 | ], 5 | shouldDeps: [ 6 | 7 | ] 8 | }) 9 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "libs", 3 | "storage": { 4 | "packages": ".bower-cache", 5 | "registry": ".bower-registry" 6 | }, 7 | "tmp": ".bower-tmp" 8 | } 9 | -------------------------------------------------------------------------------- /generators/app/templates/tree/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "<%= _.slugify(appname) %>", 3 | "dependencies": { 4 | "bem-core": "v2.4.0", 5 | "bem-ng": "0.0.4" 6 | }, 7 | "devDependencies": {} 8 | } 9 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | dist 4 | .tmp 5 | .sass-cache 6 | libs 7 | test/libs 8 | .DS_Store 9 | .project 10 | .bem/cache/ 11 | *.bundles/*/*.* 12 | !*.bundles/*/*.bemjson.js 13 | !*.bundles/.bem/* 14 | -------------------------------------------------------------------------------- /generators/app/templates/tree/common.blocks/page/page.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | noDeps: [ 3 | { block: 'i-bem', elem: 'dom', mods: { init: 'auto' } } 4 | ], 5 | shouldDeps: [ 6 | {block: 'boot'}, 7 | {block: 'system'} 8 | ] 9 | }) 10 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /generators/app/templates/tree/application.blocks/system/__controllers/_system/system__controllers_system.js: -------------------------------------------------------------------------------- 1 | angular.module('<%= _.slugify(appname) %>.system').controller('SystemController', 2 | ['$scope', function ($scope) { 3 | 4 | console.log('Hello from SystemController'); 5 | 6 | }]); 7 | -------------------------------------------------------------------------------- /generators/app/templates/tree/application.blocks/system/system.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | mustDeps: [ 3 | 4 | ], 5 | shouldDeps: [ 6 | {elem: 'controllers', mods: {'system': true}}, 7 | {elem: 'routes'}, 8 | {elem: 'directives', mods: {'awesome': true}} 9 | ] 10 | }) 11 | -------------------------------------------------------------------------------- /generators/module/templates/_controller.js: -------------------------------------------------------------------------------- 1 | angular.module('<%= _.slugify(appname) %>.<%= _.slugify(module) %>').controller('<%= _.capitalize(_.slugify(module)) %>Controller', 2 | ['$scope', function ($scope) { 3 | 4 | console.log('Hello from <%= _.slugify(module) %>Controller'); 5 | 6 | }]); 7 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /generators/module/templates/_module.deps.js: -------------------------------------------------------------------------------- 1 | ({ 2 | shouldDeps: [ 3 | {elem: 'module'}, 4 | {elem: 'controllers', mods: {'<%= _.slugify(module) %>': true}}, 5 | {elem: 'routes'} 6 | // {elem: 'directives', mods: {'name': true}} 7 | // {elem: 'factories', mods: {'name': true}} 8 | // {elem: 'services', mods: {'name': true}} 9 | ] 10 | }) 11 | -------------------------------------------------------------------------------- /generators/app/templates/tree/application.blocks/system/__directives/_awesome/system__directives_awesome.js: -------------------------------------------------------------------------------- 1 | angular.module('<%= _.slugify(appname) %>.system').directive('ngAwesome', [function() { 2 | return { 3 | restrict: 'A', 4 | link: function ($scope, element, attrs) { 5 | console.log('Hello from Awesome directive. Find it in System module.'); 6 | } 7 | } 8 | }]); 9 | -------------------------------------------------------------------------------- /generators/app/templates/tree/application.blocks/boot/boot.js: -------------------------------------------------------------------------------- 1 | var <%= _.slugify(appname) %> = angular.module('<%= _.slugify(appname) %>', [ 2 | 'ui.router', 3 | '<%= _.slugify(appname) %>.system' 4 | ]); 5 | 6 | angular.element(document).ready(function() { 7 | angular.bootstrap(document, ['<%= _.slugify(appname) %>']); 8 | }); 9 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "esnext": true, 4 | "bitwise": true, 5 | "camelcase": true, 6 | "curly": true, 7 | "eqeqeq": true, 8 | "immed": true, 9 | "indent": 4, 10 | "latedef": true, 11 | "newcap": true, 12 | "noarg": true, 13 | "quotmark": "single", 14 | "regexp": true, 15 | "undef": true, 16 | "unused": true, 17 | "strict": true, 18 | "trailing": true, 19 | "smarttabs": true, 20 | "white": true 21 | } 22 | -------------------------------------------------------------------------------- /generators/app/templates/tree/application.blocks/system/__routes/system__routes.js: -------------------------------------------------------------------------------- 1 | angular.module('<%= _.slugify(appname) %>.system').config(['$stateProvider', '$urlRouterProvider', 2 | function($stateProvider, $urlRouterProvider) { 3 | // Unmatched routes: 4 | $urlRouterProvider.otherwise('/'); 5 | 6 | // states 7 | $stateProvider 8 | .state('root', { 9 | url: '/', 10 | controller: 'SystemController' 11 | }); 12 | } 13 | ]); 14 | -------------------------------------------------------------------------------- /generators/module/templates/_routes.js: -------------------------------------------------------------------------------- 1 | angular.module('<%= _.slugify(appname) %>.<%= _.slugify(module) %>').config(['$stateProvider', '$urlRouterProvider', 2 | function($stateProvider, $urlRouterProvider) { 3 | 4 | // states for <%= _.slugify(module) %> module 5 | $stateProvider 6 | .state('<%= _.slugify(module) %>', { 7 | url: '/<%= _.slugify(module) %>', 8 | controller: '<%= _.capitalize(_.slugify(module)) %>Controller' 9 | }); 10 | } 11 | ]); 12 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.bem/levels/bundles.js: -------------------------------------------------------------------------------- 1 | var environ = require('bem-environ'), 2 | BEMCORE_TECHS = environ.getLibPath('bem-core', '.bem/techs'), 3 | BEMPR_TECHS = environ.getLibPath('bem-pr', 'bem/techs'), 4 | getTechResolver = environ.getTechResolver; 5 | 6 | exports.baseLevelPath = require.resolve('./blocks'); 7 | 8 | exports.getTechs = function() { 9 | var techs = this.__base(); 10 | 11 | ['browser.js+bemhtml', 'html'].forEach(getTechResolver(techs, BEMCORE_TECHS)); 12 | 13 | return techs; 14 | }; 15 | 16 | // Create bundles in bemjson.js tech 17 | exports.defaultTechs = ['bemjson.js']; 18 | -------------------------------------------------------------------------------- /generators/app/templates/tree/public/humans.txt: -------------------------------------------------------------------------------- 1 | Read more about this file here: http://humanstxt.org/ 2 | 3 | Don't forget add link to head: 4 | 5 | /* TEAM */ 6 | 7 | 8 | Your title: Your name. 9 | 10 | 11 | Site: email, link to a contact form, etc. 12 | 13 | 14 | Twitter: your Twitter username. 15 | 16 | 17 | Location: City, Country. 18 | 19 | [...] 20 | 21 | /* THANKS */ 22 | 23 | Name: name or url 24 | 25 | [...] 26 | 27 | /* SITE */ 28 | 29 | 30 | Last update: YYYY/MM/DD 31 | 32 | 33 | Standards: HTML5, CSS3,.. 34 | 35 | 36 | Components: Modernizr, jQuery, etc. 37 | 38 | 39 | Software: Software used for the development -------------------------------------------------------------------------------- /generators/app/templates/tree/README.md: -------------------------------------------------------------------------------- 1 | # <%= _.slugify(appname) %> 2 | 3 | Please, write some description here. 4 | 5 | ### Troubles 6 | 7 | If your project have problems, talk about them here. 8 | 9 | ### Contributing 10 | 11 | 1. [Create an issue](https://github.com/<%= username %>/<%= _.slugify(appname) %>/issues) with description or take from available. 12 | 2. Create a feature-branch with an issue number based on a master branch. For example, for an issue #42: `git checkout -b feature/issue@42`. 13 | 3. Commit changes and `push` your branch. 14 | 4. Create a pull-request from your feature branch. 15 | 5. Link your pull-request with an issue number by comment. 16 | 6. Wait for your pull-request and the issue to be closed. 17 | 18 | ### [MIT](http://en.wikipedia.org/wiki/MIT_License) License 19 | -------------------------------------------------------------------------------- /CONTRIBUTING.ru.md: -------------------------------------------------------------------------------- 1 | ## Мы используем рабочий процесс GitHub'а 2 | 3 | Подробнее почитать об этом можно на GitHub [guides](http://guides.github.com/), 4 | а также в статье на [хабре](http://habrahabr.ru/post/189046/). 5 | 6 | ### Как внести изменения 7 | 8 | 1. [Создайте новое issue](https://github.com/verybigman/generator-bem/issues/new) с описанием или возьмите существующее. 9 | 2. Создайте feature-branch с номером issue от master ветки. Например, для issue #42: `git checkout -b feature/issue@42`. 10 | 3. Зафиксируйте изменения и сделайте `push` вашей ветки. 11 | 4. Создайте pull-request из вашей ветки. 12 | 5. Свяжите ваш pull-request с номером issue через коментарий. 13 | 6. Ждите пока ваш pull-request примут, а issue закроют. 14 | 15 | _Для продуктивной работы с таким процессом вы можете использовать [git-extras](https://github.com/visionmedia/git-extras) 16 | \- очень полезный инструмент для Git_ -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## We use GitHub workflow 2 | 3 | This README also available in [russian](https://github.com/verybigman/generator-bem/blob/master/CONTRIBUTING.ru.md). 4 | 5 | You can read more about workflow on GitHub [guides](http://guides.github.com/). 6 | 7 | ### How to contribute 8 | 9 | 1. [Create an issue](https://github.com/verybigman/generator-bem/issues/new) with description or take from available. 10 | 2. Create a feature-branch with an issue number based on a master branch. For example, for an issue #42: `git checkout -b feature/issue@42`. 11 | 3. Commit changes and `push` your branch. 12 | 4. Create a pull-request from your feature branch. 13 | 5. Link your pull-request with an issue number by comment. 14 | 6. Wait for your pull-request and the issue to be closed. 15 | 16 | _For pretty work with process you can use [git-extras](https://github.com/visionmedia/git-extras) - very useful tool for Git_ -------------------------------------------------------------------------------- /generators/app/templates/tree/.bem/levels/blocks.js: -------------------------------------------------------------------------------- 1 | var path = require('path'), 2 | environ = require('bem-environ'), 3 | getTechResolver = environ.getTechResolver, 4 | 5 | PRJ_ROOT = environ.PRJ_ROOT, 6 | PRJ_TECHS = path.resolve(PRJ_ROOT, '.bem/techs'), 7 | BEMCORE_TECHS = environ.getLibPath('bem-core', '.bem/techs'); 8 | 9 | exports.getTechs = function() { 10 | var techs = { 11 | 'bemjson.js' : 'v2/bemjson.js', 12 | 'bemdecl.js' : 'v2/bemdecl.js', 13 | 'deps.js' : 'v2/deps.js', 14 | 'css' : 'v2/css', 15 | 'stylus' : 'v2/styl.js', 16 | 'js' : 'v2/js-i' 17 | }; 18 | 19 | // use techs from bem-core library 20 | ['bemhtml', 'md'].forEach(getTechResolver(techs, BEMCORE_TECHS)); 21 | 22 | return techs; 23 | }; 24 | 25 | exports.defaultTechs = ['stylus', 'js', 'bemhtml', 'md']; 26 | -------------------------------------------------------------------------------- /generators/app/templates/tree/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "public": "./public", 3 | "assets": { 4 | "name": "assets", 5 | "dir": "./assets", 6 | "cwd": "./public/assets", 7 | "styles": { 8 | "name": "application.min.css", 9 | "dir": "./public/assets" 10 | }, 11 | "scripts": { 12 | "name": "application.min.js", 13 | "dir": "./public/assets" 14 | } 15 | }, 16 | "browsers_support": [ 17 | "last 2 versions", 18 | "ie 10", 19 | "ff 24", 20 | "opera 12.16", 21 | "android 4", 22 | "ios 6" 23 | ], 24 | "service" : { 25 | "levels" : [ "common.blocks", "service.blocks", "application.blocks" ], 26 | "pages" : { 27 | "dir" : "service.pages" 28 | } 29 | }, 30 | "server" : { 31 | "deps" : [ "express", "body-parser", "errorhandler", "morgan", "winston", "consolidate", "ejs" ], 32 | "env" : "development", 33 | "port" : 3000 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "generator-bem-ng", 3 | "version": "2.0.0-beta3", 4 | "description": "A BEM+AngularJS generator for Yeoman", 5 | "keywords": [ 6 | "yeoman-generator", 7 | "bem", 8 | "bem-tools", 9 | "yeoman", 10 | "generator", 11 | "angular", 12 | "angularjs" 13 | ], 14 | "homepage": "https://github.com/verybigman/generator-bem-ng", 15 | "bugs": "https://github.com/verybigman/generator-bem-ng/issues", 16 | "author": { 17 | "name": "Anton Winogradov", 18 | "email": "winogradovaa@gmail.com", 19 | "url": "https://github.com/verybigman" 20 | }, 21 | "main": "generators/app/index.js", 22 | "repository": { 23 | "type": "git", 24 | "url": "git://github.com/verybigman/generator-bem-ng.git" 25 | }, 26 | "dependencies": { 27 | "yeoman-generator": "0.17.6", 28 | "lodash": "2.4.1", 29 | "bower": "1.3.11" 30 | }, 31 | "devDependencies": { 32 | "jshint": "2.5.6", 33 | "jscs": "1.6.2" 34 | }, 35 | "peerDependencies": { 36 | "yo": ">=1.0.0" 37 | }, 38 | "engines": { 39 | "node": ">=0.10", 40 | "npm": ">=1.2.10" 41 | }, 42 | "license": "MIT" 43 | } 44 | -------------------------------------------------------------------------------- /generators/app/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var cwd = process.cwd(), 4 | util = require('util'), 5 | path = require('path'), 6 | join = path.join, 7 | yeoman = require('yeoman-generator'); 8 | 9 | var BemNgGenerator = module.exports = function BemNgGenerator(args, options, config) { 10 | yeoman.generators.Base.apply(this, arguments); 11 | 12 | this.settings = this.src.readJSON('tree/settings.json'); 13 | this.email = this.user.git.email(); 14 | this.username = this.user.git.username; 15 | 16 | var _this = this; 17 | 18 | this.on('end', function () { 19 | 20 | if (_this.options['skip-install']) { 21 | return; 22 | } 23 | 24 | _this.installDependencies({ 25 | skipMessage: _this.options['skip-install-message'], 26 | skipInstall: _this.options['skip-install'], 27 | bower: false, 28 | callback: function() { 29 | _this.log.write('').ok('Done!'); 30 | setTimeout(process.exit, 0, 0); 31 | } 32 | }); 33 | 34 | }); 35 | }; 36 | 37 | util.inherits(BemNgGenerator, yeoman.generators.Base); 38 | 39 | BemNgGenerator.prototype.app = function app() { 40 | this.directory('tree', cwd); 41 | }; 42 | -------------------------------------------------------------------------------- /generators/app/templates/tree/service.pages/index/index.bemjson.js: -------------------------------------------------------------------------------- 1 | ({ 2 | block : 'page', 3 | title : 'Yeoman BEM', 4 | favicon : 'favicon.ico', 5 | head : [{ elem : 'meta', attrs : { name : 'viewport', content : 'width=device-width, initial-scale=1.0' }}], 6 | styles : [{ elem : 'css', url : '<%= settings.assets.name %>/<%= settings.assets.styles.name %>' }], 7 | scripts : [{ elem : 'js', url : '<%= settings.assets.name %>/<%= settings.assets.scripts.name %>' }], 8 | content : [ 9 | { 10 | elem : 'header', 11 | tag : 'header', 12 | content : [ 13 | { 14 | tag : 'h2', content : 'Hello, World! This page generated by Yeoman generator-bem.' 15 | } 16 | ] 17 | }, 18 | { 19 | elem : 'content', 20 | tag : 'main', 21 | attrs : { role : 'main', 'ng-controller' : 'SystemController' }, 22 | content : [ 23 | { 24 | tag : 'p', 25 | attrs : { 'ng-awesome' : '' }, 26 | content : 'Find this in service.pages/index/index.bemjson.js' 27 | } 28 | ] 29 | }, 30 | { 31 | elem : 'footer', 32 | tag : 'footer', 33 | content : [ 34 | 'License: MIT' 35 | ] 36 | } 37 | ] 38 | }) 39 | -------------------------------------------------------------------------------- /generators/module/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var cwd = process.cwd(), 4 | util = require('util'), 5 | path = require('path'), 6 | join = path.join, 7 | yeoman = require('yeoman-generator'); 8 | 9 | var ModuleGenerator = module.exports = function ModuleGenerator(args, options, config) { 10 | 11 | yeoman.generators.NamedBase.apply(this, arguments); 12 | 13 | var _this = this; 14 | 15 | this.module = this.name; 16 | 17 | this.on('end', function () { 18 | _this.log("\nAdd block \'' + _this.module + '\' to common.blocks/page/page.deps.js file: \n{block:\'' + _this.module + '\'} \n\nOr use block in BEMJSON:\n{\n block : \'' + _this.module + '\',\n attrs : { \'ng-controller\' : \'' + _this.module.charAt(0).toUpperCase() + _this.module.slice(1, _this.module.length) + 'Controller\' }\n}\n"); 19 | }); 20 | }; 21 | 22 | util.inherits(ModuleGenerator, yeoman.generators.NamedBase); 23 | 24 | ModuleGenerator.prototype.templates = function templates() { 25 | this.template(join('_module.js'), join('application.blocks', this.module, this.module + '.js')); 26 | this.template(join('_module.deps.js'), join('application.blocks', this.module, this.module + '.deps.js')); 27 | this.template(join('_controller.js'), join('application.blocks', this.module, '__controllers', '_' + this.module, this.module + '__controllers_' + this.module + '.js')); 28 | this.template(join('_routes.js'), join('application.blocks', this.module, '__routes', this.module + '__routes.js')); 29 | }; 30 | -------------------------------------------------------------------------------- /generators/app/templates/tree/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "<%= _.slugify(appname) %>", 4 | "version": "0.0.0", 5 | "description": "Description for <%= _.slugify(appname) %>", 6 | "homepage": "https://github.com/<%= username %>/<%= _.slugify(appname) %>", 7 | "bugs": "https://github.com/<%= username %>/<%= _.slugify(appname) %>/issues", 8 | "author": { 9 | "name": "<%= username %>", 10 | "email": "<%= email %>", 11 | "url": "https://github.com/<%= username %>" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git://github.com/<%= username %>/<%= _.slugify(appname) %>.git" 16 | }, 17 | "dependencies": { 18 | "bem-environ": "1.4.0" 19 | }, 20 | "devDependencies": { 21 | "bem": "0.9.0", 22 | "bem-cli": "1.0.1", 23 | "bem-tools-autoprefixer": "0.0.3", 24 | "borschik": "1.3.0", 25 | "bower": "1.3.11", 26 | "bower-npm-install": "0.5.8", 27 | "gulp": "3.8.8", 28 | "gulp-concat": "2.4.1", 29 | "gulp-minify-css": "0.3.10", 30 | "gulp-filter": "1.0.2", 31 | "gulp-if": "1.2.4", 32 | "gulp-jshint": "1.8.4", 33 | "gulp-load-plugins": "0.6.0", 34 | "gulp-nodemon": "1.0.4", 35 | "gulp-notify": "1.7.0", 36 | "gulp-rename": "1.2.0", 37 | "gulp-shell": "0.2.9", 38 | "run-sequence": "0.3.7", 39 | "stylus": "0.49.0", 40 | "browser-sync": "1.5.1" 41 | }, 42 | "scripts": { 43 | "postinstall": "bower-npm-install", 44 | "deps": "bower-npm-install --non-interactive" 45 | }, 46 | "engines": { 47 | "node": ">=0.10" 48 | }, 49 | "license": "MIT" 50 | } 51 | -------------------------------------------------------------------------------- /generators/app/templates/tree/.bem/make.js: -------------------------------------------------------------------------------- 1 | var settings = require('../settings.json'), 2 | path = require('path'), 3 | U = require('bem').util; 4 | 5 | require('bem-tools-autoprefixer').extendMake(MAKE); 6 | 7 | MAKE.decl('Arch', { 8 | 9 | blocksLevelsRegexp : /^.+?\.blocks$/, 10 | bundlesLevelsRegexp : /^.+?\.pages$/ 11 | 12 | }); 13 | 14 | MAKE.decl('BundleNode', { 15 | 16 | getTechs : function() { 17 | return [ 18 | 'bemjson.js', 19 | 'bemdecl.js', 20 | 'deps.js', 21 | 'stylus', 22 | 'css', 23 | 'bemhtml', 24 | 'js', 25 | 'html' 26 | ]; 27 | }, 28 | 29 | getForkedTechs : function() { 30 | return this.__base().concat(['browser.js+bemhtml', 'stylus']); 31 | }, 32 | 33 | getLevels : function() { 34 | return [ 35 | 'libs/bem-core/common.blocks', 36 | 'libs/bem-ng/common.blocks', 37 | 'common.blocks', 38 | 'design/common.blocks', 39 | 'service.blocks', 40 | 'design/service.blocks', 41 | 'application.blocks' 42 | ]; 43 | }, 44 | 45 | 'create-css-node' : function(tech, bundleNode, magicNode) { 46 | var source = this.getBundlePath('stylus'); 47 | if(this.ctx.arch.hasNode(source)) { 48 | return this.createAutoprefixerNode(tech, this.ctx.arch.getNode(source), bundleNode, magicNode); 49 | } 50 | } 51 | 52 | }); 53 | 54 | MAKE.decl('AutoprefixerNode', { 55 | 56 | getBrowsers : function () { 57 | return settings.browsers_support; 58 | } 59 | 60 | }); 61 | 62 | MAKE.decl('BundlesLevelNode', { 63 | 64 | buildMergedBundle : function() { 65 | return true; 66 | }, 67 | mergedBundleName : function() { 68 | return settings.assets.name; 69 | } 70 | 71 | }); 72 | -------------------------------------------------------------------------------- /.jscs.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | excludeFiles: [ 3 | 'node_modules/**', 4 | 'coverage/**', 5 | 'app/templates/**' 6 | ], 7 | requireSpaceAfterKeywords: ['if', 'else', 'for', 'while', 'do', 'switch', 'return', 'try', 'catch'], 8 | requireSpaceBeforeBlockStatements: true, 9 | requireSpacesInConditionalExpression: true, 10 | requireSpacesInFunction: { 11 | beforeOpeningCurlyBrace: true 12 | }, 13 | requireSpacesInAnonymousFunctionExpression: { 14 | beforeOpeningRoundBrace: true 15 | }, 16 | disallowSpacesInNamedFunctionExpression: { 17 | beforeOpeningRoundBrace: true 18 | }, 19 | requireMultipleVarDecl: true, 20 | requireBlocksOnNewline: 1, 21 | disallowPaddingNewlinesInBlocks: true, 22 | disallowSpacesInsideArrayBrackets: 'nested', 23 | disallowSpacesInsideParentheses: true, 24 | requireSpacesInsideObjectBrackets: 'all', 25 | disallowQuotedKeysInObjects: 'allButReserved', 26 | disallowSpaceAfterObjectKeys: true, 27 | requireCommaBeforeLineBreak: true, 28 | requireOperatorBeforeLineBreak: true, 29 | disallowSpaceAfterPrefixUnaryOperators: true, 30 | disallowSpaceBeforePostfixUnaryOperators: true, 31 | requireSpaceBeforeBinaryOperators: true, 32 | requireSpaceAfterBinaryOperators: true, 33 | requireCamelCaseOrUpperCaseIdentifiers: true, 34 | disallowKeywords: ['with'], 35 | disallowMultipleLineStrings: true, 36 | disallowMultipleLineBreaks: true, 37 | validateLineBreaks: 'LF', 38 | validateQuoteMarks: { 39 | mark: '\'', 40 | escape: true 41 | }, 42 | disallowMixedSpacesAndTabs: true, 43 | disallowTrailingWhitespace: true, 44 | disallowKeywordsOnNewLine: ['else', 'catch'], 45 | requireLineFeedAtFileEnd: true, 46 | maximumLineLength: 120, 47 | requireCapitalizedConstructors: true, 48 | safeContextKeyword: ['_this'], 49 | disallowYodaConditions: true, 50 | validateJSDoc: { 51 | checkParamNames: true, 52 | checkRedundantParams: true, 53 | requireParamTypes: true 54 | }, 55 | requireSpaceAfterLineComment: true, 56 | disallowNewlineBeforeBlockStatements: true 57 | }; 58 | -------------------------------------------------------------------------------- /README.ru.md: -------------------------------------------------------------------------------- 1 | # generator-bem-ng [![Build Status](https://secure.travis-ci.org/verybigman/generator-bem-ng.png?branch=master)](https://travis-ci.org/verybigman/generator-bem-ng) 2 | 3 | Необыкновенный генератор для [Yeoman](http://yeoman.io), который позволит вам использовать AngularJS в ваших БЭМ-проектах. Wow! 4 | 5 | ## Навыки 6 | 7 | - базовая структура: `yo bem-ng` 8 | - создание AngularJS модулей: `yo bem-ng:module users` 9 | - реалтайм разработка с Gulp (инструкции в консоли): `gulp` 10 | - финальная сборка с Gulp: `gulp build` 11 | - установка: `npm install -g generator-bem-ng` 12 | 13 | ## Парадигмы 14 | 15 | AngularJS модули это БЭМ блоки. Контроллеры, сервисы, директивы и т.п. это БЭМ элементы. Элементы объявляются в модулях с помощью файла \*.deps.js. 16 | 17 | __Использование уровней:__ 18 | 19 | - _common.blocks_ - используется для переопределния блоков, подкюченных библиотек 20 | - _service.blocks_ - используется для новых блоков в этом сервисе 21 | - _application.blocks_ - используется только для AngularJS модулей 22 | - _server.blocks_ - используется для модулей сервера NodeJS 23 | 24 | __Дизайн и стили:__ 25 | - _design/common.blocks_ - переопределние блоков, подкюченных библиотек 26 | - _design/service.blocks_ - стили только для этого сервиса 27 | 28 | __Пример AngularJS модуля:__ 29 | ``` 30 | application.blocks 31 | users 32 | __controllers 33 | _index 34 | users__controllers_index.js 35 | users__controllers_index.en.md 36 | users__controllers_index.ru.md 37 | _signin 38 | users__controllers_singin.js 39 | _signup 40 | users__controllers_singup.js 41 | __directives 42 | _awesome 43 | users__directives_awesome.js 44 | __factories 45 | __services 46 | __routes 47 | users__routes.js 48 | users.js 49 | users.en.md 50 | users.ru.md 51 | users.deps.js 52 | ``` 53 | 54 | ## Технологии 55 | 56 | - [BEMHTML](http://bem.info/technology/bemhtml/2.3.0/reference) 57 | - [Stylus](http://learnboost.github.io/stylus) 58 | - [AngularJS](https://angularjs.org) 59 | 60 | Вы можете использовать любые из [bem-tools techs](https://github.com/bem/bem-tools/tree/support/0.8.x/lib/techs/v2), объявив их в .bem/levels/\*.js файлах, а также вы можете написать свои технологии в .bem/levels/techs/\*.js. 61 | 62 | ### Зависимости 63 | 64 | Генератор тянет за собой [bem-core](https://github.com/bem/bem-core) и [bem-ng](https://github.com/verybigman/bem-ng). [bem-core](https://github.com/bem/bem-core) библиотека, написанная ребятами из [Яндекса](http://yandex.ru). 65 | 66 | ### Авторы 67 | 68 | - Виноградов Антон ([verybigman](https://github.com/verybigman)) 69 | 70 | ### Предложения 71 | 72 | Все замечания и предложения пишите в [issue](https://github.com/verybigman/generator-bem/issues) на Github. 73 | 74 | ### Лицензия [MIT](http://en.wikipedia.org/wiki/MIT_License) 75 | 76 | #### Think better. Stay BEMed! 77 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # generator-bem-ng [![Build Status](https://secure.travis-ci.org/verybigman/generator-bem-ng.png?branch=master)](https://travis-ci.org/verybigman/generator-bem-ng) 2 | 3 | This README also available in [russian](https://github.com/verybigman/generator-bem-ng/blob/master/README.ru.md). 4 | 5 | Awesome [Yeoman](http://yeoman.io) generator for your AngularJS flowered bem-projects. Wow! 6 | 7 | ## You can 8 | 9 | - make pretty bem-project structure: `yo bem-ng` 10 | - create AngularJS modules: `yo bem-ng:module users` 11 | - develop you bem-project with Gulp (take instruction from console): `gulp` 12 | - distribute project with Gulp: `gulp build` 13 | - get it now: `npm install -g generator-bem-ng` 14 | 15 | ## Paradigm 16 | 17 | AngularJS modules is BEM blocks. Controllers, routes, services, directives and etc. is BEM elements. Elements required in modules by \*.deps.js file. 18 | 19 | __Levels usage:__ 20 | 21 | - _common.blocks_ - use for override blocks from connected libraries 22 | - _service.blocks_ - use for new blocks on this service 23 | - _application.blocks_ - use for AngularJS modules only 24 | - _server.blocks_ - use for NodeJS server modules 25 | 26 | __Put all your CSS design to:__ 27 | - _design/common.blocks_ - override libraries styles 28 | - _design/service.blocks_ - only this service styles 29 | 30 | __module example:__ 31 | ``` 32 | application.blocks 33 | users 34 | __controllers 35 | _index 36 | users__controllers_index.js 37 | users__controllers_index.en.md 38 | users__controllers_index.ru.md 39 | _signin 40 | users__controllers_singin.js 41 | _signup 42 | users__controllers_singup.js 43 | __directives 44 | _awesome 45 | users__directives_awesome.js 46 | __factories 47 | __services 48 | __routes 49 | users__routes.js 50 | users.js 51 | users.en.md 52 | users.ru.md 53 | users.deps.js 54 | ``` 55 | 56 | ## Technologies 57 | 58 | - [BEMHTML](http://bem.info/technology/bemhtml/2.3.0/reference) 59 | - [Stylus](http://learnboost.github.io/stylus) 60 | - [AngularJS](https://angularjs.org) 61 | 62 | You can override them with [bem-tools techs](https://github.com/bem/bem-tools/tree/support/0.8.x/lib/techs/v2) in .bem/levels/\*.js files and also you can write you custom tech in .bem/levels/techs/\*.js. 63 | 64 | ### Dependencies 65 | 66 | Project contain [bem-core](https://github.com/bem/bem-core) and [bem-ng](https://github.com/verybigman/bem-ng) libs. [bem-core](https://github.com/bem/bem-core) was developed by guys from [Yandex](http://yandex.ru). 67 | 68 | ### Authors 69 | 70 | - Anton Winogradov ([verybigman](https://github.com/verybigman)) 71 | 72 | ### Ideas 73 | 74 | Please, talk about your ideas by GitHub [issues](https://github.com/verybigman/generator-bem/issues). 75 | 76 | ### [MIT](http://en.wikipedia.org/wiki/MIT_License) License 77 | 78 | #### Think better. Stay BEMed! 79 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | This CHANGELOG also available in [russian](https://github.com/verybigman/generator-bem/blob/master/CHANGELOG.ru.md). 2 | 3 | __2.0.0-beta2__: 4 | - some fixes 5 | 6 | __2.0.0-beta1__: 7 | - new generator structure 8 | - new AngularJS modules paradigm 9 | - create AngularJS app in first step 10 | 11 | __1.1.6__: 12 | 13 | - update bem-protein version 14 | 15 | __1.1.5__: 16 | 17 | - update bem-protein version 18 | 19 | __1.1.4__: 20 | 21 | - update bem-protein version 22 | - add new levels from bem-protein 23 | 24 | __1.1.3__: 25 | 26 | - add new levels from bem-protein 27 | 28 | __1.1.2__: 29 | 30 | - update bem-protein version 31 | 32 | __1.1.1__: 33 | 34 | - hot fixes 35 | 36 | __1.1.0__: 37 | 38 | - removed dependency on bem-techs, use techs from Yandex libs only 39 | - add subgen for AngularJS application extending 40 | - add subgen for creating AngularJS modules 41 | - add subgen for NodeJS application extending 42 | - add special group of blocks common.blocks/libs for connecting with external libs 43 | - compile assets (css, js, ng-templates) with Gulp 44 | - update packages versions and remove unneeded 45 | 46 | __1.0.0__: 47 | 48 | - compatibility structure with bem-core, bem-components and project-stub 49 | - using libs directory for bower-npm-install instead of bower_components 50 | - make v1.0.0 is main branch 51 | - add separating with design and platforms 52 | - using Roole for css by default 53 | 54 | __0.2.1__: 55 | 56 | - delete depends on project-stub 57 | - small refactoring 58 | 59 | __0.2.0__: 60 | 61 | - remove prompts 62 | - use configs like bem-core and bem-components 63 | - use bower for install libs 64 | - use bower-npm-install for call npm install for every bower component 65 | - new app structure 66 | - set to plans distribution with Gulp 67 | - remove Grunt tasks 68 | - use bem sever for development 69 | - use autoprefixer with bem-tools make 70 | 71 | __0.1.1__: 72 | 73 | - remove examples prompt 74 | 75 | __0.1.0:__ 76 | 77 | - custom index page 78 | - bem-core 2.0.0 and new bem-components 79 | - customs levels/blocks config 80 | - bug fixing 81 | 82 | __0.0.6:__ 83 | 84 | - simply project structure 85 | - merged BEM bundle 86 | - autoprefixer 87 | - resolve paths for assets from CSS with borschik config 88 | 89 | __0.0.5:__ 90 | 91 | - prompts for include examples 92 | - project structure auto make 93 | - fixes for Windows, it work fine now 94 | - array of bundles, main trouble is fixed 95 | - faster building 96 | - delete exec methods, work with tools by API 97 | 98 | __0.0.4:__ 99 | 100 | - clone structure from project stub 101 | - all settings in project.json 102 | - auto include custom blocks levels 103 | - auto include libs blocks levels 104 | - configure libs directory 105 | 106 | __0.0.3:__ 107 | 108 | - add watcher for simple development 109 | - add csscomb tool 110 | 111 | __0.0.2:__ 112 | 113 | - merge with project-stub 114 | - custom level.js for bundles 115 | - more stable 116 | 117 | __0.0.1:__ 118 | 119 | - initial release 120 | -------------------------------------------------------------------------------- /generators/app/templates/tree/gulpfile.js: -------------------------------------------------------------------------------- 1 | var $ = require('gulp-load-plugins')(), 2 | pkg = require('./package.json'), 3 | settings = require('./settings.json'), 4 | bsync = require('browser-sync'), 5 | tsync = require('run-sequence'), 6 | bem = require('bem').api, 7 | gulp = require('gulp'), 8 | path = require('path'), 9 | join = path.join, 10 | 11 | APATH = join(settings.service.pages.dir, settings.assets.name), 12 | CSS = join(APATH, '_' + settings.assets.name + '.css'), 13 | JS = join(APATH, '_' + settings.assets.name + '.js'), 14 | PAGES = ['index'].map(function(page){ return join(settings.service.pages.dir, page, page + '.html')}), 15 | 16 | V = pkg.version, 17 | DNAME = pkg.name + '_v' + V; 18 | 19 | gulp.task('bem', function(){ 20 | return bem.make({verbosity: 'error'}); 21 | }); 22 | 23 | gulp.task('styles', function() { 24 | gulp.src(CSS) 25 | .pipe($.minifyCss()) 26 | .pipe($.rename(settings.assets.styles.name)) 27 | .pipe(gulp.dest(settings.assets.styles.dir)); 28 | }); 29 | 30 | gulp.task('bem-styles', function () { 31 | tsync('bem', 'styles'); 32 | }); 33 | 34 | gulp.task('scripts', function() { 35 | gulp.src(JS) 36 | .pipe($.rename(settings.assets.scripts.name)) 37 | .pipe(gulp.dest(settings.assets.scripts.dir)) 38 | }); 39 | 40 | gulp.task('bem-scripts', function () { 41 | tsync('bem', 'scripts'); 42 | }); 43 | 44 | gulp.task('assets', ['styles', 'scripts']); 45 | 46 | gulp.task('pages', function(){ 47 | gulp.src(PAGES) 48 | .pipe(gulp.dest(settings.public)); 49 | }); 50 | 51 | gulp.task('watch', function() { 52 | gulp.watch([ 53 | 'design/{' + settings.service.levels + '}/**/*.styl', 54 | 'design/{' + settings.service.levels + '}/**/**/*.styl' 55 | ], $.shell.task(['gulp bem-styles'])); 56 | 57 | gulp.watch([ 58 | '{' + settings.service.levels + '}/*.js', 59 | '{' + settings.service.levels + '}/**/*.js' 60 | ], $.shell.task(['gulp bem-scripts'])); 61 | 62 | gulp.watch([ 63 | settings.service.pages.dir + '/**/*.bemjson.js', 64 | '{' + settings.service.levels + '}/**/*.bemhtml', 65 | '{' + settings.service.levels + '}/**/**/*.bemhtml' 66 | ], $.shell.task(['gulp build'])); 67 | }); 68 | 69 | gulp.task('sync', function(){ 70 | var files = [ 71 | join(settings.public, '*.html'), 72 | join(settings.assets.scripts.dir, settings.assets.scripts.name), 73 | join(settings.assets.styles.dir, settings.assets.styles.name) 74 | ]; 75 | 76 | var options = { 77 | notify: false, 78 | open: false, 79 | ghostMode: false, 80 | logLevel: 'debug', 81 | minify: false, 82 | server: { 83 | baseDir: settings.public 84 | } 85 | }; 86 | 87 | bsync.init(files, options, function (err, inj) { 88 | if (err) throw Error(err); 89 | }); 90 | }); 91 | 92 | gulp.task('build', function () { 93 | tsync('bem', ['pages', 'assets']); 94 | }); 95 | 96 | gulp.task('default', function () { 97 | tsync('default', ['build', 'watch', 'sync']); 98 | }); 99 | -------------------------------------------------------------------------------- /CHANGELOG.ru.md: -------------------------------------------------------------------------------- 1 | __2.0.0-beta2__: 2 | - фиксы 3 | 4 | __2.0.0-beta1__: 5 | - новая структура генератора 6 | - новая парадигма AngularJS модулей 7 | - создание AngularJS приложение на первом шаге 8 | 9 | __1.1.6__: 10 | 11 | - обновили версию bem-protein 12 | 13 | __1.1.5__: 14 | 15 | - обновили версию bem-protein 16 | 17 | __1.1.4__: 18 | 19 | - обновили версию bem-protein 20 | - добавили новые уровни из bem-protein 21 | 22 | __1.1.3__: 23 | 24 | - добавили новые уровни из bem-protein 25 | 26 | __1.1.2__: 27 | 28 | - обновили версию bem-protein 29 | 30 | __1.1.1__: 31 | 32 | - hot fixes 33 | 34 | __1.1.0__: 35 | 36 | - удалена зависимость от bem-techs, используем технологии сборки только из Яндексовых библиотек 37 | - добавлен генератор для расширения проекта до AngularJS приложения 38 | - добавлен генератор для создания модулей AngularJS 39 | - добавлен генератор для расширения проекта до NodeJS приложения 40 | - добавлена специальная группа блоков common.blocks/libs для подключения сторонних библиотек 41 | - сборка статики (css, js, ng-templates) с помощью Gulp 42 | - обновлены версии пакетов и удалены более ненужные 43 | 44 | __1.0.0__: 45 | 46 | - совместимая структура с bem-core, bem-components и project-stub 47 | - используем директорию libs для bower-npm-install вместо bower_components 48 | - v1.0.0 главная ветка 49 | - разделение с дизайном и платформами 50 | - используем Roole для CSS по умолчанию 51 | 52 | __0.2.1__: 53 | 54 | - удалена зависимость от project-stub 55 | - улучшена скорость работы генератора 56 | 57 | __0.2.0__: 58 | 59 | - удалены все вопросы перед установкой 60 | - используем кофиги из bem-core и bem-components 61 | - используем bower для установки библиотек 62 | - используем bower-npm-install чтобы вызывать npm install для всех библиотек 63 | - новая струтура приложения 64 | - установили в планы сборку поставки через Gulp 65 | - удалили Grunt 66 | - используем bem sever для разработки 67 | - используем autoprefixer как надстройку для bem-tools 68 | 69 | __0.1.1__: 70 | 71 | - удален вопрос об установке примеров 72 | 73 | __0.1.0:__ 74 | 75 | - своя стартовая страница 76 | - bem-core 2.0.0 и новая версия bem-components 77 | - свой конфиг для levels/blocks 78 | - устранение багов 79 | 80 | __0.0.6:__ 81 | 82 | - более простая структура проекта 83 | - общий BEM bundle для css и js 84 | - добавлен autoprefixer 85 | - разрешение путей для картинок и др. в CSS используя borschik config 86 | 87 | __0.0.5:__ 88 | 89 | - вариативная установка примеров 90 | - автоматическое создание проектной директории по дефолтному файлу project.json 91 | - решены проблемы с работой на Windows 92 | - теперь можно использовать несколько уровней бандлов единовременно 93 | - более быстрая сборка 94 | - работа с инструментами через API из Grunt 95 | 96 | __0.0.4:__ 97 | 98 | - структура проекта клонируется из project stub 99 | - все настройки проекта в едином файле project.json 100 | 101 | __0.0.3:__ 102 | 103 | - добавлен вотчер для удобной разработки 104 | - добавлен csscomb для сортирвки css свойств 105 | 106 | __0.0.2:__ 107 | 108 | - стыковка с project-stub 109 | - свой level.js для уровня бандлов 110 | - более стабильная версия 111 | 112 | __0.0.1:__ 113 | 114 | - первый релиз 115 | --------------------------------------------------------------------------------