67 lines
1.5 KiB
Stylus
67 lines
1.5 KiB
Stylus
// -----------------------------------------------------------------------------
|
|
// bem-sugar.styl --- Bem mixins for stylus language
|
|
//
|
|
// Copyright (c) 2017 Ilya Obuhov
|
|
//
|
|
// Author: Ilya Obuhov <iobuhov.mail@gmail.com>
|
|
// URL: https://github.com/iobuhov/stylus-bem-sugar
|
|
|
|
|
|
e-prefix ?= '__'
|
|
m-prefix ?= '--'
|
|
m-delimiter ?= '_'
|
|
group-store = ()
|
|
|
|
str()
|
|
join('', arguments)
|
|
|
|
b(name)
|
|
.{name}
|
|
{block}
|
|
|
|
group()
|
|
caller = called-from[0]
|
|
level = length(called-from) + 1
|
|
elements = group-store[level]
|
|
selector = ()
|
|
parent = null
|
|
{join(',', elements)}
|
|
{block}
|
|
group-store[level] = null
|
|
|
|
m(mod, val=null)
|
|
val = val && m-delimiter + val
|
|
mod = m-prefix + mod
|
|
mod = val ? mod + val : mod
|
|
caller = called-from[0]
|
|
if caller in ('group')
|
|
level = length(called-from)
|
|
mod = str('&', mod)
|
|
if group-store[level] == null
|
|
group-store[level] = mod
|
|
else
|
|
push(group-store[level], mod)
|
|
&{mod}
|
|
{block}
|
|
|
|
e(element)
|
|
element = e-prefix + element
|
|
caller = called-from[0]
|
|
gcaller = called-from[1]
|
|
if caller in ('group')
|
|
level = length(called-from)
|
|
if gcaller in ('e' 'm')
|
|
element = str('& ^[0]', element)
|
|
else
|
|
element = str('^[0]', element)
|
|
if group-store[level] == null
|
|
group-store[level] = element
|
|
else
|
|
push(group-store[level], element)
|
|
else
|
|
if caller in ('e' 'm')
|
|
& ^[0]{element}
|
|
{block}
|
|
else
|
|
&{element}
|
|
{block} |