Skip to content

Commit 76a275a

Browse files
author
minjk-bl
committed
Edit InstanceEditor to support modules
1 parent c144e3c commit 76a275a

File tree

2 files changed

+129
-53
lines changed

2 files changed

+129
-53
lines changed

visualpython/js/com/component/InstanceEditor.js

Lines changed: 122 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ define([
304304
return;
305305
}
306306
this.state.code = variable;
307+
var prevVarType = that.state.type;
307308

308309
if (variable == '') {
309310
if (!this.isFirstPage) {
@@ -338,7 +339,10 @@ define([
338339

339340
var varType = varObj.type;
340341
var varList = varObj.list;
341-
var prevVarType = that.state.type;
342+
if (varType == 'module') {
343+
// get module name
344+
varType = varObj.name;
345+
}
342346

343347
that.state.type = varType;
344348
that.state.list = varList;
@@ -431,45 +435,49 @@ define([
431435

432436
// get parameter
433437
var splitList = variable.split('.');
434-
var hasOption = false;
438+
// var hasOption = false;
435439

436440
if (splitList && splitList.length > 0) {
437441
var lastSplit = splitList[splitList.length - 1];
438-
// get target code
439-
var methodName = lastSplit.match(/[a-zA-Z_]+/i)[0];
440-
var targetCode = splitList.slice(0, splitList.length - 1).join('.');
441-
if ((prevVarType in instanceLibrary.INSTANCE_MATCHING_LIBRARY) && (methodName in instanceLibrary.INSTANCE_MATCHING_LIBRARY[prevVarType])) {
442-
// get target library
443-
var targetLib = instanceLibrary.INSTANCE_MATCHING_LIBRARY[prevVarType][methodName];
444-
var targetId = targetLib.target;
445-
that.optionPopup = new LibraryComponent({
446-
[targetId]: targetCode,
447-
config: {
448-
name: methodName, category: 'Instance',
449-
id: targetLib.id,
450-
saveOnly: true,
451-
noOutput: true
452-
}
453-
},
454-
{
455-
pageThis: that,
456-
useInputVariable: true,
457-
targetSelector: that.pageThis.wrapSelector('#' + that.targetId),
458-
459-
finish: function(code) {
460-
// TODO: save state
461-
462-
$(that.pageThis.wrapSelector('#' + that.targetId)).trigger({
463-
type: "instance_editor_replaced",
464-
originCode: that.state.code,
465-
newCode: code
466-
});
467-
}
468-
});
469-
hasOption = true;
470-
} else {
471-
that.optionPopup = null;
472-
}
442+
// // get target code
443+
// var methodName = lastSplit.match(/[a-zA-Z_]+/i)[0];
444+
// var targetCode = splitList.slice(0, splitList.length - 1).join('.');
445+
// if ((prevVarType in instanceLibrary.INSTANCE_MATCHING_LIBRARY) && (methodName in instanceLibrary.INSTANCE_MATCHING_LIBRARY[prevVarType])) {
446+
// // get target library
447+
// var targetLib = instanceLibrary.INSTANCE_MATCHING_LIBRARY[prevVarType][methodName];
448+
// var targetId = targetLib.target;
449+
// var popupState = {
450+
// config: {
451+
// name: methodName, category: 'Instance',
452+
// id: targetLib.id,
453+
// saveOnly: true,
454+
// noOutput: true
455+
// }
456+
// }
457+
// // add targetid as state if exists
458+
// if (targetId) {
459+
// popupState[targetId] = targetCode;
460+
// }
461+
// that.optionPopup = new LibraryComponent(popupState,
462+
// {
463+
// pageThis: that,
464+
// useInputVariable: true,
465+
// targetSelector: that.pageThis.wrapSelector('#' + that.targetId),
466+
467+
// finish: function(code) {
468+
// // TODO: save state
469+
470+
// $(that.pageThis.wrapSelector('#' + that.targetId)).trigger({
471+
// type: "instance_editor_replaced",
472+
// originCode: that.state.code,
473+
// newCode: code
474+
// });
475+
// }
476+
// });
477+
// hasOption = true;
478+
// } else {
479+
// that.optionPopup = null;
480+
// }
473481

474482
// if bracket is at the end of code
475483
var matchList = lastSplit.match(/\(.*?\)$/gi);
@@ -479,27 +487,27 @@ define([
479487
var parameter = lastBracket.substr(1, lastBracket.length - 2);
480488
$(that.wrapSelector('.' + VP_INS_PARAMETER)).val(parameter);
481489
$(that.wrapSelector('.' + VP_INS_PARAMETER)).prop('disabled', false);
482-
if (hasOption) {
483-
if ($(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
484-
$(that.wrapSelector('.vp-ins-opt-button')).removeClass('disabled');
485-
}
486-
} else {
487-
if (!$(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
488-
$(that.wrapSelector('.vp-ins-opt-button')).addClass('disabled');
489-
}
490-
}
490+
// if (hasOption) {
491+
// if ($(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
492+
// $(that.wrapSelector('.vp-ins-opt-button')).removeClass('disabled');
493+
// }
494+
// } else {
495+
// if (!$(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
496+
// $(that.wrapSelector('.vp-ins-opt-button')).addClass('disabled');
497+
// }
498+
// }
491499
} else {
492500
$(that.wrapSelector('.' + VP_INS_PARAMETER)).val('');
493501
$(that.wrapSelector('.' + VP_INS_PARAMETER)).prop('disabled', true);
494-
if (!$(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
495-
$(that.wrapSelector('.vp-ins-opt-button')).addClass('disabled');
496-
}
502+
// if (!$(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
503+
// $(that.wrapSelector('.vp-ins-opt-button')).addClass('disabled');
504+
// }
497505
}
498506
} else {
499507
$(that.wrapSelector('.' + VP_INS_PARAMETER)).prop('disabled', true);
500-
if (!$(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
501-
$(that.wrapSelector('.vp-ins-opt-button')).addClass('disabled');
502-
}
508+
// if (!$(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
509+
// $(that.wrapSelector('.vp-ins-opt-button')).addClass('disabled');
510+
// }
503511
}
504512
}
505513

@@ -521,6 +529,68 @@ define([
521529
if (callback) {
522530
callback('');
523531
}
532+
}).finally(function() {
533+
534+
// get parameter
535+
var splitList = variable.split('.');
536+
var hasOption = false;
537+
538+
if (splitList && splitList.length > 0) {
539+
var lastSplit = splitList[splitList.length - 1];
540+
// get target code
541+
var methodName = lastSplit.match(/[a-zA-Z_]+/i)[0];
542+
var targetCode = splitList.slice(0, splitList.length - 1).join('.');
543+
if ((prevVarType in instanceLibrary.INSTANCE_MATCHING_LIBRARY) && (methodName in instanceLibrary.INSTANCE_MATCHING_LIBRARY[prevVarType])) {
544+
// get target library
545+
var targetLib = instanceLibrary.INSTANCE_MATCHING_LIBRARY[prevVarType][methodName];
546+
var targetId = targetLib.target;
547+
var popupState = {
548+
config: {
549+
name: methodName, category: 'Instance',
550+
id: targetLib.id,
551+
saveOnly: true,
552+
noOutput: true
553+
}
554+
}
555+
// add targetid as state if exists
556+
if (targetId) {
557+
popupState[targetId] = targetCode;
558+
}
559+
that.optionPopup = new LibraryComponent(popupState,
560+
{
561+
pageThis: that,
562+
useInputVariable: true,
563+
targetSelector: that.pageThis.wrapSelector('#' + that.targetId),
564+
565+
finish: function(code) {
566+
// TODO: save state
567+
568+
$(that.pageThis.wrapSelector('#' + that.targetId)).trigger({
569+
type: "instance_editor_replaced",
570+
originCode: that.state.code,
571+
newCode: code
572+
});
573+
}
574+
});
575+
hasOption = true;
576+
} else {
577+
that.optionPopup = null;
578+
}
579+
580+
if (hasOption) {
581+
if ($(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
582+
$(that.wrapSelector('.vp-ins-opt-button')).removeClass('disabled');
583+
}
584+
} else {
585+
if (!$(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
586+
$(that.wrapSelector('.vp-ins-opt-button')).addClass('disabled');
587+
}
588+
}
589+
} else {
590+
if (!$(that.wrapSelector('.vp-ins-opt-button')).hasClass('disabled')) {
591+
$(that.wrapSelector('.vp-ins-opt-button')).addClass('disabled');
592+
}
593+
}
524594
});
525595

526596

visualpython/python/variableCommand.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,14 @@ def _vp_load_instance(var=''):
2020
else:
2121
varList = dir(eval(var))
2222
query = var + '.'
23+
24+
varType = type(eval(var)).__name__
2325
# result = { 'type': type(eval(var)).__name__, 'list': [{'name': v, 'type': type(eval(var + '.' + v)).__name__} for v in _vp_vars if (not v.startswith('_')) and (v not in _VP_NOT_USING_VAR)] }
24-
result = {'type': type(eval(var)).__name__, 'list': []}
26+
if varType == 'module':
27+
varName = eval(var).__name__
28+
result = {'type': type(eval(var)).__name__, 'name': varName, 'list': []}
29+
else:
30+
result = {'type': type(eval(var)).__name__, 'list': []}
2531

2632
tmpList = []
2733
for v in varList:

0 commit comments

Comments
 (0)