Skip to content

Instantly share code, notes, and snippets.

@tomchentw
Last active August 29, 2015 14:02
Show Gist options
  • Save tomchentw/64ef50041a8a7b447bca to your computer and use it in GitHub Desktop.
Save tomchentw/64ef50041a8a7b447bca to your computer and use it in GitHub Desktop.
ng-bem proposal
# http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/
#
# .site-search {} /* Block */
# .site-search__field {} /* Element */
# .site-search--full {} /* Modifier */
#
#
angular.module 'ng-bem' []
.directive 'bem-block' ->
BemBlockCtrl.$inject = [
'$attrs' ]
!function BemBlockCtrl ($attrs)
@blockName = $attr.bemBlock
BemBlockCtrl::getClassName = ->
@blockName
controller: BemBlockCtrl
require: ['bem-block']
link: !($scope, $element, $attrs, $ctrls) ->
$element.addClass $ctrls.0.getClassName!
.directive 'bem-element' ->
BemElementCtrl.$inject = [
'$attrs' ]
!function BemElementCtrl ($attrs)
@elementName = $attrs.bemElement
BemElementCtrl::getClassName = (bemBlockCtrl)->
"#{ bemBlockCtrl.getClassName! }__#{ @elementName }"
controller: BemElementCtrl
require: ['^bem-block' 'bem-element']
link: !($scope, $element, $attrs, $ctrls) ->
$element.addClass $ctrls.1.getClassName $ctrls.0
.directive 'bem-modifier' ->
const noopBemElementCtrl = do
getClassName: (bemBlockCtrl) ->
bemBlockCtrl.getClassName!
BemModifierCtrl.$inject = [
'$attrs' ]
!function BemModifierCtrl ($attrs)
@modifierName = $attrs.bemModifier
BemModifierCtrl::getClassName = (bemBlockCtrl, bemElementCtrl)->
"#{ bemElementCtrl.getClassName! }--#{ @modifierName }"
controller: BemModifierCtrl
require: ['bem-block' 'bem-modifier' '?bem-element' ]
link: !($scope, $element, $attrs, $ctrls) ->
$element.addClass $ctrls.1.getClassName $ctrls.0, $ctrls.2 || noopBemElementCtrl
<form class="site-search site-search--full">
<input type="text" class="site-search__field">
<input type="Submit" value ="Search" class="site-search__button">
</form>
form(bem-block="site-search" bem-modifier="full")
input(type="text" bem-element="field")
input(type="submit" value="Search" bem-element="button")
@tomchentw
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment