Browse Source

Initial Vuejs setup

Lucas de Souza 6 years ago
parent
commit
9f410d2b8c
100 changed files with 113541 additions and 0 deletions
  1. 21 0
      .gitignore
  2. 29 0
      README.md
  3. 5 0
      babel.config.js
  4. BIN
      img_aux/marca_circ_verde.xcf
  5. 10956 0
      package-lock.json
  6. 47 0
      package.json
  7. 0 0
      public/css/bootstrap.min.css
  8. 21 0
      public/css/style.css
  9. BIN
      public/favicon.ico
  10. 0 0
      public/img/global.fw.png
  11. 0 0
      public/img/img_comandos.png
  12. 0 0
      public/img/img_completo_comandos.png
  13. 0 0
      public/img/img_flag_brazil.png
  14. 0 0
      public/img/img_flag_usa.png
  15. 0 0
      public/img/img_icones.png
  16. 0 0
      public/img/img_interface.png
  17. 0 0
      public/img/img_main_1.png
  18. 0 0
      public/img/img_setas_verdes.png
  19. 0 0
      public/img/marca_circ_verde.png
  20. 0 0
      public/img/marca_circ_verde_menor.png
  21. 0 0
      public/img/pf_visual_1.png
  22. 21 0
      public/index.html
  23. 50763 0
      public/ivprogh/build/ivprog.bundle.js
  24. 1 0
      public/ivprogh/build/ivprog.bundle.js.map
  25. 50233 0
      public/ivprogh/build/ivprog.bundle.js~
  26. 0 0
      public/ivprogh/css/ivprog-term.css
  27. 618 0
      public/ivprogh/css/ivprog-visual-1.0.css
  28. BIN
      public/ivprogh/img/background-panel.png
  29. 136 0
      public/ivprogh/index.html
  30. 0 0
      public/ivprogh/js/Sortable.js
  31. 347 0
      public/ivprogh/js/iassign-integration-functions.js
  32. 343 0
      public/ivprogh/js/iassign-integration-functions.js~
  33. 0 0
      public/ivprogh/js/jquery-3.3.1.min.js
  34. 0 0
      public/ivprogh/js/jquery-ui.js
  35. 0 0
      public/ivprogh/js/jquery.json-editor.min.js
  36. 0 0
      public/ivprogh/js/semantic/.versions
  37. 0 0
      public/ivprogh/js/semantic/LICENSE
  38. 0 0
      public/ivprogh/js/semantic/README.md
  39. 0 0
      public/ivprogh/js/semantic/components/accordion.css
  40. 0 0
      public/ivprogh/js/semantic/components/accordion.js
  41. 0 0
      public/ivprogh/js/semantic/components/accordion.min.css
  42. 0 0
      public/ivprogh/js/semantic/components/accordion.min.js
  43. 0 0
      public/ivprogh/js/semantic/components/ad.css
  44. 0 0
      public/ivprogh/js/semantic/components/ad.min.css
  45. 0 0
      public/ivprogh/js/semantic/components/api.js
  46. 0 0
      public/ivprogh/js/semantic/components/api.min.js
  47. 0 0
      public/ivprogh/js/semantic/components/breadcrumb.css
  48. 0 0
      public/ivprogh/js/semantic/components/breadcrumb.min.css
  49. 0 0
      public/ivprogh/js/semantic/components/button.css
  50. 0 0
      public/ivprogh/js/semantic/components/button.min.css
  51. 0 0
      public/ivprogh/js/semantic/components/card.css
  52. 0 0
      public/ivprogh/js/semantic/components/card.min.css
  53. 0 0
      public/ivprogh/js/semantic/components/checkbox.css
  54. 0 0
      public/ivprogh/js/semantic/components/checkbox.js
  55. 0 0
      public/ivprogh/js/semantic/components/checkbox.min.css
  56. 0 0
      public/ivprogh/js/semantic/components/checkbox.min.js
  57. 0 0
      public/ivprogh/js/semantic/components/colorize.js
  58. 0 0
      public/ivprogh/js/semantic/components/colorize.min.js
  59. 0 0
      public/ivprogh/js/semantic/components/comment.css
  60. 0 0
      public/ivprogh/js/semantic/components/comment.min.css
  61. 0 0
      public/ivprogh/js/semantic/components/container.css
  62. 0 0
      public/ivprogh/js/semantic/components/container.min.css
  63. 0 0
      public/ivprogh/js/semantic/components/dimmer.css
  64. 0 0
      public/ivprogh/js/semantic/components/dimmer.js
  65. 0 0
      public/ivprogh/js/semantic/components/dimmer.min.css
  66. 0 0
      public/ivprogh/js/semantic/components/dimmer.min.js
  67. 0 0
      public/ivprogh/js/semantic/components/divider.css
  68. 0 0
      public/ivprogh/js/semantic/components/divider.min.css
  69. 0 0
      public/ivprogh/js/semantic/components/dropdown.css
  70. 0 0
      public/ivprogh/js/semantic/components/dropdown.js
  71. 0 0
      public/ivprogh/js/semantic/components/dropdown.min.css
  72. 0 0
      public/ivprogh/js/semantic/components/dropdown.min.js
  73. 0 0
      public/ivprogh/js/semantic/components/embed.css
  74. 0 0
      public/ivprogh/js/semantic/components/embed.js
  75. 0 0
      public/ivprogh/js/semantic/components/embed.min.css
  76. 0 0
      public/ivprogh/js/semantic/components/embed.min.js
  77. 0 0
      public/ivprogh/js/semantic/components/feed.css
  78. 0 0
      public/ivprogh/js/semantic/components/feed.min.css
  79. 0 0
      public/ivprogh/js/semantic/components/flag.css
  80. 0 0
      public/ivprogh/js/semantic/components/flag.min.css
  81. 0 0
      public/ivprogh/js/semantic/components/form.css
  82. 0 0
      public/ivprogh/js/semantic/components/form.js
  83. 0 0
      public/ivprogh/js/semantic/components/form.min.css
  84. 0 0
      public/ivprogh/js/semantic/components/form.min.js
  85. 0 0
      public/ivprogh/js/semantic/components/grid.css
  86. 0 0
      public/ivprogh/js/semantic/components/grid.min.css
  87. 0 0
      public/ivprogh/js/semantic/components/header.css
  88. 0 0
      public/ivprogh/js/semantic/components/header.min.css
  89. 0 0
      public/ivprogh/js/semantic/components/icon.css
  90. 0 0
      public/ivprogh/js/semantic/components/icon.min.css
  91. 0 0
      public/ivprogh/js/semantic/components/image.css
  92. 0 0
      public/ivprogh/js/semantic/components/image.min.css
  93. 0 0
      public/ivprogh/js/semantic/components/input.css
  94. 0 0
      public/ivprogh/js/semantic/components/input.min.css
  95. 0 0
      public/ivprogh/js/semantic/components/item.css
  96. 0 0
      public/ivprogh/js/semantic/components/item.min.css
  97. 0 0
      public/ivprogh/js/semantic/components/label.css
  98. 0 0
      public/ivprogh/js/semantic/components/label.min.css
  99. 0 0
      public/ivprogh/js/semantic/components/list.css
  100. 0 0
      ivprogh/js/semantic/components/list.min.css

+ 21 - 0
.gitignore

@@ -0,0 +1,21 @@
+.DS_Store
+node_modules
+/dist
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*

+ 29 - 0
README.md

@@ -0,0 +1,29 @@
+# www-ivprog
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Run your tests
+```
+npm run test
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).

+ 5 - 0
babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/app'
+  ]
+}

BIN
img_aux/marca_circ_verde.xcf


File diff suppressed because it is too large
+ 10956 - 0
package-lock.json


+ 47 - 0
package.json

@@ -0,0 +1,47 @@
+{
+  "name": "www-ivprog",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "vue": "^2.5.17",
+    "vue-router": "^3.0.1"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "^3.2.0",
+    "@vue/cli-plugin-eslint": "^3.2.0",
+    "@vue/cli-service": "^3.2.0",
+    "babel-eslint": "^10.0.1",
+    "eslint": "^5.8.0",
+    "eslint-plugin-vue": "^5.0.0-0",
+    "vue-template-compiler": "^2.5.17"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/essential",
+      "eslint:recommended"
+    ],
+    "rules": {},
+    "parserOptions": {
+      "parser": "babel-eslint"
+    }
+  },
+  "postcss": {
+    "plugins": {
+      "autoprefixer": {}
+    }
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not ie <= 8"
+  ]
+}

css/bootstrap.min.css → public/css/bootstrap.min.css


+ 21 - 0
public/css/style.css

@@ -0,0 +1,21 @@
+.ivprog-container {
+	-webkit-box-shadow: 0px 0px 31px -5px rgba(0,0,0,0.75);
+-moz-box-shadow: 0px 0px 31px -5px rgba(0,0,0,0.75);
+box-shadow: 0px 0px 31px -5px rgba(0,0,0,0.75);
+border-radius: 4px;
+padding-top: 0.3rem;
+}
+footer.container {
+	margin-top: 1%;
+}
+.jumbotron.ivprogh-desc {
+	padding-bottom: 0.5rem;
+	margin-bottom: 1rem;
+}
+.text-reduced {
+	font-size: 96%;
+	margin-bottom: 0.5rem;
+}
+h1 {
+	margin-bottom: 0;
+}

BIN
public/favicon.ico


img_aux/global.fw.png → public/img/global.fw.png


img_aux/img_comandos.png → public/img/img_comandos.png


img_aux/img_completo_comandos.png → public/img/img_completo_comandos.png


img/img_flag_brazil.png → public/img/img_flag_brazil.png


img/img_flag_usa.png → public/img/img_flag_usa.png


img_aux/img_icones.png → public/img/img_icones.png


img_aux/img_interface.png → public/img/img_interface.png


img_aux/img_main_1.png → public/img/img_main_1.png


img_aux/img_setas_verdes.png → public/img/img_setas_verdes.png


img_aux/marca_circ_verde.png → public/img/marca_circ_verde.png


img_aux/marca_circ_verde_menor.png → public/img/marca_circ_verde_menor.png


img_aux/pf_visual_1.png → public/img/pf_visual_1.png


+ 21 - 0
public/index.html

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <link href="<%= BASE_URL %>css/bootstrap.min.css" rel="stylesheet">
+    <link href="<%= BASE_URL %>css/style.css" rel="stylesheet">
+    <title>www-ivprog</title>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but www-ivprog doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+  <script src="<%= BASE_URL %>js/jquery.min.js"></script>
+  <script src="<%= BASE_URL %>js/bootstrap.bundle.min.js"></script>
+</html>

File diff suppressed because it is too large
+ 50763 - 0
public/ivprogh/build/ivprog.bundle.js


File diff suppressed because it is too large
+ 1 - 0
public/ivprogh/build/ivprog.bundle.js.map


File diff suppressed because it is too large
+ 50233 - 0
public/ivprogh/build/ivprog.bundle.js~


ivprogh/css/ivprog-term.css → public/ivprogh/css/ivprog-term.css


+ 618 - 0
public/ivprogh/css/ivprog-visual-1.0.css

@@ -0,0 +1,618 @@
+html {
+  height: 100%;
+}
+
+body {
+  height: 100%;
+}
+
+.ui.raised.container.segment.div_to_body {
+  height: 92%;
+  padding: 10px;
+  padding-left: 6px;
+  padding-right: 6px;
+}
+
+.ivprog_visual_panel {
+	height: 96%;
+	overflow: auto;
+	overflow-x: auto;
+}
+
+.ivprog_textual_code {
+	width: 100%;
+	min-height: 500px;
+	resize: none;
+	background-color: white;
+}
+
+.main_title h2 {
+	margin: 0;
+}
+.main_title span {
+	font-size: 80%;
+	font-style: italic;
+}
+.ivprog_format_info {
+	cursor: pointer;
+	margin-left: 10px;
+}
+.ivprog_visual_panel {
+	border: 2px solid #A0A0A0;
+	background-color: red;
+}
+
+.ui.container.main_title {
+	float: left;
+	width: 200px;
+}
+.ui.container.content_margin {
+	margin-top: 10px;
+}
+.content_margin .content_sub_margin {
+	display: inline; 
+    margin-left: 34%;
+	margin-top: 50px;
+}
+.ui.icon.menu.center.aligned.container {
+	width: 438px;
+	margin-top: -10px;
+}
+
+.ghost {
+  opacity: .5;
+  background: #C8EBFB;
+}
+
+/* editor visual: **/
+
+.function_signature_div,
+.function_close_div {
+	font-weight: bold;
+	color: black;
+}
+.ui.selection.data_types_dropdown.visible.dropdown>.text:not(.default),
+.ui.selection.parameter_data_types_dropdown.visible.dropdown>.text:not(.default) {
+	font-weight: bold;
+}
+.ui.selection.data_types_dropdown.dropdown,
+.ui.selection.parameter_data_types_dropdown.dropdown {
+	padding-bottom: 0;
+}
+
+.ui.fluid.dropdown.data_types_dropdown {
+	display: inline;
+	width: 150px;
+	border: none;
+	background: none;
+}
+
+.ui.fluid.dropdown.parameter_data_types_dropdown {
+	display: inline;
+	border: none;
+	background: none;
+}
+
+.ui.fluid.dropdown.data_types_dropdown.selection .dropdown.icon,
+.ui.fluid.dropdown.parameter_data_types_dropdown.selection .dropdown.icon {
+	font-size: 1em;
+}
+
+.function_close_div {
+	margin-left: 20px;
+}
+
+.command_div {
+	margin-left: 16px;
+}
+
+.function_draggable_div {
+	width: 16px;
+	float: left;
+}
+
+.function_draggable_div img {
+	margin-bottom: -4px;
+	margin-left: -2px;
+}
+
+.input_name_function{
+	min-width: 50px;
+}
+
+.text_attr_receives {
+	margin-left: 20px;
+	margin-right: 20px;
+}
+
+.menu_operations {
+	margin-left: 10px;
+	margin-right: 10px;
+}
+
+.case_commands_block {
+	/*border: 1px solid red;*/
+}
+
+.context_menu {
+	display: inline;
+	float: right; 
+	margin-right: 25px;
+	margin-top: -4px;
+}
+
+.case_div {
+	border: 1px solid gray;
+	margin-left: 30px;
+	padding-left: 5px;
+	margin-top: 5px;
+}
+
+.function_name_div, .function_return_div, .function_name_parameter, .created_div_valor_var, .function_return, .var_value_menu_div, .variable_rendered, .variable_rendered div, .var_attributed,
+.expression_operand_1, .expression_operand_2, .operator, .div_comment_text, .value_rendered, .parameters_function_called, .parameters_function_called div, .expression_elements,
+.expression_element, .var_rendered, .menu_add_item, .component_element, .component_element, .conditional_expression, .variable_attribution, .attribution_expression, .var_value_expression,
+.incrementation_field, .incrementation_variable, .first_operand, .operator, .second_operand, .variable_to_switch, .variable_case, .button_remove_case, .editing_name_var, .parameter_div_edit {
+	display: inline;
+}
+
+.conditional_comands_block {
+	min-height: 10px;
+}
+
+.div_comment_text {
+	min-width: 100px;
+	font-style: italic;
+}
+
+.enable_edit_name_function, .add_parameter, .remove_parameter, .add_parameter_button, .remove_variable {
+	cursor: pointer;
+}
+
+[contenteditable="true"]:active,
+[contenteditable="true"]:focus,
+[contenteditable="true"]:hover {
+	border: 1px dashed #000;
+	background: white;
+}
+
+.ui.segment.ivprog_visual_panel {
+	padding: 3px;
+	margin-top: -5px;
+	background: #edf4ff;
+}
+
+.ui.segment.function_div {
+	padding: 5px;
+	margin: 0;
+	margin-bottom: 5px;
+}
+
+.ui.button.add_function_button,
+.ui.button.add_variable_button,
+.ui.button.add_command_button {
+	padding: 8px;
+	margin: 0;
+}
+
+.glyphicon-move {
+  cursor: move;
+  cursor: -webkit-grabbing;
+}
+
+.glyphicon.glyphicon-move {
+	float: left;
+}
+
+.remove_function_button, .minimize_function_button, .add_var_top_button, .add_command_top_button {
+	float: right;
+}
+
+.ui.icon.button.remove_function_button,
+.ui.icon.button.minimize_function_button {
+	background: none;
+	padding: 0;
+	margin-top: 12px;
+}
+
+.ui.segment.variables_list_div,
+.ui.segment.commands_list_div {
+	padding: 5px;
+	margin: 0;
+	margin-left: 30px;
+	width: calc(100% - 30px);
+	background-color: #f9f9f9;
+	min-height: 30px;
+}
+
+.ui.segment.variables_list_div {
+	margin-top: 5px;
+}
+
+.ui.labeled.icon.button.add_variable_button,
+.ui.labeled.icon.button.add_command_button {
+	
+}
+
+.program_signature {
+	font-weight: bold;
+	margin: -3px 0 10px -5px;
+}
+
+.program_final {
+	font-weight: bold;
+	margin: 5px 0 0 -5px;
+}
+
+.parameters_list {
+	display: inline;
+}
+
+.parameter_type {
+	margin-left: 10px;
+    margin-right: 15px;
+}
+
+.function_return .dropdown .icon, .parameter_type .dropdown .icon {
+	margin-left: 6px;
+}
+.tabela_var {
+	display: inline;
+}
+.buttons_manage_columns i, .tr_manage_lines i {
+	cursor: pointer;
+	display: inline;
+}
+div.buttons_manage_columns {
+	display: inline;
+}
+.tr_manage_lines {
+	text-align: center;
+}
+.div_valor_var {
+	display: inline;
+}
+.ui.comment span {
+	font-style: italic;
+}
+.ui.comment, .ui.reader, .ui.writer, .ui.attribution, .ui.iftrue, .ui.repeatNtimes, .ui.whiletrue, .ui.dowhiletrue, .ui.switch, .ui.functioncall,
+.ui.return {
+	border: 1px solid gray;
+	padding: 5px;
+	border-radius: 5px;
+	margin: 5px;
+	background: #f9f9f9;
+}
+
+.add_var_top_button {
+	padding-right: 50px;
+}
+
+.function_signature_div {
+	min-height: 40px;
+	padding-top: 8px;
+}
+
+.move_function {
+	margin-top: 9px;
+}
+
+.div_start_minimize_v {
+	float: right;
+	width: 22px; 
+	height: 10px;
+}
+
+.global_var {
+	margin-bottom: 7px;
+}
+
+.list_globals, .global_const {
+	display: inline;
+}
+
+.created_element {
+	position: absolute;
+	width: 50%;
+	z-index: 99999999;
+	opacity: .8;
+	cursor: move;
+}
+
+.width-dynamic {
+	min-width: 100px;
+}
+
+.ui.icon.plus.square.outline.icon_add_item_to_writer {
+	margin-right: 10px;
+	margin-left: 10px;
+	cursor: pointer;
+}
+
+.button_remove_command, .button_refresh_attribution {
+	float: right;
+	cursor: pointer;
+}
+
+.expression_drag {
+	cursor: col-resize;
+	border: 2px gray solid;
+	display: inline;
+	width: 5px;
+}
+
+.ui.icon.red.exclamation.triangle.error_icon {
+	float: left;
+    margin-left: -30px;
+}
+
+.height_100 {
+  height: 100%;
+}
+
+.default_visual_title {
+  display: none;
+}
+
+.expandingArea textarea {
+	min-height: 30px;
+	resize: none;
+	padding: 5px;
+}
+
+.ui table .btn_actions {
+	text-align: center;
+}
+
+.button_remove_case {
+	cursor: pointer;
+	padding: 3px;
+}
+
+.ui.button_add_case {
+	margin-top: 10px;
+}
+.accordion {
+	margin: auto;
+}
+
+.global_container:hover, 
+.variable_container:hover {
+	border: 2px solid gray;
+	padding-left: 8px;
+	padding-right: 8px;
+	padding-top: 5px;
+	padding-bottom: 4px;
+}
+
+.ui.label.function_name_parameter:hover {
+	border: 2px solid gray;
+	padding: 5px 6px 5px 6px;
+}
+
+.ui.label.function_name_parameter {
+	padding: 7px 8px 7px 8px;
+}
+
+.global_container:hover,  .variable_container:hover {
+	margin-bottom:  4px !important;
+}
+
+.global_container .global_type, .editing_name_var, .global_container .span_value_variable,
+.variable_container .variable_type,  .variable_container .span_value_variable,
+.ui.dropdown.function_return, div.function_name_div_updated,
+.ui.dropdown.parameter_type, .parameter_div_edit {
+	background: #cecece;
+	border-radius: 5px;
+	padding: 4px;
+	margin-left: 5px;
+	margin-right: 5px;
+}
+.parameter_div_edit {
+	padding-bottom: 2px;
+	padding-top: 2px;
+}
+.ui.dropdown.parameter_type {
+
+}
+div.function_name_div_updated {
+	padding-top: 5px;
+	padding-bottom: 5px;
+	margin-right: 10px;
+}
+.function_name_div_updated .name_function_updated {
+	padding-left: 10px;
+    padding-right: 10px;
+}
+.variable_container .variable_type {
+	padding: 5px;
+	margin-left: 0;
+	margin-right: 3px;
+}
+
+.global_container .global_type:hover, .editing_name_var:hover, .global_container .span_value_variable:hover,
+.variable_container .variable_type:hover, .variable_container .span_name_variable:hover, .variable_container .span_value_variable:hover,
+.ui.dropdown.function_return:hover, div.function_name_div_updated:hover,
+.ui.dropdown.parameter_type:hover, .parameter_div_edit:hover {
+	background: #848484;
+	color: #fff;
+	z-index: 999999;
+}
+
+.editing_name_var {
+	min-width: 40px;
+	padding-top: 3px;
+	padding-bottom: 3px;
+}
+
+.global_container .global_type:active, 
+.variable_container .variable_type:active,
+.ui.dropdown.function_return:active, 
+div.function_name_div_updated:active,
+.ui.dropdown.parameter_type:active {
+	background: #636363;
+	color: #fff;
+}
+
+.global_container i {
+	cursor: pointer;
+}
+
+.global_container .ui.icon.plus.square.outline, .global_container .ui.icon.minus.square.outline {
+	font-size: 120%;
+}
+
+.character_equals {
+	vertical-align: sub;
+    font-size: 150%;
+}
+
+.red.icon.times.remove_global,
+.red.icon.times.remove_variable,
+.red.icon.times.remove_parameter {
+	float: right;
+    margin-right: -1px;
+    margin-left: 8px;
+    opacity: 0;
+}
+
+.global_container:hover > .red.icon.times.remove_global, .variable_container:hover > .red.icon.times.remove_variable,
+.function_name_parameter:hover > .red.icon.times.remove_parameter {
+	opacity: 1;
+}
+
+.tr_manage_lines {
+	padding-top: 10px;
+}
+
+.ui.icon.button.add-globalVar-button.add_global_button {
+	padding: 8px;
+	margin-bottom: 4px;
+}
+.all_functions {
+	margin-top: -5px;
+}
+.only_in_frame {
+	position: absolute;
+    z-index: 9999;
+    width: 90px;
+    top: 5px;
+    left: 5px;
+    opacity: .6;
+}
+.only_in_frame:hover {
+	opacity: 1;
+}
+.only_in_frame:hover span {
+	display: block;
+}
+.only_in_frame span {
+	display: none;
+	margin-top: -5px;
+}
+.ui.container.main_title {
+	width: 85px;
+}
+.ui.label.global_container {
+	margin-bottom: 3px;
+}
+.ui.label.variable_container {
+	margin-bottom: 3px;
+}
+.created_div_valor_var {
+	display: inline-block;
+}
+.ui.dropdown.function_return {
+	padding-left: 15px;
+    padding-right: 15px;
+    margin-left: 10px;
+    margin-right: 10px;
+}
+.parethesis_function {
+	font-size: 120%;
+}
+
+.var_value_menu_div,
+.attribution .var_attributed,
+.component_element,
+.conditional_expression .expression_element,
+.menu_start_rendered,
+.attribution_expression .variable_attribution,
+.render_style_param,
+.attribution_expression .div_expression_st:not(:empty),
+.incrementation_field .incrementation_variable,
+.incrementation_field .first_operand:not(:empty),
+.incrementation_field .operator:not(:empty),
+.incrementation_field .second_operand:not(:empty) {
+	background: #e8e8e8;
+	border-radius: 5px;
+	min-width: 40px;
+	padding: 2px;
+    padding-left: 5px;
+    padding-right: 5px;
+    border: 1px solid gray;
+    box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.2), 0 3px 3px 0 rgba(0, 0, 0, 0.19);
+    color: black;
+}
+.menu_start_rendered {
+	padding-left: 12px;
+}
+.menu_start_rendered i {
+	width: 1.5em;
+    margin-right: -1em;
+}
+.row_container:hover, .column_container:hover {
+	background: #cecece;
+}
+
+.column_container, .row_container {
+	border-radius: 4px;
+    border: 1px solid gray;
+    padding: 1px 2px 1px 2px;
+    background: #e8e8e8;
+
+    box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.2), 0 3px 3px 0 rgba(0, 0, 0, 0.19);
+}
+
+.var_value_menu_div div i {
+	color: black;
+}
+
+.span_command_spec {
+	color: black;
+	font-weight: bold;
+	font-size: 110%;
+}
+
+.ui.comment.command_container .var_value_menu_div {
+	display: inline-block;
+	width: 93%;
+}
+
+.ui.comment.command_container .var_value_menu_div .variable_rendered,
+.ui.comment.command_container .var_value_menu_div .value_rendered {
+    width: 100%;
+    cursor: text;
+    font-style: italic;
+}
+
+.ui.comment.command_container .var_value_menu_div {
+	cursor: text;
+}
+
+.ui.comment.command_container .var_value_menu_div {
+	background: none;
+	border-radius: 0;
+    border: 0px solid gray;
+    box-shadow: none;
+    padding: 0px;
+    font-size: 110%;
+}
+.ui.comment.command_container .var_name,
+.ui.comment.command_container .value_rendered {
+	color: rgba(0,0,0,.6);
+}
+.ui.comment.command_container .var_value_menu_div input {
+    width: 100%;
+    display: inline-block;
+    font-style: italic;
+}

BIN
public/ivprogh/img/background-panel.png


+ 136 - 0
public/ivprogh/index.html

@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+    <title></title>
+    <link rel="stylesheet" type="text/css" href="js/semantic/semantic.min.css">
+    <link rel="stylesheet" type="text/css" href="css/ivprog-visual-1.0.css">
+    <link rel="stylesheet" type="text/css" href="css/ivprog-term.css">
+    <script src="js/jquery-3.3.1.min.js"></script>
+    <script src="js/iassign-integration-functions.js"></script>
+    <script src="build/ivprog.bundle.js"></script>
+    <script src="js/semantic/semantic.min.js"></script>
+    <script src="js/semantic/semantic-buttons.js"></script>
+
+    <script src="js/jquery-ui.js"></script>
+    <script src="js/Sortable.js"></script>
+    
+  </head>
+  <body>
+
+    <div class="ui height_100 add_accordion">
+
+      <div class="title default_visual_title">
+        <i class="dropdown icon"></i>
+        
+      </div>
+
+    <div class="content height_100">
+   
+    <div class="ui one column doubling stackable grid container">
+      <div class="column">
+        <div class="ui container main_title">
+          <h2>iVProg</h2>
+          <span>interactive coding</span>
+        </div>
+
+        <div class="ui container content_margin">
+          <div class="content_sub_margin">
+              <div class="blue ui ivprog_format buttons">
+                <button class="ui button active visual_coding_button">Visual</button>
+                <button class="ui button textual_coding_button">Textual</button>
+              </div>
+            </div>
+          </div>
+
+      </div>
+    </div>
+
+    <div class="ui container main_title only_in_frame" style="display: none;">
+      <h2>iVProg</h2>
+      <span class="subtext">interactive coding</span>
+    </div>
+
+    <div class="ui raised container segment div_to_body">
+
+      <div class="ui icon menu center aligned container" style="width: 438px; margin-top: -25px;">
+        <a class="item visual_coding_button">
+          <i class="window maximize outline icon"></i>
+        </a>
+        <a class="item textual_coding_button">
+          <i class="code icon"></i>
+        </a>
+        <a class="item upload_file_button">
+          <i class="upload icon"></i>
+        </a>
+        <a class="item download_file_button">
+          <i class="download icon"></i>
+        </a>
+        <a class="item undo_button disabled">
+          <i class="undo icon"></i>
+        </a>
+        <a class="item redo_button">
+          <i class="redo icon"></i>
+        </a>
+        <a class="item run_button">
+          <i class="play icon"></i>
+        </a>
+        <a class="item assessment assessment_button">
+          <i class="check icon"></i>
+        </a>
+        <a class="item help_button">
+          <i class="help icon"></i>
+        </a>
+      </div>
+
+      <div class="ui one column container segment ivprog_visual_panel loading">
+
+        <div class="global_var">
+          
+          <div class="ui icon button add-globalVar-button add_global_button"><i class="icon superscript"></i></div>
+
+          <div class="list_globals"></div>
+
+        </div>
+
+        <div class="all_functions list-group" id="listWithHandle">
+
+        </div>
+
+
+        <div class="ui teal small labeled icon button add_function_button">
+          <data class="i18n" value="ui:btn_function">Function</data>
+          <i class="add icon"></i>
+        </div>
+        <div class="program_final"></div>
+
+      </div>
+
+
+      <div class="ui one column container segment ivprog_textual_panel loading" style="display: none;">
+        <textarea class="ivprog_textual_code" disabled></textarea>
+      </div>
+
+      <div id='ivprog-term' class="six column wide">
+        <div class="div_toggle_console"><i class="inverted terminal icon green button_toggle_console"></i></div>
+      </div>
+    </div>
+
+    </div>
+
+  </div>
+
+    <script>
+      $(document).ready(() => {
+        ivprogCore.LocalizedStrings.updateTagText();
+        ivprogCore.initVisualUI();
+        prepareEnvironment();
+      });
+    </script>
+
+
+    
+
+
+  </body>
+</html>

ivprogh/js/Sortable.js → public/ivprogh/js/Sortable.js


+ 347 - 0
public/ivprogh/js/iassign-integration-functions.js

@@ -0,0 +1,347 @@
+// Função para ler parâmetros informados pelo iTarefa via URL
+// Apesar de não ser obrigatório, será muito útil para capturar os parâmetros
+function getParameterByName (name, defaultReturn = null) {
+    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
+    return match ? decodeURIComponent(match[1].replace(/\+/g, ' ')) : defaultReturn;
+}
+
+// Criando um object com os parâmetros informados pelo iTarefa
+// Observe que para cada parâmetro, é realizada a chamada do método getParameterByName, implementado acima
+var iLMparameters = {
+    iLM_PARAM_ServerToGetAnswerURL: getParameterByName("iLM_PARAM_ServerToGetAnswerURL"),
+    iLM_PARAM_SendAnswer: getParameterByName("iLM_PARAM_SendAnswer"),
+    iLM_PARAM_AssignmentURL: getParameterByName("iLM_PARAM_AssignmentURL"),
+    iLM_PARAM_Assignment: getParameterByName("iLM_PARAM_Assignment"),
+    lang: getParameterByName("lang", "pt")
+};
+
+// Set the lang parameter to the localStorage for easy access
+// and no dependency to the global scope, avoind future 'strict mode' problems
+//localStorage.setItem('ivprog.lang', iLMparameters.lang);
+
+// Função chamada pelo iTarefa quando o professor finaliza a criação da atividade
+// ou quando o aluno finaliza a resolução do exercício
+// O retorno é um JSON com os dados do exercício ou da resolução
+// Esse retorno será armazenado no banco de dados do Moodle, pelo iTarefa
+function getAnswer () {
+    // Se o parâmetro "iLM_PARAM_SendAnswer" for false,
+    // então trata-se de resolução de atividade
+    if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+        // Montar o retorno com a resposta do aluno
+        var contentToSend = previousContent.split("\n::algorithm::")[0];
+        contentToSend += '\n::algorithm::\n';
+        contentToSend += JSON.stringify(window.program_obj);
+
+        contentToSend += '\n::logs::';
+        contentToSend += getTrackingLogs();
+
+        return contentToSend;
+
+    } else {
+        // Montar o retorno com a criação da atividade do professor
+        var ret = ' { ' + prepareTestCases() 
+            + ',\n"settings_data_types": \n' + JSON.stringify($('form[name="settings_data_types"]').serializeArray()) 
+            + ',\n"settings_commands": \n' + JSON.stringify($('form[name="settings_commands"]').serializeArray()) 
+            + ',\n"settings_functions": \n' + JSON.stringify($('form[name="settings_functions"]').serializeArray()) 
+            + ' } ';
+
+        if ($("input[name='include_algo']").is(':checked')) {
+            ret += '\n::algorithm::\n';
+            ret += JSON.stringify(window.program_obj);
+        }
+
+        return ret;
+    }
+}
+
+function prepareTestCases () {
+    var ret = ' \n "testcases" : [ '
+    var test_cases_array = $('form[name="test_cases"]').serializeArray();
+    for (var i = 0; i < test_cases_array.length; i = i + 2) {
+        ret += '\n{ ';
+        ret += '\n "input": [';
+        var inps = test_cases_array[i].value.match(/[^\r\n]+/g);
+        if (inps) {
+            for (var j = 0; j < inps.length; j++) {
+                ret += '"' + inps[j] + '"';
+                if ((j + 1) < inps.length) {
+                    ret += ', ';
+                }
+            }
+        }
+        ret += '], \n "output": [';
+        var outs = test_cases_array[i+1].value.match(/[^\r\n]+/g);
+        if (outs) {
+            for (var j = 0; j < outs.length; j++) {
+                ret += '"' + outs[j] + '"';
+                if ((j + 1) < outs.length) {
+                    ret += ', ';
+                }
+            }
+        }
+        ret += ']';
+        ret += '\n}'
+        if ((i + 2) < test_cases_array.length) {
+            ret += ',';
+        }
+    }
+    ret += '\n] ';
+    return ret;
+}
+
+// Função chamada pelo iTarefa para receber a nota do aluno na atividade
+// O retorno é um valor entre 0.0 e 1.0
+function getEvaluation () {
+    if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+        // A chamada do método abaixo é obrigatória!
+        // Observe que a chamada parte do iLM para o iTarefa
+        //parent.getEvaluationCallback(window.studentGrade);
+
+        runCodeAssessment();
+    }
+}
+
+
+var testCases = null;
+var settingsDataTypes = null;
+var settingsCommands = null;
+var settingsFunctions = null;
+var algorithm_in_ilm = null;
+var previousContent = null;
+
+// Função para que o iMA leia os dados da atividade fornecidos pelo iTarefa
+function getiLMContent () {
+
+    // O parâmetro "iLM_PARAM_Assignment" fornece o URL do endereço que deve ser
+    // requisitado via AJAX para a captura dos dados da atividade
+    $.get(iLMparameters.iLM_PARAM_Assignment, function (data) {
+        if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+            previousContent = data;
+            prepareActivityToStudent(data);
+        } else {
+
+        }
+    });
+}
+
+function prepareActivityToStudent (ilm_cont) {
+    var content = JSON.parse(ilm_cont.split('\n::algorithm::')[0]);
+    testCases = content.testcases;
+    settingsDataTypes = content.settings_data_types;
+    settingsCommands = content.settings_commands;
+    settingsFunctions = content.settings_functions;
+    if (ilm_cont.split('\n::algorithm::')[1]) {
+        algorithm_in_ilm = ilm_cont.split('\n::algorithm::')[1].split('\n::logs::')[0];
+        window.program_obj.functions = JSON.parse(algorithm_in_ilm).functions;
+        window.program_obj.globals = JSON.parse(algorithm_in_ilm).globals;
+    }
+    $('.assessment_button').removeClass('disabled');
+    renderAlgorithm();
+}
+
+// Função para organizar se para criação, visualização ou resolução de atividade
+function prepareEnvironment () {
+    if ((iLMparameters.iLM_PARAM_AssignmentURL == "true") && (iLMparameters.iLM_PARAM_SendAnswer == "true")) {
+        prepareActivityCreation();
+    }
+}
+
+$(document).ready(function() {
+
+    // Se iLM_PARAM_SendAnswer for false, então trata-se de resolução de atividade,
+    // portanto, a "DIV" de resolução é liberada
+    if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+        //$('.resolucao').css("display","block");
+        getiLMContent();
+
+
+        $( document ).ready(function() {
+            $('.div_to_body').mousemove(function(e) {
+                trackingMatrix.push(adCoords(e, 0));
+            });
+
+            $('.div_to_body').click(function(e) {
+                trackingMatrix.push(adCoords(e, 1));                    
+            });
+
+        });
+
+    } else {
+        // Caso não esteja em modo de resolução de atividade, a visualização no momento
+        // é para a elaboração de atividade:
+        //$('.elaboracao').css("display","block");
+    }
+
+    if (!testCases) {
+        $('.assessment_button').addClass('disabled');
+    }
+
+});
+
+// Função para preparar a interface para o professor criar atividade:
+function prepareActivityCreation () {
+
+    $('.add_accordion').addClass('accordion');
+
+    $('.default_visual_title').toggle();
+    $('.default_visual_title').append('<span>'+LocalizedStrings.getUI('text_teacher_algorithm')+'</span>');
+    $('.height_100').removeClass('height_100');
+    $('.main_title').remove();
+    $('.ui.accordion').addClass('styled');
+    
+    $('<div class="ui checkbox"><input type="checkbox" name="include_algo" class="include_algo" tabindex="0" class="hidden"><label>'+LocalizedStrings.getUI('text_teacher_algorithm_include')+'</label></div>').insertBefore('.content_margin');
+    
+    var cases_test_div = $('<div class="ui accordion styled"><div class="active title"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('text_teacher_test_case')+'</div><div class="active content"></div></div>');
+
+    cases_test_div.insertBefore('.accordion');
+
+    var config_div = $('<div class="ui accordion styled"><div class="title"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('text_teacher_config')+'</div><div class="content"></div></div>');
+
+    config_div.insertAfter(cases_test_div);
+
+    $('.ui.accordion').accordion();
+
+    $('.ui.checkbox').checkbox();
+
+    prepareTableSettings(config_div.find('.content'));
+
+    prepareTableTestCases(cases_test_div.find('.content'));
+}
+
+function prepareTableTestCases (div_el) {
+
+    var table_el = '<form name="test_cases"><table class="ui blue table"><thead><tr><th width="30px">#</th><th>'+LocalizedStrings.getUI('text_teacher_test_case_input')+'</th><th>'+LocalizedStrings.getUI('text_teacher_test_case_output')+'</th><th width="80px">'+LocalizedStrings.getUI('text_teacher_test_case_actions')+'</th></tr></thead>'
+            + '<tbody class="content_cases"></tbody></table></form>';
+
+    div_el.append(table_el);
+
+    div_el.append('<button class="ui teal labeled icon button button_add_case"><i class="plus icon"></i>'+LocalizedStrings.getUI('text_teacher_test_case_add')+'</button>');
+
+    $('.button_add_case').on('click', function(e) {
+        addTestCase();
+    });
+
+}
+
+var hist = false;
+
+function addTestCase () {
+    var new_row = $('<tr><td class="counter"></td><td class="expandingArea"><textarea rows="1" name="input" class="text_area_input"></textarea></td><td class="expandingArea"><textarea rows="1" name="output" class="text_area_output"></textarea></td><td class="btn_actions"><div class="ui button_remove_case"><i class="red icon times large"></i></div></td></tr>');
+    $('.content_cases').append(new_row);
+
+    new_row.find('.button_remove_case').click(function(e) {
+        new_row.remove();
+        updateTestCaseCounter();
+    });
+
+    $('textarea').on('input', function(e) {
+        var lines = $(this).val().split('\n').length;
+        $(this).attr('rows', lines);
+    });
+    
+    updateTestCaseCounter();
+
+     $('.text_area_output').keydown(function(e) {
+        var code = e.keyCode || e.which;
+        if (code == 9 && $(this).closest("tr").is(":last-child")) {
+            hist = true;
+            addTestCase();
+        }
+     });
+     if (!hist) {
+        $( ".content_cases tr:last" ).find('.text_area_input').focus();
+     } else {
+        hist = false;
+     }
+}
+
+function updateTestCaseCounter () {
+    var i = 1;
+    $( ".content_cases" ).find('tr').each(function() {
+      $( this ).find('.counter').text(i);
+      i ++;
+    });
+}
+
+function prepareTableSettings (div_el) {
+    div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_data_types')+'</h4>');
+    div_el.append('<form name="settings_data_types"><div class="ui stackable five column grid">'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="integer_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('integer')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="real_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('real')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="text_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="boolean_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('boolean')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="void_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('void')+'</label></div></div>'
+        +'</div></form>');
+
+
+    div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_commands')+'</h4>');
+    div_el.append('<form name="settings_commands"><div class="ui stackable three column grid">'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_read" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_read_var')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_write" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_write_var')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_comment" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_comment')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_attribution" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_attribution')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_functioncall" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_functioncall')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_iftrue" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_iftrue')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_repeatNtimes" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_repeatNtimes')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_while" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_whiletrue')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_dowhile" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_dowhiletrue')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_switch" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_switch')+'</label></div></div>'
+        +'</div></form>');
+
+    div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_functions')+'</h4>');
+    div_el.append('<form name="settings_functions"><div class="ui stackable one column grid">'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="functions_creation" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_teacher_create_functions')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="functions_move" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_teacher_create_movement_functions')+'</label></div></div>'
+        +'</div></form>');
+
+    $('.ui.checkbox').checkbox();
+
+
+}
+
+function getTrackingLogs () {
+    var ret = "";
+    for (var i = 0; i < trackingMatrix.length; i++) {
+        ret += "\n" + trackingMatrix[i][0] + "," + trackingMatrix[i][1] + "," + trackingMatrix[i][2];
+        if (trackingMatrix[i][2] === 1) {
+            ret += ',"' + trackingMatrix[i][3] + '"';
+        }
+    }
+    return ret;
+}
+
+// Tracking mouse movements
+var trackingMatrix = [];
+
+function adCoords(e, code){
+    var x = e.pageX; 
+    var y = e.pageY;
+    if (code === 1) {
+        return [x, y, code, e.target.classList['value']];
+    } else {
+        return [x, y, code];
+    }
+}
+
+$( document ).ready(function() {
+
+    if (inIframe()) {
+        orderIcons();
+    }
+
+});
+
+function orderIcons() {
+    $('.ui.one.column.doubling.stackable.grid.container').css('display', 'none');
+    $('.only_in_frame').css('display', 'block');
+    
+}
+
+
+function inIframe () {
+    try {
+        return window.self !== window.top;
+    } catch (e) {
+        return true;
+    }
+}

+ 343 - 0
public/ivprogh/js/iassign-integration-functions.js~

@@ -0,0 +1,343 @@
+// Funcao para ler parametros informados pelo iTarefa via URL
+// Apesar de nao ser obrigatorio, será muito útil para capturar os parametros
+function getParameterByName (name, defaultReturn = null) {
+  var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
+  return match ? decodeURIComponent(match[1].replace(/\+/g, ' ')) : defaultReturn;
+}
+
+// Criando um object com os parametros informados pelo iTarefa
+// Observe que para cada parametro, é realizada a chamada do método getParameterByName, implementado acima
+var iLMparameters = {
+  iLM_PARAM_ServerToGetAnswerURL: getParameterByName("iLM_PARAM_ServerToGetAnswerURL"),
+  iLM_PARAM_SendAnswer: getParameterByName("iLM_PARAM_SendAnswer"),
+  iLM_PARAM_AssignmentURL: getParameterByName("iLM_PARAM_AssignmentURL"),
+  iLM_PARAM_Assignment: getParameterByName("iLM_PARAM_Assignment"),
+  lang: getParameterByName("lang", "pt")
+};
+
+// Set the lang parameter to the localStorage for easy access
+// and no dependency to the global scope, avoind future 'strict mode' problems
+try { localStorage.setItem('ivprog.lang', iLMparameters.lang); }
+catch (error) { } //leo1 If NOT in iAssign 'localStorage' is undefined! Do not try: localStorage.setItem('ivprog.lang', 'pt');
+
+// Funcao chamada pelo iTarefa quando o professor finaliza a criacao da atividade
+// ou quando o aluno finaliza a resolucao do exercício
+// O retorno é um JSON com os dados do exercício ou da resolucao
+// Esse retorno será armazenado no banco de dados do Moodle, pelo iTarefa
+function getAnswer () {
+  // Se o parametro "iLM_PARAM_SendAnswer" for false,
+  // entao trata-se de resolucao de atividade
+  if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+    // Montar o retorno com a resposta do aluno
+    var contentToSend = previousContent.split("\n::algorithm::")[0];
+    contentToSend += '\n::algorithm::\n';
+    contentToSend += JSON.stringify(window.program_obj);
+
+    contentToSend += '\n::logs::';
+    contentToSend += getTrackingLogs();
+
+    return contentToSend;
+
+  } else {
+    // Montar o retorno com a criacao da atividade do professor
+    var ret = ' { ' + prepareTestCases() 
+        + ',\n"settings_data_types": \n' + JSON.stringify($('form[name="settings_data_types"]').serializeArray()) 
+        + ',\n"settings_commands": \n' + JSON.stringify($('form[name="settings_commands"]').serializeArray()) 
+        + ',\n"settings_functions": \n' + JSON.stringify($('form[name="settings_functions"]').serializeArray()) 
+        + ' } ';
+
+    if ($("input[name='include_algo']").is(':checked')) {
+      ret += '\n::algorithm::\n';
+      ret += JSON.stringify(window.program_obj);
+    }
+
+    return ret;
+  }
+}
+
+function prepareTestCases () {
+  var ret = ' \n "testcases" : [ '
+  var test_cases_array = $('form[name="test_cases"]').serializeArray();
+  for (var i = 0; i < test_cases_array.length; i = i + 2) {
+    ret += '\n{ ';
+    ret += '\n "input": [';
+    var inps = test_cases_array[i].value.match(/[^\r\n]+/g);
+    if (inps) {
+      for (var j = 0; j < inps.length; j++) {
+          ret += '"' + inps[j] + '"';
+          if ((j + 1) < inps.length) {
+              ret += ', ';
+          }
+      }
+    }
+    ret += '], \n "output": [';
+    var outs = test_cases_array[i+1].value.match(/[^\r\n]+/g);
+    if (outs) {
+      for (var j = 0; j < outs.length; j++) {
+          ret += '"' + outs[j] + '"';
+          if ((j + 1) < outs.length) {
+              ret += ', ';
+          }
+      }
+    }
+    ret += ']';
+    ret += '\n}'
+    if ((i + 2) < test_cases_array.length) {
+      ret += ',';
+    }
+  }
+  ret += '\n] ';
+  return ret;
+}
+
+// Funcao chamada pelo iTarefa para receber a nota do aluno na atividade
+// O retorno é um valor entre 0.0 e 1.0
+function getEvaluation () {
+  // var strContent = getAnswer(); alert('./ivprogh/js/getEvaluation(): aqui! ' + strContent);
+  alert('./ivprogh/js/getEvaluation(): aqui! ');
+  if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+    // A chamada do método abaixo é obrigatoria!
+    // Observe que a chamada parte do iLM para o iTarefa
+    //parent.getEvaluationCallback(window.studentGrade);
+
+    runCodeAssessment();
+  }
+}
+
+
+var testCases = null;
+var settingsDataTypes = null;
+var settingsCommands = null;
+var settingsFunctions = null;
+var algorithm_in_ilm = null;
+var previousContent = null;
+
+// Funcao para que o iMA leia os dados da atividade fornecidos pelo iTarefa
+function getiLMContent () {
+
+  // O parametro "iLM_PARAM_Assignment" fornece o URL do endereço que deve ser
+  // requisitado via AJAX para a captura dos dados da atividade
+  $.get(iLMparameters.iLM_PARAM_Assignment, function (data) {
+    if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+      previousContent = data;
+      prepareActivityToStudent(data);
+    } else {
+
+    }
+  });
+}
+
+function prepareActivityToStudent (ilm_cont) {
+  var content = JSON.parse(ilm_cont.split('\n::algorithm::')[0]);
+  testCases = content.testcases;
+  settingsDataTypes = content.settings_data_types;
+  settingsCommands = content.settings_commands;
+  settingsFunctions = content.settings_functions;
+  algorithm_in_ilm = ilm_cont.split('\n::algorithm::')[1].split('\n::logs::')[0];
+
+  window.program_obj.functions = JSON.parse(algorithm_in_ilm).functions;
+  window.program_obj.globals = JSON.parse(algorithm_in_ilm).globals;
+  renderAlgorithm();
+}
+
+// Funcao para organizar se para criacao, visualizacao ou resolucao de atividade
+function prepareEnvironment () {
+  if ((iLMparameters.iLM_PARAM_AssignmentURL == "true") && (iLMparameters.iLM_PARAM_SendAnswer == "true")) {
+    prepareActivityCreation();
+  }
+}
+
+$(document).ready(function() {
+
+  // Se iLM_PARAM_SendAnswer for false, entao trata-se de resolucao de atividade,
+  // portanto, a "DIV" de resolucao é liberada
+  if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+    //$('.resolucao').css("display","block");
+    getiLMContent();
+
+
+    $( document ).ready(function() {
+      $('.div_to_body').mousemove(function(e) {
+          trackingMatrix.push(adCoords(e, 0));
+      });
+
+      $('.div_to_body').click(function(e) {
+          trackingMatrix.push(adCoords(e, 1));                    
+      });
+
+    });
+
+  } else {
+    // Caso nao esteja em modo de resolucao de atividade, a visualizacao no momento
+    // é para a elaboracao de atividade:
+    //$('.elaboracao').css("display","block");
+  }
+});
+
+// Funcao para preparar a interface para o professor criar atividade:
+function prepareActivityCreation () {
+
+  $('.add_accordion').addClass('accordion');
+
+  $('.default_visual_title').toggle();
+  $('.default_visual_title').append('<span>'+LocalizedStrings.getUI('text_teacher_algorithm')+'</span>');
+  $('.height_100').removeClass('height_100');
+  $('.main_title').remove();
+  $('.ui.accordion').addClass('styled');
+  
+  $('<div class="ui checkbox"><input type="checkbox" name="include_algo" class="include_algo" tabindex="0" class="hidden"><label>'+LocalizedStrings.getUI('text_teacher_algorithm_include')+'</label></div>').insertBefore('.content_margin');
+  
+  var cases_test_div = $('<div class="ui accordion styled"><div class="active title"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('text_teacher_test_case')+'</div><div class="active content"></div></div>');
+
+  cases_test_div.insertBefore('.accordion');
+
+  var config_div = $('<div class="ui accordion styled"><div class="title"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('text_teacher_config')+'</div><div class="content"></div></div>');
+
+  config_div.insertAfter(cases_test_div);
+
+  $('.ui.accordion').accordion();
+
+  $('.ui.checkbox').checkbox();
+
+  prepareTableSettings(config_div.find('.content'));
+
+  prepareTableTestCases(cases_test_div.find('.content'));
+}
+
+function prepareTableTestCases (div_el) {
+
+  var table_el = '<form name="test_cases"><table class="ui blue table"><thead><tr><th width="30px">#</th><th>'+LocalizedStrings.getUI('text_teacher_test_case_input')+'</th><th>'+LocalizedStrings.getUI('text_teacher_test_case_output')+'</th><th width="80px">'+LocalizedStrings.getUI('text_teacher_test_case_actions')+'</th></tr></thead>'
+      + '<tbody class="content_cases"></tbody></table></form>';
+
+  div_el.append(table_el);
+
+  div_el.append('<button class="ui teal labeled icon button button_add_case"><i class="plus icon"></i>'+LocalizedStrings.getUI('text_teacher_test_case_add')+'</button>');
+
+  $('.button_add_case').on('click', function(e) {
+    addTestCase();
+  });
+
+}
+
+var hist = false;
+
+function addTestCase () {
+  var new_row = $('<tr><td class="counter"></td><td class="expandingArea"><textarea rows="1" name="input" class="text_area_input"></textarea></td><td class="expandingArea"><textarea rows="1" name="output" class="text_area_output"></textarea></td><td class="btn_actions"><div class="ui button_remove_case"><i class="red icon times large"></i></div></td></tr>');
+  $('.content_cases').append(new_row);
+
+  new_row.find('.button_remove_case').click(function(e) {
+    new_row.remove();
+    updateTestCaseCounter();
+  });
+
+  $('textarea').on('input', function(e) {
+    var lines = $(this).val().split('\n').length;
+    $(this).attr('rows', lines);
+  });
+  
+  updateTestCaseCounter();
+
+   $('.text_area_output').keydown(function(e) {
+    var code = e.keyCode || e.which;
+    if (code == 9 && $(this).closest("tr").is(":last-child")) {
+      hist = true;
+      addTestCase();
+    }
+   });
+   if (!hist) {
+    $( ".content_cases tr:last" ).find('.text_area_input').focus();
+   } else {
+    hist = false;
+   }
+}
+
+function updateTestCaseCounter () {
+  var i = 1;
+  $( ".content_cases" ).find('tr').each(function() {
+    $( this ).find('.counter').text(i);
+    i ++;
+  });
+}
+
+function prepareTableSettings (div_el) {
+  div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_data_types')+'</h4>');
+  div_el.append('<form name="settings_data_types"><div class="ui stackable five column grid">'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="integer_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('integer')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="real_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('real')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="text_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="boolean_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('boolean')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="void_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('void')+'</label></div></div>'
+    +'</div></form>');
+
+
+  div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_commands')+'</h4>');
+  div_el.append('<form name="settings_commands"><div class="ui stackable three column grid">'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_read" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_read_var')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_write" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_write_var')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_comment" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_comment')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_attribution" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_attribution')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_functioncall" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_functioncall')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_iftrue" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_iftrue')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_repeatNtimes" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_repeatNtimes')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_while" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_whiletrue')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_dowhile" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_dowhiletrue')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_switch" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_switch')+'</label></div></div>'
+    +'</div></form>');
+
+  div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_functions')+'</h4>');
+  div_el.append('<form name="settings_functions"><div class="ui stackable one column grid">'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="functions_creation" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_teacher_create_functions')+'</label></div></div>'
+    +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="functions_move" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_teacher_create_movement_functions')+'</label></div></div>'
+    +'</div></form>');
+
+  $('.ui.checkbox').checkbox();
+
+
+}
+
+function getTrackingLogs () {
+  var ret = "";
+  for (var i = 0; i < trackingMatrix.length; i++) {
+    ret += "\n" + trackingMatrix[i][0] + "," + trackingMatrix[i][1] + "," + trackingMatrix[i][2];
+    if (trackingMatrix[i][2] === 1) {
+      ret += ',"' + trackingMatrix[i][3] + '"';
+    }
+  }
+  return ret;
+}
+
+// Tracking mouse movements
+var trackingMatrix = [];
+
+function adCoords(e, code){
+  var x = e.pageX; 
+  var y = e.pageY;
+  if (code === 1) {
+    return [x, y, code, e.target.classList['value']];
+  } else {
+    return [x, y, code];
+  }
+}
+
+$( document ).ready(function() {
+
+  if (inIframe()) {
+    orderIcons();
+  }
+
+});
+
+function orderIcons() {
+  $('.ui.one.column.doubling.stackable.grid.container').css('display', 'none');
+  $('.only_in_frame').css('display', 'block');
+  
+}
+
+
+function inIframe () {
+  try {
+    return window.self !== window.top;
+  } catch (e) {
+    return true;
+  }
+}

ivprogh/js/jquery-3.3.1.min.js → public/ivprogh/js/jquery-3.3.1.min.js


ivprogh/js/jquery-ui.js → public/ivprogh/js/jquery-ui.js


ivprogh/js/jquery.json-editor.min.js → public/ivprogh/js/jquery.json-editor.min.js


ivprogh/js/semantic/.versions → public/ivprogh/js/semantic/.versions


ivprogh/js/semantic/LICENSE → public/ivprogh/js/semantic/LICENSE


ivprogh/js/semantic/README.md → public/ivprogh/js/semantic/README.md


ivprogh/js/semantic/components/accordion.css → public/ivprogh/js/semantic/components/accordion.css


ivprogh/js/semantic/components/accordion.js → public/ivprogh/js/semantic/components/accordion.js


ivprogh/js/semantic/components/accordion.min.css → public/ivprogh/js/semantic/components/accordion.min.css


ivprogh/js/semantic/components/accordion.min.js → public/ivprogh/js/semantic/components/accordion.min.js


ivprogh/js/semantic/components/ad.css → public/ivprogh/js/semantic/components/ad.css


ivprogh/js/semantic/components/ad.min.css → public/ivprogh/js/semantic/components/ad.min.css


ivprogh/js/semantic/components/api.js → public/ivprogh/js/semantic/components/api.js


ivprogh/js/semantic/components/api.min.js → public/ivprogh/js/semantic/components/api.min.js


ivprogh/js/semantic/components/breadcrumb.css → public/ivprogh/js/semantic/components/breadcrumb.css


ivprogh/js/semantic/components/breadcrumb.min.css → public/ivprogh/js/semantic/components/breadcrumb.min.css


ivprogh/js/semantic/components/button.css → public/ivprogh/js/semantic/components/button.css


ivprogh/js/semantic/components/button.min.css → public/ivprogh/js/semantic/components/button.min.css


ivprogh/js/semantic/components/card.css → public/ivprogh/js/semantic/components/card.css


ivprogh/js/semantic/components/card.min.css → public/ivprogh/js/semantic/components/card.min.css


ivprogh/js/semantic/components/checkbox.css → public/ivprogh/js/semantic/components/checkbox.css


ivprogh/js/semantic/components/checkbox.js → public/ivprogh/js/semantic/components/checkbox.js


ivprogh/js/semantic/components/checkbox.min.css → public/ivprogh/js/semantic/components/checkbox.min.css


ivprogh/js/semantic/components/checkbox.min.js → public/ivprogh/js/semantic/components/checkbox.min.js


ivprogh/js/semantic/components/colorize.js → public/ivprogh/js/semantic/components/colorize.js


ivprogh/js/semantic/components/colorize.min.js → public/ivprogh/js/semantic/components/colorize.min.js


ivprogh/js/semantic/components/comment.css → public/ivprogh/js/semantic/components/comment.css


ivprogh/js/semantic/components/comment.min.css → public/ivprogh/js/semantic/components/comment.min.css


ivprogh/js/semantic/components/container.css → public/ivprogh/js/semantic/components/container.css


ivprogh/js/semantic/components/container.min.css → public/ivprogh/js/semantic/components/container.min.css


ivprogh/js/semantic/components/dimmer.css → public/ivprogh/js/semantic/components/dimmer.css


ivprogh/js/semantic/components/dimmer.js → public/ivprogh/js/semantic/components/dimmer.js


ivprogh/js/semantic/components/dimmer.min.css → public/ivprogh/js/semantic/components/dimmer.min.css


ivprogh/js/semantic/components/dimmer.min.js → public/ivprogh/js/semantic/components/dimmer.min.js


ivprogh/js/semantic/components/divider.css → public/ivprogh/js/semantic/components/divider.css


ivprogh/js/semantic/components/divider.min.css → public/ivprogh/js/semantic/components/divider.min.css


ivprogh/js/semantic/components/dropdown.css → public/ivprogh/js/semantic/components/dropdown.css


ivprogh/js/semantic/components/dropdown.js → public/ivprogh/js/semantic/components/dropdown.js


ivprogh/js/semantic/components/dropdown.min.css → public/ivprogh/js/semantic/components/dropdown.min.css


ivprogh/js/semantic/components/dropdown.min.js → public/ivprogh/js/semantic/components/dropdown.min.js


ivprogh/js/semantic/components/embed.css → public/ivprogh/js/semantic/components/embed.css


ivprogh/js/semantic/components/embed.js → public/ivprogh/js/semantic/components/embed.js


ivprogh/js/semantic/components/embed.min.css → public/ivprogh/js/semantic/components/embed.min.css


ivprogh/js/semantic/components/embed.min.js → public/ivprogh/js/semantic/components/embed.min.js


ivprogh/js/semantic/components/feed.css → public/ivprogh/js/semantic/components/feed.css


ivprogh/js/semantic/components/feed.min.css → public/ivprogh/js/semantic/components/feed.min.css


ivprogh/js/semantic/components/flag.css → public/ivprogh/js/semantic/components/flag.css


ivprogh/js/semantic/components/flag.min.css → public/ivprogh/js/semantic/components/flag.min.css


ivprogh/js/semantic/components/form.css → public/ivprogh/js/semantic/components/form.css


ivprogh/js/semantic/components/form.js → public/ivprogh/js/semantic/components/form.js


ivprogh/js/semantic/components/form.min.css → public/ivprogh/js/semantic/components/form.min.css


ivprogh/js/semantic/components/form.min.js → public/ivprogh/js/semantic/components/form.min.js


ivprogh/js/semantic/components/grid.css → public/ivprogh/js/semantic/components/grid.css


ivprogh/js/semantic/components/grid.min.css → public/ivprogh/js/semantic/components/grid.min.css


ivprogh/js/semantic/components/header.css → public/ivprogh/js/semantic/components/header.css


ivprogh/js/semantic/components/header.min.css → public/ivprogh/js/semantic/components/header.min.css


ivprogh/js/semantic/components/icon.css → public/ivprogh/js/semantic/components/icon.css


ivprogh/js/semantic/components/icon.min.css → public/ivprogh/js/semantic/components/icon.min.css


ivprogh/js/semantic/components/image.css → public/ivprogh/js/semantic/components/image.css


ivprogh/js/semantic/components/image.min.css → public/ivprogh/js/semantic/components/image.min.css


ivprogh/js/semantic/components/input.css → public/ivprogh/js/semantic/components/input.css


ivprogh/js/semantic/components/input.min.css → public/ivprogh/js/semantic/components/input.min.css


ivprogh/js/semantic/components/item.css → public/ivprogh/js/semantic/components/item.css


ivprogh/js/semantic/components/item.min.css → public/ivprogh/js/semantic/components/item.min.css


ivprogh/js/semantic/components/label.css → public/ivprogh/js/semantic/components/label.css


ivprogh/js/semantic/components/label.min.css → public/ivprogh/js/semantic/components/label.min.css


ivprogh/js/semantic/components/list.css → public/ivprogh/js/semantic/components/list.css


+ 0 - 0
ivprogh/js/semantic/components/list.min.css


Some files were not shown because too many files changed in this diff