Skip to content

Commit 4bd7e66

Browse files
author
minjk-bl
committed
Add file component to generator
1 parent e25dffa commit 4bd7e66

File tree

3 files changed

+104
-15
lines changed

3 files changed

+104
-15
lines changed

visualpython/data/m_library/pythonLibrary.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -877,18 +877,21 @@ define([
877877
{
878878
name: 'i0',
879879
label: 'Select File',
880-
component: ['file'],
880+
component: ['file-open'],
881881
required: true
882882
},
883883
{
884884
name: 'o0',
885-
label: 'Allocate to'
885+
label: 'Allocate to',
886+
output: true
886887
},
887888
{
888889
name: 'mode',
889890
label: 'Mode',
890891
usePair: true,
891-
component: ['option_select']
892+
component: ['option_suggest'],
893+
type: 'text',
894+
options: ['r', 'w', 'a']
892895
},
893896
{
894897
name: 'buffering',
@@ -906,7 +909,7 @@ define([
906909
placeholder: 'encoding option'
907910
},
908911
{
909-
name: 'error',
912+
name: 'errors',
910913
label: 'Errors',
911914
usePair: true,
912915
component: ['option_suggest'],

visualpython/js/com/com_generatorV2.js

Lines changed: 86 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ define([
1313
'vp_base/js/com/com_makeDom',
1414
'vp_base/js/com/component/SuggestInput',
1515
'vp_base/js/com/component/VarSelector2',
16-
'vp_base/js/com/component/DataSelector'
17-
], function (com_util, com_makeDom, SuggestInput, VarSelector2, DataSelector) {
16+
'vp_base/js/com/component/DataSelector',
17+
'vp_base/js/com/component/FileNavigation'
18+
], function (com_util, com_makeDom, SuggestInput, VarSelector2, DataSelector, FileNavigation) {
1819
/**
1920
* show result after code executed
2021
*/
@@ -41,7 +42,9 @@ define([
4142
'textarea': 'Input textarea',
4243
'input_number': 'Input number',
4344
'input_text': 'Input text',
44-
'input': 'Input value'
45+
'input': 'Input value',
46+
'file_save': 'Select file',
47+
'file_load': 'Select file'
4548
}
4649

4750
const _VP_BOOL_OPTIONS = [
@@ -434,10 +437,84 @@ define([
434437
}
435438
content = input;
436439
break;
440+
case 'file-save':
441+
var input = $('<input/>').attr({
442+
type: 'text',
443+
class: 'vp-input input-single vp-state',
444+
id: obj.name,
445+
placeholder: (obj.placeholder==undefined?'Input Data':obj.placeholder),
446+
value: (obj.default==undefined?'':obj.default),
447+
title: (obj.help==undefined?'':obj.help),
448+
required: obj.required == true
449+
});
450+
// cell metadata test
451+
if (value != undefined) {
452+
// set as saved value
453+
$(input).attr({
454+
'value': value
455+
});
456+
}
457+
var fileBrowerButton = $(`<div class="vp-file-browser-button" data-parent="${obj.name}"></div>`);
458+
var div = $('<div></div>');
459+
div.append(input);
460+
div.append(fileBrowerButton);
461+
462+
$(document).on('click', pageThis.wrapSelector(`.vp-file-browser-button[data-parent="${obj.name}"]`), function() {
463+
let fileNavi = new FileNavigation({
464+
type: 'save',
465+
extensions: (obj.fileExtension==undefined?[]:[obj.fileExtension]),
466+
finish: function(filesPath, status, error) {
467+
let {file, path} = filesPath[0];
468+
469+
// set text
470+
$(pageThis.wrapSelector('#' + obj.name)).data('file', file);
471+
$(pageThis.wrapSelector('#' + obj.name)).val(path);
472+
}
473+
});
474+
fileNavi.open();
475+
});
476+
content = div;
477+
break;
478+
case 'file-open':
479+
var input = $('<input/>').attr({
480+
type: 'text',
481+
class: 'vp-input input-single vp-state',
482+
id: obj.name,
483+
placeholder: (obj.placeholder==undefined?'Input Data':obj.placeholder),
484+
value: (obj.default==undefined?'':obj.default),
485+
title: (obj.help==undefined?'':obj.help),
486+
required: obj.required == true
487+
});
488+
// cell metadata test
489+
if (value != undefined) {
490+
// set as saved value
491+
$(input).attr({
492+
'value': value
493+
});
494+
}
495+
var fileBrowerButton = $(`<div class="vp-file-browser-button" data-parent="${obj.name}"></div>`);
496+
var div = $('<div></div>');
497+
div.append(input);
498+
div.append(fileBrowerButton);
499+
500+
$(document).on('click', pageThis.wrapSelector(`.vp-file-browser-button[data-parent="${obj.name}"]`), function() {
501+
let fileNavi = new FileNavigation({
502+
type: 'open',
503+
extensions: (obj.fileExtension==undefined?[]:[obj.fileExtension]),
504+
finish: function(filesPath, status, error) {
505+
let {file, path} = filesPath[0];
506+
507+
// set text
508+
$(pageThis.wrapSelector('#' + obj.name)).data('file', file);
509+
$(pageThis.wrapSelector('#' + obj.name)).val(path);
510+
}
511+
});
512+
fileNavi.open();
513+
});
514+
content = div;
515+
break;
437516
case 'table':
438517
// break;
439-
case 'file':
440-
// break;
441518
// default : input_single
442519
default:
443520
var input = $('<input/>').attr({
@@ -618,8 +695,9 @@ define([
618695
case 'dtype':
619696
value = $(pageThis.wrapSelector(parent + ' #'+obj.name)).val();
620697
break;
698+
case 'file-open':
699+
case 'file-save':
621700
case 'table':
622-
case 'file':
623701
case 'option_select':
624702
case 'option_suggest':
625703
case 'input_number':
@@ -659,7 +737,8 @@ define([
659737
code = code.split(id).join('');
660738
} else {
661739
// text quotation
662-
if (v.type == 'text') {
740+
if (v.type == 'text'
741+
|| (v.component != undefined && (v.component.includes('file-open') || v.component.includes('file-save')))) {
663742
val = "'"+val+"'";
664743
}
665744
// code completion

visualpython/js/com/component/FileNavigation.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ define([
250250
let extension = name.substring(name.lastIndexOf('.') + 1);
251251
let allowExtensionList = that.state.extensions;
252252
// if it is not allowed extension
253-
if (!allowExtensionList.includes(extension)) {
253+
if (allowExtensionList.length > 0 && !allowExtensionList.includes(extension)) {
254254
// TODO: alert
255255
//vpCommon.renderAlertModal('Not supported file type');
256256
return;
@@ -404,9 +404,13 @@ define([
404404
page.appendFormatLine('<input id="{0}" type="text" class="vp-input" placeholder="{1}" value="{2}"/>'
405405
, 'vp_fileNavigationInput', 'New File Name', this.state.fileName);
406406
page.appendFormatLine('<select id="{0}" class="vp-select">', 'vp_fileNavigationExt');
407-
this.state.extensions.forEach(ext => {
408-
page.appendFormatLine('<option value="{0}">{1}</option>', ext, ext);
409-
});
407+
if (this.state.extensions && this.state.extensions.length > 0) {
408+
this.state.extensions.forEach(ext => {
409+
page.appendFormatLine('<option value="{0}">*.{1}</option>', ext, ext);
410+
});
411+
} else {
412+
page.appendLine('<option value="">All files(*.*)</option>');
413+
}
410414
page.appendLine('</select>');
411415
page.appendFormatLine('<button class="{0} vp-button" data-menu="{1}">{2}</button>', 'vp-filenavi-btn', 'select', 'Select');
412416
$('.fileNavigationPage-button').html(page.toString());
@@ -426,6 +430,9 @@ define([
426430
// select file
427431
let { fileName, filePath } = that.state;
428432
let selectedExt = $(that.wrapSelector('#vp_fileNavigationExt')).val();
433+
if (selectedExt == undefined || selectedExt == null) {
434+
selectedExt = '';
435+
}
429436
let fileExtIdx = fileName.lastIndexOf('.');
430437
// if no extension, add it
431438
if (selectedExt != '' && (fileExtIdx < 0 || fileName.substring(fileExtIdx + 1) != selectedExt)) {

0 commit comments

Comments
 (0)