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

149 lines
2.7 KiB
Stylus

_lanes = {}
_stacks = {}
_aliases = {}
_last_name = {}
_block_type(block_type)
if block_type == null
block_type = called-from[1]
return block_type
_reset_last_name(block_type=null)
block_type = _block_type(block_type)
if block_type in _last_name
remove(_last_name, block_type)
_set_last_name(name, block_type=null)
block_type = _block_type(block_type)
_last_name[block_type] = name
_get_last_name(block_type)
block_type = _block_type(block_type)
if block_type in _last_name
return _last_name[block_type]
else
return null
_push_onto_stack(block, block_type=null)
block_type = _block_type(block_type)
if block_type in _stacks
stack = _stacks[block_type]
else
stack = ()
push(stack, block)
_stacks[block_type] = stack
_pop_from_stack(block_type=null)
block_type = _block_type(block_type)
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)
block_type = _block_type(block_type)
if block_type in _stacks
stack = _stacks[block_type]
remove(_stacks, block_type)
return stack
else
return ()
_last_element_of_stack(block_type=null)
block_type = _block_type(block_type)
if block_type in _stacks
stack = _stacks[block_type]
return stack[-1]
else
return null
_set_lane(lane_name, value, block_type=null)
block_type = _block_type(block_type)
if block_type in _lanes
lane = _lanes[block_type]
else
lane = {}
if lane_name in lane
stack = lane[lane_name]
else
stack = ()
push(stack, value)
lane[lane_name] = stack
_lanes[block_type] = lane
_get_lane(block_type)
block_type = _block_type(block_type)
if block_type in _lanes
return _lanes[block_type]
else
return {}
_put_into_lane(key, value, block_type=null)
block_type = _block_type(block_type)
if block_type in _lanes
lane = _lanes[block_type]
else
lane = {}
lane[key] = value
_lanes[block_type] = lane
_pop_lane(block_type=null)
block_type = _block_type(block_type)
if block_type in _lanes
lane = _lanes[block_type]
remove(_lanes, block_type)
return lane
else
return {}
_set_alias(name, alias, block_type=null)
block_type = _block_type(block_type)
if block_type in _aliases
alias_map = _aliases[block_type]
else
alias_map = {}
alias_map[name] = alias
_aliases[block_type] = alias_map
_get_alias(name, block_type=null)
block_type = _block_type(block_type)
if block_type in _aliases
alias_map = _aliases[block_type]
if name in alias_map
return alias_map[name]
else
return name
else
return name
_reset_aliases()
for key in keys(_aliases)
remove(_aliases, key)