Skip to content

Commit 0e8a242

Browse files
author
minjk-bl
committed
Apps > Groupby prototype & CreateApsBtn module
1 parent f185377 commit 0e8a242

File tree

9 files changed

+626
-63
lines changed

9 files changed

+626
-63
lines changed

css/api_block/index.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@
141141
.vp-apiblock-menu-apps-item.line3 {
142142
background: #EB773C;
143143
}
144+
.vp-apiblock-menu-apps-item.line4 {
145+
background: #E56139;
146+
}
144147
.vp-apiblock-menu-apps-item.preparing {
145148
background: var(--gray-color);
146149
}

resource/apps/apps_profiling.svg

Lines changed: 7 additions & 0 deletions
Loading

resource/apps/apps_pymupdf.svg

Lines changed: 7 additions & 0 deletions
Loading

src/api_block/constData.js

Lines changed: 86 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -739,46 +739,116 @@ define([
739739
// const WHILE_OPERATOR_ARG4 = ['none', '==' ,'!=', '<', '>', '>=', '<=', 'and', 'or', 'in','not in'];
740740
// const WHILE_OPERATOR_ARG6 = ['==' ,'!=', '<', '>', '>=', '<=', 'and', 'or', 'in','not in'];
741741

742+
/**
743+
* APPS menu configurations
744+
*
745+
* key: {
746+
* label: displayed name
747+
* tooltip: used as tooltip (optional; default is same as label)
748+
* file: file/module path
749+
* icon: icon path
750+
* color: 1~4 / 0 as preparing(WIP)(optional; default is 0)
751+
* config: (optional)
752+
* {
753+
* title: popup title
754+
* width: popup size width(px, %)
755+
* height: popup size height(px, %)
756+
* }
757+
* }
758+
*/
742759
const APPS_CONFIG = {
743760
'import': {
761+
label: 'Import',
744762
file: '/nbextensions/visualpython/src/file_io/import.js',
763+
icon: '/nbextensions/visualpython/resource/apps/apps_import.svg',
764+
color: 1,
745765
config: { title: 'Import', width: '500px'}
746766
},
747-
'markdown': {
748-
file: '/nbextensions/visualpython/src/markdown/markdown.js',
749-
config: { title: 'Markdown' }
767+
'file': {
768+
label: 'File',
769+
file: '/nbextensions/visualpython/src/file_io/fileio.js',
770+
icon: '/nbextensions/visualpython/resource/apps/apps_file.svg',
771+
color: 1,
772+
config: { title: 'File', width: '500px' }
773+
},
774+
'variable': {
775+
label: 'Variable',
776+
file: '/nbextensions/visualpython/src/file_io/variables.js',
777+
icon: '/nbextensions/visualpython/resource/apps/apps_variable.svg',
778+
color: 1,
779+
config: { title: 'Variables' }
750780
},
751781
'snippets': {
782+
label: 'Snippets',
752783
file: '/nbextensions/visualpython/src/file_io/udf.js',
784+
icon: '/nbextensions/visualpython/resource/apps/apps_snippets.svg',
785+
color: 1,
753786
config: { title: 'Snippets' }
754787
},
755-
'variable': {
756-
file: '/nbextensions/visualpython/src/file_io/variables.js',
757-
config: { title: 'Variables' }
788+
'frame': {
789+
label: 'Frame',
790+
file: 'nbextensions/visualpython/src/common/vpFrameEditor',
791+
icon: '/nbextensions/visualpython/resource/apps/apps_frame.svg',
792+
color: 2,
758793
},
759-
'file': {
760-
file: '/nbextensions/visualpython/src/file_io/fileio.js',
761-
config: { title: 'File', width: '500px' }
794+
'subset': {
795+
label: 'Subset',
796+
file: 'nbextensions/visualpython/src/common/vpSubsetEditor',
797+
icon: '/nbextensions/visualpython/resource/apps/apps_subset.svg',
798+
color: 2,
762799
},
763800
'instance': {
801+
label: 'Instance',
764802
file: '/nbextensions/visualpython/src/file_io/instance.js',
803+
icon: '/nbextensions/visualpython/resource/apps/apps_instance.svg',
804+
color: 2,
765805
config: { title: 'Instance', width: '500px', height: '500px' }
766806
},
767-
'subset': {
768-
file: 'nbextensions/visualpython/src/common/vpSubsetEditor',
807+
'groupby': {
808+
label: 'Groupby',
809+
file: 'nbextensions/visualpython/src/common/vpGroupby',
810+
icon: '/nbextensions/visualpython/resource/apps/apps_groupby.svg',
811+
color: 2,
769812
},
770-
'frame': {
771-
file: 'nbextensions/visualpython/src/common/vpFrameEditor'
813+
'merge': {
814+
label: 'Merge',
815+
file: 'nbextensions/visualpython/src/common/vpMerge',
816+
icon: '/nbextensions/visualpython/resource/apps/apps_merge.svg',
817+
color: 3,
818+
},
819+
'reshape': {
820+
label: 'Reshape',
821+
tooltip: 'Pivot & Melt',
822+
file: 'nbextensions/visualpython/src/common/vpReshape',
823+
icon: '/nbextensions/visualpython/resource/apps/apps_reshape.svg',
824+
color: 3,
772825
},
773826
'chart': {
827+
label: 'Chart',
774828
file: '/nbextensions/visualpython/src/matplotlib/plot.js',
829+
icon: '/nbextensions/visualpython/resource/apps/apps_chart.svg',
830+
color: 3,
775831
config: { title: 'Chart', width: '600px' }
776832
},
777-
'profiling': {
778-
file: 'nbextensions/visualpython/src/common/vpProfiling'
833+
'markdown': {
834+
label: 'Markdown',
835+
file: '/nbextensions/visualpython/src/markdown/markdown.js',
836+
icon: '/nbextensions/visualpython/resource/apps/apps_markdown.svg',
837+
color: 3,
838+
config: { title: 'Markdown' }
779839
},
780840
'pdf': {
781-
file: 'nbextensions/visualpython/src/common/vpPDF'
841+
label: 'PDF',
842+
file: 'nbextensions/visualpython/src/common/vpPDF',
843+
icon: '/nbextensions/visualpython/resource/apps/apps_pymupdf.svg',
844+
color: 4,
845+
},
846+
'profiling': {
847+
label: 'Profiling',
848+
tooltip: 'Pandas Profiling',
849+
file: 'nbextensions/visualpython/src/common/vpProfiling',
850+
icon: '/nbextensions/visualpython/resource/apps/apps_profiling.svg',
851+
color: 4,
782852
}
783853
}
784854

src/api_block/createAppsBtn.js

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/*
2+
* Project Name : Visual Python
3+
* Description : GUI-based Python code generator
4+
* File Name : createAppsBtn.js
5+
* Author : Black Logic
6+
* Note : Create Apps button
7+
* License : GNU GPLv3 with Visual Python special exception
8+
* Date : 2021. 10. 05
9+
* Change Date :
10+
*/
11+
12+
//============================================================================
13+
// [CLASS] Create Apps button
14+
//============================================================================
15+
define([
16+
'./constData.js'
17+
, 'nbextensions/visualpython/src/common/StringBuilder'
18+
], function(constData, sb) {
19+
'use strict';
20+
21+
const { APPS_CONFIG } = constData;
22+
23+
//========================================================================
24+
// [CLASS] CreateAppsBtn
25+
//========================================================================
26+
class CreateAppsBtn {
27+
constructor(blockContainerThis, menu) {
28+
this.blockContainerThis = blockContainerThis;
29+
this.menu = menu;
30+
31+
this.icon = APPS_CONFIG[menu].icon;
32+
this.label = APPS_CONFIG[menu].label;
33+
this.tooltip = APPS_CONFIG[menu].tooltip;
34+
if (!this.tooltip) {
35+
this.tooltip = this.label;
36+
}
37+
this.colorLevel = APPS_CONFIG[menu].color;
38+
39+
this.dom = undefined;
40+
}
41+
42+
_getColorClass() {
43+
switch(this.colorLevel) {
44+
case 0:
45+
return 'preparing';
46+
case 1:
47+
case 2:
48+
case 3:
49+
case 4:
50+
return 'line' + this.colorLevel;
51+
}
52+
}
53+
54+
render() {
55+
var page = new sb.StringBuilder();
56+
page.appendFormatLine('<div class="vp-apiblock-menu-apps-item {0}" data-menu="{1}" title="{2}">'
57+
, this._getColorClass(), this.menu, this.tooltip);
58+
page.appendFormatLine('<img src="{0}">', this.icon);
59+
page.appendFormatLine('<div class="vp-apiblock-menu-apps-name">{0}</div>', this.label);
60+
page.append('</div>');
61+
// save as dom
62+
this.dom = $(page.toString());
63+
return this.dom;
64+
}
65+
66+
bindEvent() {
67+
var blockContainer = this.blockContainerThis;
68+
69+
$(this.dom).on('click', function() {
70+
var menu = $(this).attr('data-menu');
71+
72+
var { file, config } = APPS_CONFIG[menu];
73+
if (config == undefined) {
74+
config = {}
75+
}
76+
77+
switch (menu)
78+
{
79+
case 'markdown':
80+
blockContainer.createTextBlock();
81+
break;
82+
case 'import':
83+
case 'snippets':
84+
case 'variable':
85+
case 'file':
86+
case 'instance':
87+
case 'subset':
88+
case 'frame':
89+
case 'chart':
90+
case 'profiling':
91+
case 'pdf':
92+
case 'groupby':
93+
blockContainer.setSelectBlock(null);
94+
blockContainer.createAppsPage(menu, file, config);
95+
break;
96+
case 'merge':
97+
// TODO: Merge
98+
break;
99+
case 'reshape':
100+
// TODO: Reshape
101+
break;
102+
}
103+
});
104+
}
105+
}
106+
107+
return CreateAppsBtn;
108+
});
109+
110+
/* End of file */

src/api_block/index.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
<div class="vp-block-group-box vp-block-group-box-apps">
5555
<input type="hidden" id="vp_appsCode"/>
5656
<div class="vp-apiblock-menu-apps-grid">
57-
<div class="vp-apiblock-menu-apps-item line1" data-menu="import" title="import">
57+
<!-- <div class="vp-apiblock-menu-apps-item line1" data-menu="import" title="import">
5858
<img src="/nbextensions/visualpython/resource/apps/apps_import.svg">
5959
<div class="vp-apiblock-menu-apps-name">Import</div>
6060
</div>
@@ -98,18 +98,18 @@
9898
<img src="/nbextensions/visualpython/resource/apps/apps_white.svg">
9999
<div class="vp-apiblock-menu-apps-name">PDF</div>
100100
</div>
101+
<div class="vp-apiblock-menu-apps-item line3" data-menu="groupby" title="Groupby">
102+
<img src="/nbextensions/visualpython/resource/apps/apps_groupby.svg">
103+
<div class="vp-apiblock-menu-apps-name">Groupby</div>
104+
</div>
101105
<div class="vp-apiblock-menu-apps-item preparing" data-menu="merge" title="Work In Progress">
102106
<img src="/nbextensions/visualpython/resource/apps/apps_merge.svg">
103107
<div class="vp-apiblock-menu-apps-name">Merge</div>
104108
</div>
105-
<div class="vp-apiblock-menu-apps-item preparing" data-menu="groupby" title="Work In Progress">
106-
<img src="/nbextensions/visualpython/resource/apps/apps_groupby.svg">
107-
<div class="vp-apiblock-menu-apps-name">Groupby</div>
108-
</div>
109109
<div class="vp-apiblock-menu-apps-item preparing" data-menu="reshape" title="Work In Progress">
110110
<img src="/nbextensions/visualpython/resource/apps/apps_reshape.svg">
111111
<div class="vp-apiblock-menu-apps-name">Reshape</div>
112-
</div>
112+
</div> -->
113113
</div>
114114
</div>
115115

0 commit comments

Comments
 (0)