variables.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802
  1. import $ from 'jquery';
  2. import jQuery from 'jquery';
  3. import { Types } from './types';
  4. import * as Models from './ivprog_elements';
  5. import { LocalizedStrings } from './../services/localizedStringsService';
  6. window.jQuery = jQuery;
  7. import '../semantic/semantic.min.js';
  8. var counter_new_variables = 0;
  9. export function addVariable (function_obj, function_container) {
  10. var new_var = new Models.Variable(Types.INTEGER, LocalizedStrings.getUI('new_variable') + '_' + counter_new_variables, 1);
  11. if (function_obj.variables_list == null) {
  12. function_obj.variables_list = [];
  13. }
  14. function_obj.variables_list.push(new_var);
  15. counter_new_variables ++;
  16. renderVariable(function_container, new_var, function_obj);
  17. }
  18. function updateName (variable_obj, new_name) {
  19. variable_obj.name = new_name;
  20. }
  21. function removeVariable (variable_obj, variable_container) {
  22. var function_associated = $(variable_container).data('associatedFunction');
  23. var index = function_associated.variables_list.indexOf(variable_obj);
  24. if (index > -1) {
  25. function_associated.variables_list.splice(index, 1);
  26. }
  27. $(variable_container).remove();
  28. }
  29. function updateType (variable_obj, new_type, new_dimensions = 0) {
  30. variable_obj.type = new_type;
  31. variable_obj.dimensions = new_dimensions;
  32. if (new_dimensions > 0) {
  33. variable_obj.rows = new_dimensions;
  34. variable_obj.columns = 2;
  35. }
  36. updateInitialValues(variable_obj);
  37. }
  38. function addHandlers (variable_obj, variable_container) {
  39. // Manage variable name:
  40. $( variable_container ).find( ".enable_edit_name_variable" ).on('click', function(e){
  41. enableNameUpdate(variable_obj, variable_container);
  42. });
  43. // Menu to change type:
  44. $( variable_container ).find('.ui.dropdown.variable_type').dropdown({
  45. onChange: function(value, text, $selectedItem) {
  46. if ($($selectedItem).data('dimensions')) {
  47. updateType(variable_obj, Types[$($selectedItem).data('type')], $($selectedItem).data('dimensions'));
  48. } else {
  49. updateType(variable_obj, Types[$($selectedItem).data('type')]);
  50. }
  51. renderValues(variable_obj, variable_container);
  52. }
  53. });
  54. // Remove global:
  55. $( variable_container ).find( ".remove_variable" ).on('click', function(e){
  56. removeVariable(variable_obj, variable_container);
  57. });
  58. }
  59. export function renderVariable(function_container, new_var, function_obj) {
  60. var element = '<div class="ui label variable_container">';
  61. element += '<span class="span_name_variable enable_edit_name_variable">'+new_var.name+'</span> <i class="icon small pencil alternate enable_edit_name_variable"></i>';
  62. element += '<div class="ui dropdown variable_type">';
  63. if (new_var.dimensions > 0) {
  64. element += '<div class="text">'+ LocalizedStrings.getUI('vector') + ':' + LocalizedStrings.getUI(new_var.type.toLowerCase());
  65. for (var i = 0; i < new_var.dimensions; i ++) {
  66. element += ' [ ] ';
  67. }
  68. element += '</div>';
  69. } else {
  70. element += '<div class="text">' + LocalizedStrings.getUI(new_var.type.toLowerCase()) + '</div>';
  71. }
  72. element += '<i class="dropdown icon"></i><div class="menu">';
  73. for (var tm in Types) {
  74. if (tm == Types.VOID.toUpperCase()) {
  75. continue;
  76. }
  77. element += '<div class="item ' + (new_var.type == tm.toLowerCase() ? ' selected ' : '') + '" data-type="'+tm+'" >'+LocalizedStrings.getUI(tm.toLowerCase())+'</div>';
  78. }
  79. for (var tm in Types) {
  80. if (tm == Types.VOID.toUpperCase()) {
  81. continue;
  82. }
  83. element += '<div class="item">'
  84. + '<i class="dropdown icon"></i>'
  85. + LocalizedStrings.getUI('vector')+':'+LocalizedStrings.getUI(tm.toLowerCase())
  86. + '<div class="menu">'
  87. + '<div class="item" data-text="'+ LocalizedStrings.getUI('vector')+':'+LocalizedStrings.getUI(tm.toLowerCase())+' [ ] " data-type="'+tm+'" data-dimensions="1">[ ]</div>'
  88. + '<div class="item" data-text="'+ LocalizedStrings.getUI('vector')+':'+LocalizedStrings.getUI(tm.toLowerCase())+' [ ] [ ] " data-type="'+tm+'" data-dimensions="2">[ ] [ ] </div>'
  89. + '</div>'
  90. + '</div>';
  91. }
  92. element += '</div></div> = ';
  93. element += '<div class="ui div_valor_var">'+new_var.value+'</div>';
  94. element += ' <i class="red icon times remove_variable"></i></div>';
  95. element = $(element);
  96. $(element).data('associatedFunction', function_obj);
  97. $(function_container).find('.variables_list_div').append(element);
  98. addHandlers(new_var, element);
  99. renderValues(new_var, element);
  100. }
  101. function renderValues (new_var, variable_container) {
  102. var ret = "";
  103. var j = 0;
  104. if (new_var.dimensions == 0) {
  105. if (new_var.type == Types.REAL) {
  106. ret += '<div class="created_div_valor_var"><span class="span_value_variable simple_var">'+new_var.value.toFixed(1)+'</span> <i class="icon small pencil alternate enable_edit_name_function simple_var"></i></div> ';
  107. } else {
  108. if (new_var.type == Types.BOOLEAN) {
  109. ret += '<div class="created_div_valor_var"><span class="span_value_variable boolean_simple_type">'+new_var.value+'</span> <i class="icon small pencil alternate enable_edit_name_function boolean_simple_type"></i></div> ';
  110. } else {
  111. ret += '<div class="created_div_valor_var"><span class="span_value_variable simple_var">'+new_var.value+'</span> <i class="icon small pencil alternate enable_edit_name_function simple_var"></i></div> ';
  112. }
  113. }
  114. } else {
  115. ret += '<table class="tabela_var">';
  116. if (new_var.dimensions == 1) {
  117. ret += '<tr>';
  118. if (new_var.type == Types.REAL) {
  119. for (var k = 0; k < new_var.columns; k++) {
  120. ret += '<td><span class="span_value_variable vector_var" data-index="'+k+'">'+new_var.value[k].toFixed(1)+'</span></td>';
  121. }
  122. } else {
  123. for (var k = 0; k < new_var.columns; k++) {
  124. if (new_var.type == Types.BOOLEAN) {
  125. ret += '<td><span class="span_value_variable boolean_vector_var" data-index="'+k+'">'+new_var.value[k]+'</span></td>';
  126. } else {
  127. ret += '<td><span class="span_value_variable vector_var" data-index="'+k+'">'+new_var.value[k]+'</span>'+'</td>';
  128. }
  129. }
  130. }
  131. ret += '</tr>';
  132. ret += '</table>';
  133. ret += '<div class="buttons_manage_columns"><i class="ui icon minus square outline remove_global_vector_column"></i>'
  134. + ' <i class="ui icon plus square outline add_global_vector_column"></i></div>';
  135. }
  136. if (new_var.dimensions == 2) {
  137. if (new_var.type == Types.REAL) {
  138. for (var l = 0; l < new_var.rows; l++) {
  139. ret += '<tr>';
  140. for (var k = 0; k < new_var.columns; k++) {
  141. ret += '<td><span class="span_value_variable matrix_var" data-index="'+k+'" data-row="'+l+'">'+new_var.value[l][k].toFixed(1)+'</span>'+'</td>';
  142. }
  143. ret += '</tr>';
  144. }
  145. } else {
  146. for (var l = 0; l < new_var.rows; l++) {
  147. ret += '<tr>';
  148. for (var k = 0; k < new_var.columns; k++) {
  149. if (new_var.type == Types.BOOLEAN) {
  150. ret += '<td><span class="span_value_variable boolean_matrix_var" data-index="'+k+'" data-row="'+l+'">'+new_var.value[l][k]+'</span></td>';
  151. } else {
  152. ret += '<td><span class="span_value_variable matrix_var" data-index="'+k+'" data-row="'+l+'">'+new_var.value[l][k]+'</span></td>';
  153. }
  154. }
  155. ret += '</tr>';
  156. }
  157. }
  158. if (new_var.rows == 0) {
  159. ret += '<tr><td></td></tr>';
  160. }
  161. ret += '<tr><td colspan="'+new_var.columns+'" class="tr_manage_lines"><i class="ui icon minus square outline remove_global_matrix_line"></i>'
  162. + ' <i class="ui icon plus square outline add_global_matrix_line"></i></td></tr>';
  163. ret += '</table>';
  164. ret += '<div class="buttons_manage_columns"><i class="ui icon minus square outline remove_global_matrix_column"></i>'
  165. + ' <i class="ui icon plus square outline add_global_matrix_column"></i></div>';
  166. }
  167. }
  168. $( variable_container ).find( ".div_valor_var" ).html('');
  169. ret = $(ret);
  170. $(ret).find('.span_value_variable').data('associatedOject', new_var);
  171. $( ret ).find( ".boolean_simple_type" ).on('click', function(e){
  172. alternateBooleanValue(new_var, this.parentNode);
  173. });
  174. $( ret ).find( ".simple_var" ).on('click', function(e){
  175. enableValueUpdate(new_var, this.parentNode);
  176. });
  177. $( ret ).find( ".boolean_vector_var" ).on('click', function(e){
  178. alternateBooleanVectorValue(new_var, $(this).data('index'), this.parentNode);
  179. });
  180. $( ret ).find( ".vector_var" ).on('click', function(e){
  181. enableVectorValueUpdate(new_var, $(this).data('index'), this.parentNode);
  182. });
  183. $( ret ).find( ".remove_global_vector_column" ).on('click', function(e){
  184. removeColumnVector(new_var);
  185. $( variable_container ).find( ".div_valor_var" ).html('');
  186. renderValues(new_var, variable_container);
  187. });
  188. $( ret ).find( ".add_global_vector_column" ).on('click', function(e){
  189. addColumnVector(new_var);
  190. $( variable_container ).find( ".div_valor_var" ).html('');
  191. renderValues(new_var, variable_container);
  192. });
  193. $( ret ).find( ".remove_global_matrix_column" ).on('click', function(e){
  194. removeColumnMatrix(new_var);
  195. $( variable_container ).find( ".div_valor_var" ).html('');
  196. renderValues(new_var, variable_container);
  197. });
  198. $( ret ).find( ".add_global_matrix_column" ).on('click', function(e){
  199. addColumnMatrix(new_var);
  200. $( variable_container ).find( ".div_valor_var" ).html('');
  201. renderValues(new_var, variable_container);
  202. });
  203. $( ret ).find( ".remove_global_matrix_line" ).on('click', function(e){
  204. removeLineMatrix(new_var);
  205. $( variable_container ).find( ".div_valor_var" ).html('');
  206. renderValues(new_var, variable_container);
  207. });
  208. $( ret ).find( ".add_global_matrix_line" ).on('click', function(e){
  209. addLineMatrix(new_var);
  210. $( variable_container ).find( ".div_valor_var" ).html('');
  211. renderValues(new_var, variable_container);
  212. });
  213. $( ret ).find( ".boolean_matrix_var" ).on('click', function(e){
  214. alternateBooleanMatrixValue(new_var, $(this).data('row'), $(this).data('index'), this.parentNode);
  215. });
  216. $( ret ).find( ".matrix_var" ).on('click', function(e){
  217. enableMatrixValueUpdate(new_var, $(this).data('row'), $(this).data('index'), this.parentNode);
  218. });
  219. $( variable_container ).find( ".div_valor_var" ).append(ret);
  220. }
  221. function alternateBooleanMatrixValue (var_obj, row, index, value_container) {
  222. var_obj.value[row][index] = !var_obj.value[row][index];
  223. $(value_container).find('.span_value_variable').text(var_obj.value[row][index]);
  224. }
  225. function addLineMatrix (var_obj) {
  226. var_obj.rows ++;
  227. if (var_obj.type == Types.INTEGER) {
  228. var n_l = [];
  229. for (var i = 0; i < var_obj.columns; i++) {
  230. n_l.push(1);
  231. }
  232. var_obj.value.push(n_l);
  233. }
  234. if (var_obj.type == Types.REAL) {
  235. var n_l = [];
  236. for (i = 0; i < var_obj.columns; i++) {
  237. n_l.push(1.0);
  238. }
  239. var_obj.value.push(n_l);
  240. }
  241. if (var_obj.type == Types.TEXT) {
  242. var n_l = [];
  243. for (i = 0; i < var_obj.columns; i++) {
  244. n_l.push(LocalizedStrings.getUI('text_start'));
  245. }
  246. var_obj.value.push(n_l);
  247. }
  248. if (var_obj.type == Types.BOOLEAN) {
  249. var n_l = [];
  250. for (i = 0; i < var_obj.columns; i++) {
  251. n_l.push(true);
  252. }
  253. var_obj.value.push(n_l);
  254. }
  255. }
  256. function removeLineMatrix (var_obj) {
  257. if (var_obj.rows == 0) {
  258. return;
  259. }
  260. var_obj.rows --;
  261. var_obj.value.splice(var_obj.value.length - 1, 1);
  262. }
  263. function addColumnMatrix (var_obj) {
  264. var_obj.columns ++;
  265. if (var_obj.type == Types.INTEGER) {
  266. for (var i = 0; i < var_obj.rows; i++) {
  267. var_obj.value[i].push(1);
  268. }
  269. }
  270. if (var_obj.type == Types.REAL) {
  271. for (var i = 0; i < var_obj.rows; i++) {
  272. var_obj.value[i].push(1.0);
  273. }
  274. }
  275. if (var_obj.type == Types.TEXT) {
  276. for (var i = 0; i < var_obj.rows; i++) {
  277. var_obj.value[i].push(LocalizedStrings.getUI('text_start'));
  278. }
  279. }
  280. if (var_obj.type == Types.BOOLEAN) {
  281. for (var i = 0; i < var_obj.rows; i++) {
  282. var_obj.value[i].push(true);
  283. }
  284. }
  285. }
  286. function removeColumnMatrix (var_obj) {
  287. if (var_obj.columns == 0) {
  288. return;
  289. }
  290. var_obj.columns --;
  291. for (var i = 0; i < var_obj.rows; i++) {
  292. var_obj.value[i].splice(var_obj.value[i].length - 1, 1);
  293. }
  294. }
  295. function addColumnVector (var_obj) {
  296. var_obj.columns ++;
  297. if (var_obj.type == Types.INTEGER) {
  298. var_obj.value.push(1);
  299. }
  300. if (var_obj.type == Types.REAL) {
  301. var_obj.value.push(1.0);
  302. }
  303. if (var_obj.type == Types.TEXT) {
  304. var_obj.value.push(LocalizedStrings.getUI('text_start'));
  305. }
  306. if (var_obj.type == Types.BOOLEAN) {
  307. var_obj.value.push(true);
  308. }
  309. }
  310. function removeColumnVector (var_obj) {
  311. if (var_obj.columns == 0) {
  312. return;
  313. }
  314. var_obj.columns --;
  315. var_obj.value.splice(var_obj.value.length - 1, 1);
  316. }
  317. function alternateBooleanValue (var_obj, value_container) {
  318. var_obj.value = !var_obj.value;
  319. $(value_container).find('.span_value_variable').text(var_obj.value);
  320. }
  321. function alternateBooleanVectorValue (var_obj, index, value_container) {
  322. var_obj.value[index] = !var_obj.value[index];
  323. $(value_container).find('.span_value_variable').text(var_obj.value[index]);
  324. }
  325. function updateInitialValues (variable_obj) {
  326. if (variable_obj.type == Types.INTEGER) {
  327. if (variable_obj.dimensions == 0) {
  328. variable_obj.value = 1;
  329. }
  330. if (variable_obj.dimensions == 1) {
  331. variable_obj.value = [1, 1];
  332. }
  333. if (variable_obj.dimensions == 2) {
  334. variable_obj.value = [[1, 1], [1, 1]];
  335. }
  336. }
  337. if (variable_obj.type == Types.REAL) {
  338. if (variable_obj.dimensions == 0) {
  339. variable_obj.value = 1.0;
  340. }
  341. if (variable_obj.dimensions == 1) {
  342. variable_obj.value = [1.0, 1.0];
  343. }
  344. if (variable_obj.dimensions == 2) {
  345. variable_obj.value = [[1.0, 1.0], [1.0, 1.0]];
  346. }
  347. }
  348. if (variable_obj.type == Types.TEXT) {
  349. if (variable_obj.dimensions == 0) {
  350. variable_obj.value = LocalizedStrings.getUI('text_start');
  351. }
  352. if (variable_obj.dimensions == 1) {
  353. variable_obj.value = [LocalizedStrings.getUI('text_start'), LocalizedStrings.getUI('text_start')];
  354. }
  355. if (variable_obj.dimensions == 2) {
  356. variable_obj.value = [[LocalizedStrings.getUI('text_start'), LocalizedStrings.getUI('text_start')],
  357. [LocalizedStrings.getUI('text_start'), LocalizedStrings.getUI('text_start')]];
  358. }
  359. }
  360. if (variable_obj.type == Types.BOOLEAN) {
  361. if (variable_obj.dimensions == 0) {
  362. variable_obj.value = true;
  363. }
  364. if (variable_obj.dimensions == 1) {
  365. variable_obj.value = [true, true];
  366. }
  367. if (variable_obj.dimensions == 2) {
  368. variable_obj.value = [[true, true], [true, true]];
  369. }
  370. }
  371. }
  372. var opened_name_value_vector_global_ = false;
  373. var opened_input_value_vector_global_ = null;
  374. function enableVectorValueUpdate (var_obj, index, parent_node) {
  375. if (opened_name_value_vector_global_) {
  376. $(opened_input_value_vector_global_).focus();
  377. return;
  378. }
  379. opened_name_value_vector_global_ = true;
  380. $(parent_node).find('.span_value_variable').text('');
  381. if (var_obj.type == Types.REAL) {
  382. $( "<input type='text' class='width-dynamic input_name_function' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' value='"
  383. + var_obj.value[index].toFixed(1) + "' />" ).insertBefore($(parent_node).find('.span_value_variable'));
  384. } else {
  385. $( "<input type='text' class='width-dynamic input_name_function' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' value='"
  386. + var_obj.value[index] + "' />" ).insertBefore($(parent_node).find('.span_value_variable'));
  387. }
  388. $('.width-dynamic').on('input', function() {
  389. var inputWidth = $(this).textWidth()+10;
  390. opened_input_value_vector_global_ = this;
  391. $(this).focus();
  392. var tmpStr = $(this).val();
  393. $(this).val('');
  394. $(this).val(tmpStr);
  395. $(this).css({
  396. width: inputWidth
  397. })
  398. }).trigger('input');
  399. $('.width-dynamic').focusout(function() {
  400. /// update array:
  401. if ($(this).val().trim()) {
  402. if (var_obj.type == Types.REAL) {
  403. var_obj.value[index] = parseFloat($(this).val().trim());
  404. $(parent_node).find('.span_value_variable').text(var_obj.value[index].toFixed(1));
  405. } else {
  406. if (var_obj.type == Types.INTEGER) {
  407. var_obj.value[index] = parseInt($(this).val().trim());
  408. } else {
  409. var_obj.value[index] = $(this).val().trim();
  410. }
  411. $(parent_node).find('.span_value_variable').text(var_obj.value[index]);
  412. }
  413. }
  414. $(this).remove();
  415. /// update elements:
  416. opened_name_value_vector_global_ = false;
  417. opened_input_value_vector_global_ = false;
  418. });
  419. $('.width-dynamic').on('keydown', function(e) {
  420. var code = e.keyCode || e.which;
  421. if(code == 13) {
  422. if ($(this).val().trim()) {
  423. if (var_obj.type == Types.REAL) {
  424. var_obj.value[index] = parseFloat($(this).val().trim());
  425. $(parent_node).find('.span_value_variable').text(var_obj.value[index].toFixed(1));
  426. } else {
  427. if (var_obj.type == Types.INTEGER) {
  428. var_obj.value[index] = parseInt($(this).val().trim());
  429. } else {
  430. var_obj.value[index] = $(this).val().trim();
  431. }
  432. $(parent_node).find('.span_value_variable').text(var_obj.value[index]);
  433. }
  434. }
  435. $(this).remove();
  436. /// update elements:
  437. opened_name_value_vector_global_ = false;
  438. opened_input_value_vector_global_ = false;
  439. }
  440. if(code == 27) {
  441. if (global_var.type == Types.REAL) {
  442. $(parent_node).find('.span_value_variable').text(var_obj.value[index].toFixed(1));
  443. } else {
  444. $(parent_node).find('.span_value_variable').text(var_obj.value[index]);
  445. }
  446. $(this).remove();
  447. /// update elements:
  448. opened_name_value_vector_global_ = false;
  449. opened_input_value_vector_global_ = false;
  450. }
  451. });
  452. }
  453. var opened_name_value_global_var = false;
  454. var opened_input_value_global_ar = null;
  455. function enableValueUpdate (var_obj, parent_node) {
  456. if (opened_name_value_global_var) {
  457. $(opened_input_value_global_ar).focus();
  458. return;
  459. }
  460. opened_name_value_global_var = true;
  461. $(parent_node).find('.span_value_variable').text('');
  462. if (var_obj.type == Types.REAL) {
  463. $( "<input type='text' class='width-dynamic input_name_function' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' value='"
  464. + var_obj.value.toFixed(1) + "' />" ).insertBefore($(parent_node).find('.span_value_variable'));
  465. } else {
  466. $( "<input type='text' class='width-dynamic input_name_function' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' value='"
  467. + var_obj.value + "' />" ).insertBefore($(parent_node).find('.span_value_variable'));
  468. }
  469. $('.width-dynamic').on('input', function() {
  470. var inputWidth = $(this).textWidth()+10;
  471. opened_input_value_global_ar = this;
  472. $(this).focus();
  473. var tmpStr = $(this).val();
  474. $(this).val('');
  475. $(this).val(tmpStr);
  476. $(this).css({
  477. width: inputWidth
  478. })
  479. }).trigger('input');
  480. $('.width-dynamic').focusout(function() {
  481. /// update array:
  482. if ($(this).val().trim()) {
  483. if (var_obj.type == Types.REAL) {
  484. var_obj.value = parseFloat($(this).val().trim());
  485. $(parent_node).find('.span_value_variable').text(var_obj.value.toFixed(1));
  486. } else{
  487. if (var_obj.type == Types.INTEGER) {
  488. var_obj.value = parseInt($(this).val().trim());
  489. } else {
  490. var_obj.value = $(this).val().trim();
  491. }
  492. $(parent_node).find('.span_value_variable').text(var_obj.value);
  493. }
  494. }
  495. $(this).remove();
  496. /// update elements:
  497. opened_name_value_global_var = false;
  498. opened_input_value_global_ar = false;
  499. });
  500. $('.width-dynamic').on('keydown', function(e) {
  501. var code = e.keyCode || e.which;
  502. if(code == 13) {
  503. if ($(this).val().trim()) {
  504. if (var_obj.type == Types.REAL) {
  505. var_obj.value = parseFloat($(this).val().trim());
  506. $(parent_node).find('.span_value_variable').text(var_obj.value.toFixed(1));
  507. } else{
  508. if (var_obj.type == Types.INTEGER) {
  509. var_obj.value = parseInt($(this).val().trim());
  510. } else {
  511. var_obj.value = $(this).val().trim();
  512. }
  513. $(parent_node).find('.span_value_variable').text(var_obj.value);
  514. }
  515. }
  516. $(this).remove();
  517. /// update elements:
  518. opened_name_value_global_var = false;
  519. opened_input_value_global_ar = false;
  520. }
  521. if(code == 27) {
  522. if (var_obj.type == Types.REAL) {
  523. $(parent_node).find('.span_value_variable').text(var_obj.value.toFixed(1));
  524. } else{
  525. $(parent_node).find('.span_value_variable').text(var_obj.value);
  526. }
  527. $(this).remove();
  528. /// update elements:
  529. opened_name_value_global_var = false;
  530. opened_input_value_global_ar = false;
  531. }
  532. });
  533. }
  534. var opened_name_global = false;
  535. var opened_input_global = null;
  536. function enableNameUpdate (variable_obj, variable_container) {
  537. if (opened_name_global) {
  538. $(opened_input_global).focus();
  539. return;
  540. }
  541. opened_name_global = true;
  542. $( variable_container ).find('.span_name_variable').text('');
  543. $( "<input type='text' class='width-dynamic input_name_function' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' value='"+variable_obj.name+"' />" ).insertBefore($(variable_container).find('.span_name_variable'));
  544. $('.width-dynamic').on('input', function() {
  545. var inputWidth = $(this).textWidth()+10;
  546. opened_input_global = this;
  547. $(this).focus();
  548. var tmpStr = $(this).val();
  549. $(this).val('');
  550. $(this).val(tmpStr);
  551. $(this).css({
  552. width: inputWidth
  553. })
  554. }).trigger('input');
  555. $('.width-dynamic').focusout(function() {
  556. /// update array:
  557. if ($(this).val().trim()) {
  558. updateName(variable_obj, $(this).val().trim());
  559. $(variable_container).find('.span_name_variable').text(variable_obj.name);
  560. }
  561. $(this).remove();
  562. /// update elements:
  563. opened_name_global = false;
  564. opened_input_global = false;
  565. });
  566. $('.width-dynamic').on('keydown', function(e) {
  567. var code = e.keyCode || e.which;
  568. if(code == 13) {
  569. if ($(this).val().trim()) {
  570. updateName(variable_obj, $(this).val().trim());
  571. $(variable_container).find('.span_name_variable').text(variable_obj.name);
  572. }
  573. $(this).remove();
  574. /// update elements:
  575. opened_name_global = false;
  576. opened_input_global = false;
  577. }
  578. if(code == 27) {
  579. $(variable_container).find('.span_name_variable').text(variable_obj.name);
  580. $(this).remove();
  581. /// update elements:
  582. opened_name_global = false;
  583. opened_input_global = false;
  584. }
  585. });
  586. }
  587. var opened_name_value_matrix_global_v = false;
  588. var opened_input_value_matrix_global_v = null;
  589. function enableMatrixValueUpdate (var_obj, row, index, parent_node) {
  590. if (opened_name_value_matrix_global_v) {
  591. $(opened_input_value_matrix_global_v).focus();
  592. return;
  593. }
  594. opened_name_value_matrix_global_v = true;
  595. $(parent_node).find('.span_value_variable').text('');
  596. if (var_obj.type == Types.REAL) {
  597. $( "<input type='text' class='width-dynamic input_name_function' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' value='"
  598. + var_obj.value[row][index].toFixed(1) + "' />" ).insertBefore($(parent_node).find('.span_value_variable'));
  599. } else {
  600. $( "<input type='text' class='width-dynamic input_name_function' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' value='"
  601. + var_obj.value[row][index] + "' />" ).insertBefore($(parent_node).find('.span_value_variable'));
  602. }
  603. $('.width-dynamic').on('input', function() {
  604. var inputWidth = $(this).textWidth()+10;
  605. opened_input_value_matrix_global_v = this;
  606. $(this).focus();
  607. var tmpStr = $(this).val();
  608. $(this).val('');
  609. $(this).val(tmpStr);
  610. $(this).css({
  611. width: inputWidth
  612. })
  613. }).trigger('input');
  614. $('.width-dynamic').focusout(function() {
  615. /// update array:
  616. if ($(this).val().trim()) {
  617. if (var_obj.type == Types.REAL) {
  618. var_obj.value[row][index] = parseFloat($(this).val().trim());
  619. $(parent_node).find('.span_value_variable').text(var_obj.value[row][index].toFixed(1));
  620. } else {
  621. if (var_obj.type == Types.INTEGER) {
  622. var_obj.value[row][index] = parseInt($(this).val().trim());
  623. } else {
  624. var_obj.value[row][index] = $(this).val().trim();
  625. }
  626. $(parent_node).find('.span_value_variable').text(var_obj.value[row][index]);
  627. }
  628. }
  629. $(this).remove();
  630. /// update elements:
  631. opened_name_value_matrix_global_v = false;
  632. opened_input_value_matrix_global_v = false;
  633. });
  634. $('.width-dynamic').on('keydown', function(e) {
  635. var code = e.keyCode || e.which;
  636. if(code == 13) {
  637. if ($(this).val().trim()) {
  638. if (var_obj.type == Types.REAL) {
  639. var_obj.value[row][index] = parseFloat($(this).val().trim());
  640. $(parent_node).find('.span_value_variable').text(var_obj.value[row][index].toFixed(1));
  641. } else {
  642. if (var_obj.type == Types.INTEGER) {
  643. var_obj.value[row][index] = parseInt($(this).val().trim());
  644. } else {
  645. var_obj.value[row][index] = $(this).val().trim();
  646. }
  647. $(parent_node).find('.span_value_variable').text(var_obj.value[row][index]);
  648. }
  649. }
  650. $(this).remove();
  651. /// update elements:
  652. opened_name_value_matrix_global_v = false;
  653. opened_input_value_matrix_global_v = false;
  654. }
  655. if(code == 27) {
  656. if (var_obj.type == Types.REAL) {
  657. $(parent_node).find('.span_value_variable').text(var_obj.value[row][index].toFixed(1));
  658. } else {
  659. $(parent_node).find('.span_value_variable').text(var_obj.value[row][index]);
  660. }
  661. $(this).remove();
  662. /// update elements:
  663. opened_name_value_matrix_global_v = false;
  664. opened_input_value_matrix_global_v = false;
  665. }
  666. });
  667. }