diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..84317c2d
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,63 @@
+# Contributing to the Visual Python
+
+Dear contributors, thanks for your interest in Visual Python.
+We welcome all skills from:
+* [Programmers](#Programmers)
+* [Non-programmers](#Non-programmers)
+* [Designers](#Designers)
+
+
+and your contribution would be greatly appreciated !
+
+## Programmers
+
+### Responding to an issue
+1. Find an issue you would like to work on.
+2. Follow the process from [GitHub Guides: Forking Projects](https://guides.github.com/activities/forking/)
+
+NOTE : Any submissions are understood to be under the same GPLv3 License that covers the project.
+
+* GUI Kit available as a Figma library: [Visual Python GUI Kit 1.0](https://www.figma.com/community/file/976035035360380841).
+
+
+### Creating an issue
+1. Go to [Issues], click [New Issue].
+2. Select the issue template: [Bug Report](https://github.com/visualpython/visualpython/issues/new?assignees=&labels=bug&template=bug_report.md&title=%5BBUG%5D+) / [Feature Request](https://github.com/visualpython/visualpython/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=) / [Blank](https://github.com/visualpython/visualpython/issues/new)
+3. Write a clear and concise description.
+4. Submit a new issue.
+
+NOTE : If you are reporting a bug, please include steps to reproduce the problem.
+
+
+## Non-programmers
+
+### Creating & Sharing VP Notes
+1. Create a data analysis task note using Visual Python.
+2. Save the note as a (.vp) format.
+3. Share your work and knowledge on [Visual Python Hub](https://www.visualpython.ai/vpnote).
+
+NOTE : Your work can be of great help for someone who struggles to find a solution.
+
+### Contributing to Documentation
+* Help with reviewing and editing official project documentation.
+
+### Helping raise a better awareness of Visual Python
+* Create educational material using Visual Python.
+* Create content like videos, blogs that you can share your experience and ideas about Visual Python.
+
+
+## Designers
+
+### Responding to a design-related issue
+1. Find a design-related issue you would like to work on.
+2. Follow the process from [GitHub Guides: Forking Projects](https://guides.github.com/activities/forking/)
+
+### Improving UI Kit
+1. Take a look at the latest version on Figma: [Visual Python GUI Kit 1.0](https://www.figma.com/community/file/976035035360380841).
+2. Duplicate the file to add a copy to your folder.
+3. Make changes on the copy and publish the file to Figma Community as a remix version.
+
+NOTE : Recommend reading [Figma: Publish Community files](https://help.figma.com/hc/en-us/articles/360040035974-Publish-Community-files) before starting the work for better understanding of the system.
+
+
+
diff --git a/README.md b/README.md
index f54789cd..ef7e57f5 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,12 @@
-
-
# Visual Python
-
[](https://pypi.python.org/pypi/visualpython/)
[](https://www.gnu.org/licenses/gpl-3.0.html)
-[](https://www.visualpython.ai)
-
-
-
+[](https://github.com/visualpython/visualpython/blob/main/CODE_OF_CONDUCT.md)
## Introduction
Visual Python is a GUI-based Python code generator, developed on the Jupyter Notebook environment as an extension.
-
+
+
1. Key Features
* Automatically generates Python code based on a graphic user interface
@@ -39,7 +24,6 @@ Non-programmers will be able to :
* learn the Python language more easily
* manage big data with minimal coding skills
-
## Getting Started
@@ -93,20 +77,18 @@ uninstall - uninstall packages
upgrade - version upgrade
version - version check
```
-
-
-## Mission & Vision
+## Mission & Vision
**Mission**
To support technology and education so that anyone can leverage big data analytics to create a variety of social values.
**Vision**
-To create an environment where you can learn and use big data analytics skills easily.
+To create an environment where everyone can learn and use big data analytics skills easily.
-
-
+## Contributing
+If you are interested in contributing to the Visual Python, please see [`CONTRIBUTING.md`](CONTRIBUTING.md).
+All skills from programmers, non-programmers, designers are welcomed.
## License
-
GNU GPLv3 (See LICENSE file).
diff --git a/css/common/frameEditor.css b/css/common/frameEditor.css
new file mode 100644
index 00000000..05e1d736
--- /dev/null
+++ b/css/common/frameEditor.css
@@ -0,0 +1,294 @@
+.vp-fe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+
+ z-index: 1200;
+
+ background-color: rgba(0,0,0,.4);
+}
+
+.vp-fe-button {
+ width: 45px;
+}
+
+.vp-fe-container {
+ position: relative;
+ left: 50%;
+ top: 50%;
+ transform:translate(-50%, -50%);
+
+ min-width: 400px;
+ min-height: 400px;
+ width: 95%;
+ height: 95%;
+
+ background-color: white;
+}
+
+.vp-fe-title {
+ height: 30px;
+ padding: 5px 0px 5px 10px;
+
+ background-color: #EEE;
+ border: 1px solid #ddd;;
+ display: flex;
+ flex-direction: row;
+ position: relative;
+
+ font-weight: 700;
+}
+
+.vp-fe-close,
+.vp-fe-popup-close {
+ position: fixed;
+ z-index: 3;
+ right: 5px;
+ width: 20px;
+ height: 20px;
+ line-height: 20px;
+ top: 5px;
+ text-align: center;
+}
+
+.vp-fe-body {
+ width: 100%;
+ height: calc(100% - 30px);
+ padding: 10px;
+ display: grid;
+ grid-row-gap: 5px;
+ grid-template-rows: 35px 30px 60% calc(40% - 80px);
+}
+
+/* preview code */
+.vp-fe-preview {
+ width: 100%;
+ height: 35px;
+ background-image: repeating-linear-gradient( to right, var(--grid-line-color) 0, var(--grid-line-color) 0.25px, transparent 1px, transparent 5px ), repeating-linear-gradient( to bottom, var(--grid-line-color) 0, var(--grid-line-color) 0.25px, transparent 1px, transparent 5px );
+ background-color: white;
+ border: 0.25px solid #E4E4E4;
+}
+.vp-fe-preview textarea {
+ display: none;
+}
+
+.vp-fe-preview .CodeMirror-code .cm-variable {
+ background-color: rgba(47, 133, 90, 0.2);
+}
+
+.vp-fe-preview .CodeMirror-code .cm-string {
+ background-color: rgba(246, 173, 85, 0.2);
+}
+
+.vp-fe-df-box {
+ /* margin-bottom: 5px; */
+}
+
+.vp-fe #vp_feVariable {
+ width: 125px;
+ margin-left: 5px;
+}
+
+.vp-fe-df-refresh {
+ cursor: pointer;
+}
+
+.vp-fe-menu-box {
+ position: fixed;
+ top: 0;
+ left: 0;
+ background: #FFFFFF;
+ z-index: 70;
+ /* display: grid;
+ grid-template-columns: repeat(6, 1fr); */
+}
+
+.vp-fe-menu-box .vp-fe-menu-item {
+ height: 25px;
+ line-height: 25px;
+ background: #FFFFFF;
+ border: 0.25px solid #E4E4E4;
+ box-sizing: border-box;
+ box-shadow: 1px 1px 2px rgb(0 0 0 / 10%);
+ border-radius: 2px;
+ font-size: 11px;
+ text-align: center;
+ color: #696969;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+
+ text-overflow: ellipsis;
+ /* overflow: hidden; */
+ white-space: nowrap;
+ padding: 0px 5px;
+}
+
+.vp-fe-menu-box .vp-fe-menu-item:hover {
+ background: #F8F8F8;
+}
+
+.vp-fe-menu-sub-box {
+ display: none;
+ position: absolute;
+ left: 100%;
+}
+
+.vp-fe-menu-item:hover .vp-fe-menu-sub-box {
+ display: block;
+}
+
+.vp-fe-popup-box {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ min-width: 400px;
+ /* min-height: 150px; */
+ width: 30%;
+ height: fit-content;
+ background-color: white;
+ z-index: 200;
+ border: 0.25px solid var(--border-gray-color);
+ box-shadow: 1px 1px 2px rgb(0 0 0 / 10%);
+}
+
+.vp-fe-popup-body {
+ padding: 10px;
+}
+
+.vp-fe-popup-button-box {
+ float: right;
+ padding: 5px;
+}
+
+.vp-fe-table {
+ height: 100%;
+ background: var(--border-gray-color);
+ overflow: auto;
+}
+.vp-fe-table table {
+ border-collapse: separate;
+ margin-top: 0px;
+ margin-left: 0px;
+}
+.vp-fe-table thead th {
+ position: sticky;
+ top: 0;
+ background: #FFFFFF;
+ border-bottom: 1px solid #000000;
+}
+
+.vp-fe-table tbody tr:nth-child(odd) {
+ background: #F5F5F5;
+}
+.vp-fe-table tbody tr:nth-child(even) {
+ background: #FFFFFF;
+}
+
+.vp-fe-table th.selected {
+ /* color: var(--hightlight-color); */
+ background: #add3fd;
+}
+
+.vp-fe-table th:hover {
+ cursor: pointer;
+ /* background: var(--light-gray-color); */
+ /* background: rgba(66, 165, 245, 0.2); */
+}
+
+/* row hover */
+.vp-fe-table tbody tr:hover {
+ background-color: rgba(66, 165, 245, 0.2);
+}
+
+/* column hover */
+/* .vp-fe-table thead th:not(:first-child):hover::after {
+ background: rgba(66, 165, 245, 0.2);
+ content: '';
+ height: 100000px;
+ left: 0;
+ position: absolute;
+ top: -5000px;
+ width: 100%;
+ z-index: -1;
+} */
+
+.vp-fe-table-more {
+ margin: 5px;
+}
+
+.vp-fe-info {
+ width: 100%;
+ height: 100%;
+ margin: 0px;
+}
+
+.vp-fe-info-title {
+ width: 100%;
+ height: 20px;
+ line-height: 20px;
+ font-weight: bold;
+ background: #F5F5F5;
+}
+
+.vp-fe-info-content {
+ width: 100%;
+ height: calc(100% - 20px);
+ overflow: auto;
+}
+
+.vp-fe-info-content pre {
+ /* width: 300px; */
+ padding:10px;
+ white-space: pre-wrap;
+ overflow: auto;
+ white-space: pre-wrap; /* CSS3*/
+ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ word-wrap: break-all; /* Internet Explorer 5.5+ */
+}
+
+/** buttons */
+.vp-fe-btn-box {
+ position: absolute;
+ bottom: 10px;
+ right: 10px;
+}
+.vp-fe-btn-apply
+, .vp-fe-popup-ok {
+ width: 80px;
+ height: 30px;
+ background: #F37704;
+ border: 0.25px solid #C4C4C4;
+ box-sizing: border-box;
+ border-radius: 2px;
+ text-align: center;
+ color: #FFFFFF;
+}
+.vp-fe-btn-apply:hover
+, .vp-fe-popup-ok:hover {
+ background: var(--hightlight-color);
+}
+.vp-fe-btn-cancel
+, .vp-fe-popup-cancel {
+ width: 80px;
+ height: 30px;
+ background: #E5E5E5;
+ border: 0.25px solid #C4C4C4;
+ box-sizing: border-box;
+ border-radius: 2px;
+ text-align: center;
+ color: #696969;
+}
+.vp-fe-btn-cancel:hover
+, .vp-fe-popup-cancel:hover {
+ background: #ccc;
+}
diff --git a/css/common/subsetEditor.css b/css/common/subsetEditor.css
index fdbc95b1..6d07438b 100644
--- a/css/common/subsetEditor.css
+++ b/css/common/subsetEditor.css
@@ -331,7 +331,7 @@
overflow: auto;
}
.vp-ds-data-view-box table {
- width: 100%;
+ /* width: 100%; */
height: 100%;
}
.vp-ds-data-error-box {
diff --git a/css/component/common.css b/css/component/common.css
index cac284ce..8864552f 100644
--- a/css/component/common.css
+++ b/css/component/common.css
@@ -22,6 +22,10 @@
supported by Chrome, Edge, Opera and Firefox */
}
+.vp-button:hover {
+ background: #F8F8F8;
+}
+
.vp-button.cancel {
background: #E5E5E5;
}
diff --git a/css/pandas/commonPandas.css b/css/pandas/commonPandas.css
index 0209253a..22672e1b 100644
--- a/css/pandas/commonPandas.css
+++ b/css/pandas/commonPandas.css
@@ -100,6 +100,13 @@
width: 116px;
}
+#vp-wrapper .vp-textarea {
+ border: 0.25px solid var(--border-gray-color);
+ width: 100%;
+ height: 100px;
+ margin: 0px;
+}
+
/* 공통 스타일 */
.w100 { width: 100%; }
.w90 { width: 90%; }
diff --git a/data/libraries.xml b/data/libraries.xml
index 574a765e..4294629e 100644
--- a/data/libraries.xml
+++ b/data/libraries.xml
@@ -1221,11 +1221,16 @@
데이터를 차트로 표현하는 함수pandas/plot.js
+
+ visualpython - pandas - subset
+ frame editor
+ pandas/frameEditor.js
+ visualpython - pandas - subsetsubset dataframepandas/subset.js
-
+
visualpython - pandas - input output
diff --git a/resource/VisualPython_Example.png b/resource/VisualPython_Example.png
new file mode 100644
index 00000000..82615285
Binary files /dev/null and b/resource/VisualPython_Example.png differ
diff --git a/src/api_block/blockContainer.js b/src/api_block/blockContainer.js
index 49fecbb1..311fdf60 100644
--- a/src/api_block/blockContainer.js
+++ b/src/api_block/blockContainer.js
@@ -2586,7 +2586,7 @@ define([
this.hideOptionPreviewBox();
$(VP_ID_PREFIX + VP_APIBLOCK_BOARD_OPTION_PREVIEW_BUTTON).removeClass('enabled');
- this.setNavigator(BLOCK_CODELINE_TYPE.NONE, 'Visual Python 1.1.1');
+ this.setNavigator(BLOCK_CODELINE_TYPE.NONE, 'Visual Python 1.1.2');
this.setFocusedPageType(FOCUSED_PAGE_TYPE.BOARD);
$('.vp-apiblock-option-tab-none').css(STR_DISPLAY, STR_BLOCK);
}
diff --git a/src/api_block/index.html b/src/api_block/index.html
index 70894ee2..db04f1d9 100644
--- a/src/api_block/index.html
+++ b/src/api_block/index.html
@@ -107,7 +107,7 @@
id='vp_apiblock_option_page'>