|  | @@ -4,11 +4,17 @@ import * as Models from '../ivprog_elements';
 | 
	
		
			
				|  |  |  import { LocalizedStrings } from '../../services/localizedStringsService';
 | 
	
		
			
				|  |  |  import * as GlobalsManagement from '../globals';
 | 
	
		
			
				|  |  |  import * as VariablesManagement from '../variables';
 | 
	
		
			
				|  |  | +import * as AttribuitionsManagement from './attribution';
 | 
	
		
			
				|  |  | +import WatchJS from 'melanke-watchjs';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +var watch = WatchJS.watch;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export const VAR_OR_VALUE_TYPES = Object.freeze({only_variable: 1, only_value: 2, only_function: 3, variable_and_function: 4, variable_and_value_opt: 5,
 | 
	
		
			
				|  |  |  	value_and_function: 6, all: 7});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export function renderMenu (ref_object, dom_object, function_obj) {
 | 
	
		
			
				|  |  | +export function renderMenu (command, ref_object, dom_object, function_obj, size_field = 2) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	var menu_var_or_value = '<div class="ui dropdown menu_var_or_value_dom"><div class="text"></div><i class="dropdown icon"></i><div class="menu">';
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -18,17 +24,24 @@ export function renderMenu (ref_object, dom_object, function_obj) {
 | 
	
		
			
				|  |  |  		menu_var_or_value += '<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_function+'"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('btn_function')+'</div>';
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | -	if ((ref_object.variable_and_value == VAR_OR_VALUE_TYPES.only_variable) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_function) 
 | 
	
		
			
				|  |  | -		|| (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_value_opt) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.all)) {
 | 
	
		
			
				|  |  | +	if (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.only_variable) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		menu_var_or_value = '<div class="ui dropdown menu_var_or_value_dom"><div class="text"></div><i class="dropdown icon"></i><div class="menu menu_only_vars">';
 | 
	
		
			
				|  |  | +		menu_var_or_value += '</div>';
 | 
	
		
			
				|  |  | +	} 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if ((ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_function) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_value_opt) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.all)) {
 | 
	
		
			
				|  |  |  		
 | 
	
		
			
				|  |  |  		menu_var_or_value += '<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_variable+'"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('variable');
 | 
	
		
			
				|  |  |  		menu_var_or_value += '<div class="menu menu_only_vars">';
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  		menu_var_or_value += '</div></div>';
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	if (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.only_value) {
 | 
	
		
			
				|  |  | +		menu_var_or_value = '<input type="text" class="width-dynamic" size="'+size_field+'" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />';
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if ((ref_object.variable_and_value == VAR_OR_VALUE_TYPES.only_value) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_value_opt) 
 | 
	
		
			
				|  |  | +	if ((ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_value_opt) 
 | 
	
		
			
				|  |  |  		|| (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.value_and_function) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.all)) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		menu_var_or_value += '<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_value+'">'+LocalizedStrings.getUI('text_value')+'</div>';
 | 
	
	
		
			
				|  | @@ -40,22 +53,47 @@ export function renderMenu (ref_object, dom_object, function_obj) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      $(dom_object).append(menu_var_or_value);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    addHandlers(ref_object, dom_object, menu_var_or_value, function_obj);
 | 
	
		
			
				|  |  | +    addHandlers(command, ref_object, dom_object, menu_var_or_value, function_obj);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    addVariablesToMenu(function_obj, menu_var_or_value);
 | 
	
		
			
				|  |  | +    addVariablesToMenu(function_obj, menu_var_or_value, ref_object);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function addVariablesToMenu (function_obj, menu_var_or_value) {
 | 
	
		
			
				|  |  | +function addVariablesToMenu (function_obj, menu_var_or_value, ref_object) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	watch(window.program_obj.globals, function(){
 | 
	
		
			
				|  |  | +    	addVariablesToMenu(function_obj, menu_var_or_value, ref_object);
 | 
	
		
			
				|  |  | +	}, 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	watch(function_obj.parameters_list, function(){
 | 
	
		
			
				|  |  | +    	addVariablesToMenu(function_obj, menu_var_or_value, ref_object);
 | 
	
		
			
				|  |  | +	}, 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	watch(function_obj.variables_list, function(){
 | 
	
		
			
				|  |  | +    	addVariablesToMenu(function_obj, menu_var_or_value, ref_object);
 | 
	
		
			
				|  |  | +	}, 1);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	var sub_menu = $(menu_var_or_value).find('.menu_only_vars');
 | 
	
		
			
				|  |  |  	$(sub_menu).text('');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (window.program_obj.globals) {
 | 
	
		
			
				|  |  | -		for (var i = 0; i < window.program_obj.globals.length; i++) {
 | 
	
		
			
				|  |  | -			var temp = $('<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_variable+'">' + window.program_obj.globals[i].name + ' </div>');
 | 
	
		
			
				|  |  | -			$(temp).data('variable_reference', window.program_obj.globals[i]);
 | 
	
		
			
				|  |  | -			$(sub_menu).append(temp);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (ref_object.include_constant) {
 | 
	
		
			
				|  |  | +			for (var i = 0; i < window.program_obj.globals.length; i++) {
 | 
	
		
			
				|  |  | +				var temp = $('<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_variable+'">' + window.program_obj.globals[i].name + ' </div>');
 | 
	
		
			
				|  |  | +				$(temp).data('variable_reference', window.program_obj.globals[i]);
 | 
	
		
			
				|  |  | +				$(sub_menu).append(temp);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			for (var i = 0; i < window.program_obj.globals.length; i++) {
 | 
	
		
			
				|  |  | +				if (!window.program_obj.globals[i].is_constant) {
 | 
	
		
			
				|  |  | +					var temp = $('<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_variable+'">' + window.program_obj.globals[i].name + ' </div>');
 | 
	
		
			
				|  |  | +					$(temp).data('variable_reference', window.program_obj.globals[i]);
 | 
	
		
			
				|  |  | +					$(sub_menu).append(temp);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (function_obj.parameters_list) {
 | 
	
	
		
			
				|  | @@ -76,30 +114,46 @@ function addVariablesToMenu (function_obj, menu_var_or_value) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function addHandlers (ref_object, dom_object, menu_var_or_value, function_obj) {
 | 
	
		
			
				|  |  | +function addHandlers (command, ref_object, dom_object, menu_var_or_value, function_obj) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	$(menu_var_or_value).dropdown({
 | 
	
		
			
				|  |  | -	  onChange: function(value, text, $selectedItem) {
 | 
	
		
			
				|  |  | -	  	$(dom_object).find('.var_name').remove();
 | 
	
		
			
				|  |  | +	if (ref_object.variable_and_value != VAR_OR_VALUE_TYPES.only_value) {
 | 
	
		
			
				|  |  | +		$(menu_var_or_value).dropdown({
 | 
	
		
			
				|  |  | +		  onChange: function(value, text, $selectedItem) {
 | 
	
		
			
				|  |  | +		  	$(dom_object).find('.var_name').remove();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	     switch ($($selectedItem).data('option')) {
 | 
	
		
			
				|  |  | -	     	case VAR_OR_VALUE_TYPES.only_function:
 | 
	
		
			
				|  |  | -	     		console.log("foi função");
 | 
	
		
			
				|  |  | -	     		break;
 | 
	
		
			
				|  |  | +		     switch ($($selectedItem).data('option')) {
 | 
	
		
			
				|  |  | +		     	case VAR_OR_VALUE_TYPES.only_function:
 | 
	
		
			
				|  |  | +		     		console.log("foi função");
 | 
	
		
			
				|  |  | +		     		break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	     	case VAR_OR_VALUE_TYPES.only_value:
 | 
	
		
			
				|  |  | -	     		openInputToValue(ref_object, dom_object, menu_var_or_value, function_obj);
 | 
	
		
			
				|  |  | -	     		break;
 | 
	
		
			
				|  |  | +		     	case VAR_OR_VALUE_TYPES.only_value:
 | 
	
		
			
				|  |  | +		     		openInputToValue(command, ref_object, dom_object, menu_var_or_value, function_obj);
 | 
	
		
			
				|  |  | +		     		break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	     	case VAR_OR_VALUE_TYPES.only_variable:
 | 
	
		
			
				|  |  | -	     		openInputToVariable(ref_object, dom_object, menu_var_or_value, function_obj, $($selectedItem).data('variable_reference'));
 | 
	
		
			
				|  |  | -	     		break;
 | 
	
		
			
				|  |  | -	     }
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | +		     	case VAR_OR_VALUE_TYPES.only_variable:
 | 
	
		
			
				|  |  | +		     		openInputToVariable(command, ref_object, dom_object, menu_var_or_value, function_obj, $($selectedItem).data('variable_reference'));
 | 
	
		
			
				|  |  | +		     		break;
 | 
	
		
			
				|  |  | +		     }
 | 
	
		
			
				|  |  | +	      }
 | 
	
		
			
				|  |  | +	    });
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	$(dom_object).find('.width-dynamic').on('input', function() {
 | 
	
		
			
				|  |  | +	    var inputWidth = $(this).textWidth()+10;
 | 
	
		
			
				|  |  | +	    $(this).focus();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	    var tmpStr = $(this).val();
 | 
	
		
			
				|  |  | +		$(this).val('');
 | 
	
		
			
				|  |  | +		$(this).val(tmpStr);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	    $(this).css({
 | 
	
		
			
				|  |  | +	        width: inputWidth
 | 
	
		
			
				|  |  | +	    })
 | 
	
		
			
				|  |  | +	}).trigger('input');
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function openInputToVariable(ref_object, dom_object, menu_var_or_value, function_obj, variable_selected) {
 | 
	
		
			
				|  |  | +function openInputToVariable (command, ref_object, dom_object, menu_var_or_value, function_obj, variable_selected) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	$(menu_var_or_value).find('.text').text(' ');
 | 
	
		
			
				|  |  |  	$(dom_object).find('.menu_var_or_value_dom').remove();
 | 
	
	
		
			
				|  | @@ -123,18 +177,17 @@ function openInputToVariable(ref_object, dom_object, menu_var_or_value, function
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (variable_selected.dimensions == 1) {
 | 
	
		
			
				|  |  | -		var nova_var_menu = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all);
 | 
	
		
			
				|  |  | -		renderMenu(nova_var_menu, $(variable_render).find('.column_container'), function_obj);
 | 
	
		
			
				|  |  | +		var nova_var_menu = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all, null, null, null, true);
 | 
	
		
			
				|  |  | +		renderMenu(command, nova_var_menu, $(variable_render).find('.column_container'), function_obj);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	if (variable_selected.dimensions == 2) {
 | 
	
		
			
				|  |  | -		var nova_var_menu_row = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all);
 | 
	
		
			
				|  |  | -		renderMenu(nova_var_menu_row, $(variable_render).find('.row_container'), function_obj);
 | 
	
		
			
				|  |  | +		var nova_var_menu_row = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all, null, null, null, true);
 | 
	
		
			
				|  |  | +		renderMenu(command, nova_var_menu_row, $(variable_render).find('.row_container'), function_obj);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		var nova_var_menu_column = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all);
 | 
	
		
			
				|  |  | -		renderMenu(nova_var_menu_column, $(variable_render).find('.column_container'), function_obj);
 | 
	
		
			
				|  |  | +		var nova_var_menu_column = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all, null, null, null, true);
 | 
	
		
			
				|  |  | +		renderMenu(command, nova_var_menu_column, $(variable_render).find('.column_container'), function_obj);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	var context_menu = '<div class="ui dropdown context_menu_clear"><div class="text"></div><i class="dropdown icon"></i><div class="menu">';
 | 
	
		
			
				|  |  |  	context_menu += '<div class="item" data-clear="true">'+LocalizedStrings.getUI('btn_clear')+'</div>';
 | 
	
		
			
				|  |  |  	context_menu += '</div></div>';
 | 
	
	
		
			
				|  | @@ -147,16 +200,20 @@ function openInputToVariable(ref_object, dom_object, menu_var_or_value, function
 | 
	
		
			
				|  |  |  		onChange: function(value, text, $selectedItem) {
 | 
	
		
			
				|  |  |  	     if ($($selectedItem).data('clear')) {
 | 
	
		
			
				|  |  |  	     	$(dom_object).text('');
 | 
	
		
			
				|  |  | -	     	renderMenu(ref_object, dom_object, function_obj);
 | 
	
		
			
				|  |  | +	     	renderMenu(command, ref_object, dom_object, function_obj);
 | 
	
		
			
				|  |  |  	     }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  	});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (command.type == Models.COMMAND_TYPES.attribution) {
 | 
	
		
			
				|  |  | +		AttribuitionsManagement.renderMenuOperations(command, ref_object, dom_object, menu_var_or_value, function_obj, variable_selected);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function openInputToValue (ref_object, dom_object, menu_var_or_value, function_obj) {
 | 
	
		
			
				|  |  | +function openInputToValue (command, ref_object, dom_object, menu_var_or_value, function_obj) {
 | 
	
		
			
				|  |  |  	$(menu_var_or_value).find('.text').text(' ');
 | 
	
		
			
				|  |  | -	var field = $('<input type="text"/>');
 | 
	
		
			
				|  |  | +	var field = $('<input type="text" size="2" />');
 | 
	
		
			
				|  |  |  	$( field ).insertBefore($(dom_object).find('.menu_var_or_value_dom'));
 | 
	
		
			
				|  |  |  	field.focus();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -174,8 +231,23 @@ function openInputToValue (ref_object, dom_object, menu_var_or_value, function_o
 | 
	
		
			
				|  |  |  		onChange: function(value, text, $selectedItem) {
 | 
	
		
			
				|  |  |  	     if ($($selectedItem).data('clear')) {
 | 
	
		
			
				|  |  |  	     	$(dom_object).text('');
 | 
	
		
			
				|  |  | -	     	renderMenu(ref_object, dom_object, function_obj);
 | 
	
		
			
				|  |  | +	     	renderMenu(command, ref_object, dom_object, function_obj);
 | 
	
		
			
				|  |  |  	     }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  	});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (command.type == Models.COMMAND_TYPES.attribution) {
 | 
	
		
			
				|  |  | +		AttribuitionsManagement.renderMenuOperations(command, ref_object, dom_object, menu_var_or_value, function_obj);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +$.fn.textWidth = function(text, font) {
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    $.fn.textWidth.fakeEl.text(text || this.val() || this.text() || this.attr('placeholder')).css('font', font || this.css('font'));
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    return $.fn.textWidth.fakeEl.width();
 | 
	
		
			
				|  |  | +};
 |