فهرست منبع

Balões de erro adicionados

Douglas Lima 5 سال پیش
والد
کامیت
54a5fed9ba
5فایلهای تغییر یافته به همراه328 افزوده شده و 118 حذف شده
  1. 53 35
      js/visualUI/code_generator.js
  2. 73 12
      js/visualUI/commands.js
  3. 74 9
      js/visualUI/commands_sidebar.js
  4. 119 58
      js/visualUI/functions_sidebar.js
  5. 9 4
      package-lock.json

+ 53 - 35
js/visualUI/code_generator.js

@@ -5,6 +5,7 @@ import { LocalizedStrings } from './../services/localizedStringsService';
 import * as GlobalsManagement from './globals';
 import * as VariablesManagement from './variables';
 import * as CommandsManagement from './commands';
+import * as Utils from './utils';
 
 export function generate () {
 
@@ -35,10 +36,8 @@ export function generate () {
 	} else {
 		return code;
 	}
-
 }
 
-
 function functionsCode (function_obj) {
 	var ret = '\n\t' + LocalizedStrings.getUI('function') + ' ';
 
@@ -85,24 +84,24 @@ function functionsCode (function_obj) {
 	}
 
 	for (var j = 0; j < function_obj.commands.length; j++) {
-		//try {
+		try {
 			ret += commandsCode(function_obj.commands[j]);
-		/*} catch (err) {
+		} catch (err) {
 
 			has_error = true;
 
 			console.error(err.message);
 
 			var todos = $('body').find('.command_container');
-			for (var i = 0; i < todos.length; i++) {
 
+			for (var i = 0; i < todos.length; i++) {
 				if ($(todos[i]).data('command') == function_obj.commands[j]) {
 					$( todos[i] ).prepend( ' <i class="ui icon red exclamation triangle error_icon"></i> ' );
 					break;
 				}
 			}
 			
-		}*/
+		}
 		
 	}
 
@@ -166,7 +165,7 @@ function returnsCode (command_obj, indentation) {
 
 	if (command_obj.variable_value_menu) {
 		try {
-			ret += ' ' + variableValueMenuCode(command_obj.variable_value_menu);
+			ret += ' ' + variableValueMenuCode(command_obj.variable_value_menu, true);
 		} catch(err) {}
 	}
 
@@ -316,6 +315,10 @@ function iftruesCode (command_obj, indentation) {
 
 	ret += LocalizedStrings.getUI('text_if');
 
+	if (!command_obj.expression.expression) {
+		Utils.renderErrorMessage(command_obj.expression.dom_object, LocalizedStrings.getUI('inform_valid_expression'));
+	}
+
 	switch (command_obj.expression.expression.type) {
 		case Models.EXPRESSION_TYPES.exp_logic:
 			ret += logicExpressionCode(command_obj.expression.expression);
@@ -379,6 +382,10 @@ function doWhilesCode (command_obj, indentation) {
 
 	ret += '} ' + LocalizedStrings.getUI('text_code_while');
 
+	if (!command_obj.expression.expression) {
+		Utils.renderErrorMessage(command_obj.expression.dom_object, LocalizedStrings.getUI('inform_valid_expression'));
+	}
+
 	switch (command_obj.expression.expression.type) {
 		case Models.EXPRESSION_TYPES.exp_logic:
 			ret += logicExpressionCode(command_obj.expression.expression);
@@ -401,6 +408,10 @@ function whiletruesCode (command_obj, indentation) {
 
 	ret += LocalizedStrings.getUI('text_code_while');
 
+	if (!command_obj.expression.expression) {
+		Utils.renderErrorMessage(command_obj.expression.dom_object, LocalizedStrings.getUI('inform_valid_expression'));
+	}
+
 	switch (command_obj.expression.expression.type) {
 		case Models.EXPRESSION_TYPES.exp_logic:
 			ret += logicExpressionCode(command_obj.expression.expression);
@@ -610,46 +621,53 @@ function readersCode (command_obj, indentation) {
 	return ret;
 }
 
-function variableValueMenuCode (variable_obj) {
-
+function variableValueMenuCode (variable_obj, is_return = false) {
 	var ret = '';
-	if (variable_obj.function_called) {
+	try {
+		if (variable_obj.function_called) {
 
-		if (variable_obj.function_called.name) {
-			ret += variable_obj.function_called.name + ' ( ';
-		} else {
-			ret += LocalizedStrings.getUI(variable_obj.function_called.category)+'.'+LocalizedStrings.getUI(variable_obj.function_called.identifier) + ' ( ';
-		}
+			if (variable_obj.function_called.name) {
+				ret += variable_obj.function_called.name + ' ( ';
+			} else {
+				ret += LocalizedStrings.getUI(variable_obj.function_called.category)+'.'+LocalizedStrings.getUI(variable_obj.function_called.identifier) + ' ( ';
+			}
 
-		if (variable_obj.parameters_list) {
-			for (var i = 0; i < variable_obj.parameters_list.length; i++) {
-				ret += variableValueMenuCode(variable_obj.parameters_list[i]);
-				if ((i + 1) < variable_obj.parameters_list.length) {
-					ret += ', ';
+			if (variable_obj.parameters_list) {
+				for (var i = 0; i < variable_obj.parameters_list.length; i++) {
+					ret += variableValueMenuCode(variable_obj.parameters_list[i]);
+					if ((i + 1) < variable_obj.parameters_list.length) {
+						ret += ', ';
+					}
 				}
 			}
-		}
 
-		ret += ' )';
-	} else if (variable_obj.content.type) {
+			ret += ' )';
+		} else if (variable_obj.content.type) {
 
-		ret += variable_obj.content.name;
+			ret += variable_obj.content.name;
 
-		if (variable_obj.content.dimensions == 1) {
-			ret += ' [ ' + variableValueMenuCode(variable_obj.column) + ' ] ';
-		}
+			if (variable_obj.content.dimensions == 1 && variable_obj.dimensions != 1) {
+				ret += ' [ ' + variableValueMenuCode(variable_obj.column) + ' ] ';
+			}
 
-		if (variable_obj.content.dimensions == 2) {
-			ret += ' [ ' + variableValueMenuCode(variable_obj.row) + ' ] ';
-			ret += ' [ ' + variableValueMenuCode(variable_obj.column) + ' ] ';
-		}
+			if (variable_obj.content.dimensions == 2 && variable_obj.dimensions != 2) {
+				ret += ' [ ' + variableValueMenuCode(variable_obj.row) + ' ] ';
+				ret += ' [ ' + variableValueMenuCode(variable_obj.column) + ' ] ';
+			}
 
 
-	} else {
-		if (isNaN(variable_obj.content)) {
-			ret += '"' + variable_obj.content + '"';
 		} else {
-			ret += variable_obj.content;
+			if (isNaN(variable_obj.content)) {
+				ret += '"' + variable_obj.content + '"';
+			} else {
+				ret += variable_obj.content;
+			}
+		}
+	} catch (err) {
+
+		if (!is_return) {
+			Utils.renderErrorMessage(variable_obj.dom_object, LocalizedStrings.getUI('inform_valid_content'));
+			throw err;
 		}
 	}
 

+ 73 - 12
js/visualUI/commands.js

@@ -22,14 +22,6 @@ var has_element_created_draged = false;
 var which_element_is_draged = null;
 
 export function removeCommand (command, function_obj, dom_obj) {
-	console.log('debugging removeCommand');
-	console.log('command');
-	console.log(command);
-	console.log('function_obj');
-	console.log(function_obj);
-	console.log('dom_obj');
-	console.log(dom_obj);
-
 	if (function_obj.commands.indexOf(command) > -1) {
 		function_obj.commands.splice(function_obj.commands.indexOf(command), 1);
 		return true;
@@ -54,9 +46,6 @@ export function removeCommand (command, function_obj, dom_obj) {
 		}
 	} catch (err) {}
 
-	console.log('veja: ');
-	console.log(dom_obj.parent());
-
 	if (dom_obj.parent().data('switchcase')) {
 		console.log("o que encontrei: ");
 		console.log(dom_obj.parent().data('switchcase'));
@@ -120,7 +109,16 @@ export function createFloatingCommand (function_obj, function_container, command
 			break;
 	}
 
-	floatingObject.draggable().appendTo("body");
+	floatingObject.draggable({
+		drag: function(evt) {
+	        borderMouseDragCommand(function_obj, function_container, evt);
+	    },
+	    stop: function(evt) {
+	    	function_container.find('.over_command_drag').each(function( index ) {
+				$(this).removeClass('over_command_drag');
+			});
+	    }
+	}).appendTo("body");
 
 	floatingObject.mouseup(function(evt) {
 	  manageCommand(function_obj, function_container, evt, command_type);
@@ -134,6 +132,43 @@ export function createFloatingCommand (function_obj, function_container, command
 	floatingObject.trigger(mouse_event);
 }
 
+function borderMouseDragCommand (function_obj, function_container, evt) {
+
+	function_container.find('.over_command_drag').each(function( index ) {
+		$(this).removeClass('over_command_drag');
+	});
+
+	var prev = null;
+
+	function_container.find('.commands_list_div').each(function( index ) { 
+		prev = $(this);
+		if (prev) {
+			var objLeft = prev.offset().left;
+	        var objTop = prev.offset().top;
+	        var objRight = objLeft + prev.width();
+	        var objBottom = objTop + prev.height();
+	        if (evt.pageX > objLeft && evt.pageX < objRight && evt.pageY > objTop && evt.pageY < objBottom) {
+	        	prev.addClass("over_command_drag"); 
+	        }
+	    }
+	});
+
+	function_container.find('.command_container').each(function( index ) { 
+		var obj = $(this);
+		var objLeft = obj.offset().left;
+        var objTop = obj.offset().top;
+        var objRight = objLeft + obj.width();
+        var objBottom = objTop + obj.height();
+        if (evt.pageX > objLeft && evt.pageX < objRight && evt.pageY > objTop && evt.pageY < objBottom) {
+        	if (prev) {
+        		prev.removeClass('over_command_drag');
+        	}
+        	obj.addClass("over_command_drag"); 
+        	return;
+        }
+	});
+}
+
 // before_after_inside: 1 -> before, 2 -> after, 3 -> inside
 export function renderCommand (command, element_reference, before_after_inside, function_obj) {
 	var createdElement;
@@ -202,6 +237,13 @@ export function renderCommand (command, element_reference, before_after_inside,
 			break;
 	}
 
+	createdElement.find('.button_remove_command').mouseover(function() {
+    	createdElement.css({'opacity':'.8'});
+	});
+	createdElement.find('.button_remove_command').mouseout(function() { 
+    	createdElement.css({'opacity':'1'});
+	});
+
 }
 
 export function genericCreateCommand (command_type) {
@@ -252,6 +294,23 @@ export function genericCreateCommand (command_type) {
 	}
 }
 
+function dragTrash (event) {
+
+	var trash = $('<i class="ui icon trash alternate outline"></i>');
+	$('body').append(trash);
+	trash.css('position', 'absolute');
+	trash.css('top', event.clientY);
+	trash.css('left', event.clientX - 20);
+	trash.css('font-size', '3em');
+	trash.css('display', 'none');
+
+	trash.fadeIn( 200, function() {
+		trash.fadeOut( 200, function() {
+			trash.remove();
+		} );
+    });
+}
+
 function manageCommand (function_obj, function_container, event, command_type) {
 
 	$( ".created_element" ).each(function( index ) { 
@@ -284,11 +343,13 @@ function manageCommand (function_obj, function_container, event, command_type) {
 	if (!esta_correto) {
 		has_element_created_draged = false;
 		which_element_is_draged = null;
+		dragTrash(event);
 		return;
 	} else {
 		if (!esta_na_div_correta) {
 			has_element_created_draged = false;
 			which_element_is_draged = null;
+			dragTrash(event);
 			return;
 		}
 	}

+ 74 - 9
js/visualUI/commands_sidebar.js

@@ -23,14 +23,6 @@ var has_element_created_draged = false;
 var which_element_is_draged = null;
 
 export function removeCommand (command, function_obj, dom_obj) {
-	console.log('debugging removeCommand');
-	console.log('command');
-	console.log(command);
-	console.log('function_obj');
-	console.log(function_obj);
-	console.log('dom_obj');
-	console.log(dom_obj);
-
 	if (function_obj.commands.indexOf(command) > -1) {
 		function_obj.commands.splice(function_obj.commands.indexOf(command), 1);
 		return true;
@@ -121,7 +113,16 @@ export function createFloatingCommand (function_obj, function_container, command
 				break;
 	}
 
-	floatingObject.draggable().appendTo("body");
+	floatingObject.draggable({
+		drag: function(evt) {
+	        borderMouseDragCommand(function_obj, function_container, evt);
+	    },
+	    stop: function(evt) {
+	    	function_container.find('.over_command_drag').each(function( index ) {
+				$(this).removeClass('over_command_drag');
+			});
+	    }
+	}).appendTo("body");
 
 	floatingObject.mouseup(function(evt) {
 		manageCommand(function_obj, function_container, evt, command_type);
@@ -135,6 +136,43 @@ export function createFloatingCommand (function_obj, function_container, command
 	floatingObject.trigger(mouse_event);
 }
 
+function borderMouseDragCommand (function_obj, function_container, evt) {
+
+	function_container.find('.over_command_drag').each(function( index ) {
+		$(this).removeClass('over_command_drag');
+	});
+
+	var prev = null;
+
+	function_container.find('.commands_list_div').each(function( index ) { 
+		prev = $(this);
+		if (prev) {
+			var objLeft = prev.offset().left;
+	        var objTop = prev.offset().top;
+	        var objRight = objLeft + prev.width();
+	        var objBottom = objTop + prev.height();
+	        if (evt.pageX > objLeft && evt.pageX < objRight && evt.pageY > objTop && evt.pageY < objBottom) {
+	        	prev.addClass("over_command_drag"); 
+	        }
+	    }
+	});
+
+	function_container.find('.command_container').each(function( index ) { 
+		var obj = $(this);
+		var objLeft = obj.offset().left;
+        var objTop = obj.offset().top;
+        var objRight = objLeft + obj.width();
+        var objBottom = objTop + obj.height();
+        if (evt.pageX > objLeft && evt.pageX < objRight && evt.pageY > objTop && evt.pageY < objBottom) {
+        	if (prev) {
+        		prev.removeClass('over_command_drag');
+        	}
+        	obj.addClass("over_command_drag"); 
+        	return;
+        }
+	});
+}
+
 // before_after_inside: 1 -> before, 2 -> after, 3 -> inside
 export function renderCommand (command, element_reference, before_after_inside, function_obj, function_called = null) {
 	var createdElement;
@@ -215,6 +253,14 @@ export function renderCommand (command, element_reference, before_after_inside,
 		}
 	}
 
+	createdElement.find('.button_remove_command').mouseover(function() {
+    	createdElement.css({'opacity':'.8'});
+	});
+	createdElement.find('.button_remove_command').mouseout(function() { 
+    	createdElement.css({'opacity':'1'});
+	});
+
+
 }
 
 export function genericCreateCommand (command_type) {
@@ -265,6 +311,23 @@ export function genericCreateCommand (command_type) {
 		}
 }
 
+function dragTrash (event) {
+
+	var trash = $('<i class="ui icon trash alternate outline"></i>');
+	$('body').append(trash);
+	trash.css('position', 'absolute');
+	trash.css('top', event.clientY);
+	trash.css('left', event.clientX - 20);
+	trash.css('font-size', '3em');
+	trash.css('display', 'none');
+
+	trash.fadeIn( 200, function() {
+		trash.fadeOut( 200, function() {
+			trash.remove();
+		} );
+    });
+}
+
 function preCreateCommand(command_type, function_called) {
 	if (function_called == null)
 		return genericCreateCommand(command_type);
@@ -331,11 +394,13 @@ function manageCommand(function_obj, function_container, event, command_type, fu
 	if (!esta_correto) {
 		has_element_created_draged = false;
 		which_element_is_draged = null;
+		dragTrash(event);
 		return;
 	} else {
 		if (!esta_na_div_correta) {
 			has_element_created_draged = false;
 			which_element_is_draged = null;
+			dragTrash(event);
 			return;
 		}
 	}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 119 - 58
js/visualUI/functions_sidebar.js


+ 9 - 4
package-lock.json

@@ -3358,7 +3358,8 @@
         "ansi-regex": {
           "version": "2.1.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "aproba": {
           "version": "1.2.0",
@@ -3773,7 +3774,8 @@
         "safe-buffer": {
           "version": "5.1.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "safer-buffer": {
           "version": "2.1.2",
@@ -3829,6 +3831,7 @@
           "version": "3.0.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "ansi-regex": "^2.0.0"
           }
@@ -3872,12 +3875,14 @@
         "wrappy": {
           "version": "1.0.2",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "yallist": {
           "version": "3.0.2",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         }
       }
     },