scss-library/components/00_Global/_laneHandling.styl

157 lines
3.2 KiB
Stylus

_lanes = {}
_stacks = {}
_last_name = {}
_being_towed = {}
_reset_last_name(block_type=null)
if block_type == null
block_type = called-from[1]
if block_type in _last_name
remove(_last_name, block_type)
_set_last_name(name, block_type=null)
if block_type == null
block_type = called-from[1]
_last_name[block_type] = name
_get_last_name(block_type)
if block_type == null
block_type = called-from[1]
if block_type in _last_name
return _last_name[block_type]
else
return null
_current_block_type()
return called-from[1]
_call_stack_till_first(block_type)
striped = slice(called-from, 2)
block_index = (index(striped, block_type))
if block_index == null
if length(striped) <= 1
return (striped ())
return slice(striped, 1)
stack = ()
for i in (0..block_index)
push(stack, striped[i])
return stack
_push_onto_stack(block, block_type=null)
if block_type == null
block_type = called-from[1]
if block_type in _stacks
stack = _stacks[block_type]
else
stack = ()
push(stack, block)
_stacks[block_type] = stack
_pop_from_stack(block_type=null)
if block_type == null
block_type = called-from[1]
if block_type in _stacks
stack = _stacks[block_type]
b = pop(stack)
if length(stack) > 0
_stacks[block_type]
else
remove(_stacks, block_type)
return b
return null
_pop_stack(block_type=null)
if block_type == null
block_type = called-from[1]
if block_type in _stacks
stack = _stacks[block_type]
remove(_stacks, block_type)
return stack
else
return ()
_add_to_lane(key, value, block_type=null)
if block_type == null
block_type = called-from[1]
if block_type in _lanes
lane = _lanes[block_type]
else
lane = {}
if key in lane
stack = lane[key]
else
stack = ()
push(stack, value)
lane[key] = stack
_lanes[block_type] = lane
_put_into_lane(key, value, block_type=null)
if block_type == null
block_type = called-from[1]
if block_type in _lanes
lane = _lanes[block_type]
else
lane = {}
lane[key] = value
_lanes[block_type] = lane
_pop_lane(block_type=null)
if block_type == null
block_type = called-from[1]
if block_type in _lanes
lane = _lanes[block_type]
remove(_lanes, block_type)
return lane
else
return {}
attach(parent_type, suffix, block)
_being_towed[_current_block_type()] = true
call_stack = _call_stack_till_first(parent_type)
if parent_type in call_stack
// We are called inside a block
_push_onto_stack(block)
//Detect if the selector will be generated
//by an earlier call of RV-Element
if not _current_block_type() in (call_stack)
block_list = _pop_stack()
_put_into_lane(suffix, block_list, parent_type)
else
// We are not called inside a block
// Is there a block to attach to
_last_parent_name = _get_last_name(parent_type)
if _last_parent_name != null
& .{_last_parent_name} .{_last_parent_name}{suffix}
{block}
tow(name, block, block_type=null)
if block_type == null // Determining if we are inside a block or after a block
block_type = called-from[0]
.{name}
{block}
if block_type in _lanes
for suffix, block_list in _pop_lane(block_type)
p(name suffix selector())
&{name}{suffix}
for current_block in block_list
{current_block}
_set_last_name(name, block_type)