astracting appending elemnts to each other
This commit is contained in:
		
							
								
								
									
										138
									
								
								components/00_Global/_blockAppendix.styl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								components/00_Global/_blockAppendix.styl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | ||||
| _lanes = {} | ||||
| _stacks = {} | ||||
| _last_name = {} | ||||
|  | ||||
| _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 () | ||||
|  | ||||
|  | ||||
| _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) | ||||
| 	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 | ||||
| 		_current_block = _current_block_type() | ||||
| 		if not _curent_block 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}{suffix} | ||||
| 				{block} | ||||
|  | ||||
| tow(name, block, block_type=null) | ||||
| 	if block_type == null | ||||
| 		block_type = called-from[0] | ||||
|  | ||||
| 	.{name} | ||||
| 		{block} | ||||
|  | ||||
| 	if block_type in _lanes | ||||
| 		for suffix, block_list in _pop_lane(block_type) | ||||
| 			& .{name}{suffix} | ||||
| 				for b in block_list | ||||
| 					{b} | ||||
|  | ||||
| 	_set_last_name(name, block_type) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user