Skip to content

Commit 8629f53

Browse files
committed
#42 - update for popup page
1 parent 3ea2b05 commit 8629f53

File tree

8 files changed

+218
-136
lines changed

8 files changed

+218
-136
lines changed

src/api_block/blockContainer.js

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const { now } = require("jquery");
22

33
define([
4-
'nbextensions/visualpython/src/common/vpCommon'
4+
'require'
5+
, 'nbextensions/visualpython/src/common/vpCommon'
56
, 'nbextensions/visualpython/src/common/vpFuncJS'
67
, 'nbextensions/visualpython/src/common/metaDataHandler'
78
, 'nbextensions/visualpython/src/common/constant'
@@ -15,9 +16,12 @@ define([
1516

1617
, './component/blockMenu.js'
1718

19+
, 'nbextensions/visualpython/src/common/vpPopupPage'
20+
1821
, 'codemirror/lib/codemirror'
19-
], function ( vpCommon, vpFuncJS, md, vpConst, sb,
22+
], function (requirejs, vpCommon, vpFuncJS, md, vpConst, sb,
2023
shadowBlock, api, api_list, constData, block, BlockMenu
24+
, popupPage
2125
, codemirror) {
2226

2327
const { RemoveSomeBlockAndGetBlockList
@@ -220,6 +224,9 @@ define([
220224

221225
// blockmenu
222226
this.blockMenu = new BlockMenu(this);
227+
228+
// loadedAppsMenu
229+
this.appsMenu = null;
223230
}
224231

225232
/** Apply not saved block */
@@ -1745,7 +1752,7 @@ define([
17451752
return createdBlock;
17461753
}
17471754

1748-
BlockContainer.prototype.createTextBlock = function() {
1755+
BlockContainer.prototype.createTextBlock = function(textCode = STR_SAMPLE_TEXT) {
17491756
/** board에 블럭이
17501757
* 0개일 경우 isFirstBlock true
17511758
* 1개 이상일 경우 isFirstBlock false
@@ -1763,7 +1770,7 @@ define([
17631770
createdBlock.setOptionPageLoadCallback(optionPageLoadCallback_block);
17641771
createdBlock.setLoadOption(loadOption_block);
17651772
createdBlock.setState({
1766-
[STATE_codeLine]: STR_SAMPLE_TEXT
1773+
[STATE_codeLine]: textCode
17671774
});
17681775

17691776
/** board에 블럭이 0개일 경우 */
@@ -1783,7 +1790,7 @@ define([
17831790
setClosureBlock(createdBlock);
17841791
loadOption_textBlock(STR_TEXT_BLOCK_MARKDOWN_FUNCID, optionPageLoadCallback_block);
17851792

1786-
createdBlock.writeCode(`<p>${STR_SAMPLE_TEXT}</p>`);
1793+
createdBlock.writeCode(`<p>${textCode}</p>`);
17871794
createdBlock.renderSelectedBlockBorderColor(true);
17881795
return createdBlock;
17891796
}
@@ -1818,6 +1825,40 @@ define([
18181825
this.resetBlockListAndRenderThisBlock(createdBlock_api);
18191826
}
18201827

1828+
BlockContainer.prototype.createAppsPage = function(moduleFile, config={}, callback=undefined) {
1829+
var that = this;
1830+
1831+
// var loadUrl = 'markdown/markdown.js';
1832+
// var loadUrl = 'common/' + moduleFile;
1833+
var loadUrl = moduleFile;
1834+
requirejs([loadUrl], function (loaded) {
1835+
console.log(loaded);
1836+
1837+
if (Object.keys(loaded).includes('initOption')) {
1838+
loaded.initOption(function(funcJS) {
1839+
that.appsMenu = new popupPage(funcJS, 'vp_appsCode');
1840+
// library page
1841+
$(vpCommon.wrapSelector(vpCommon.formatString("#{0}", vpConst.OPTION_GREEN_ROOM), vpCommon.formatString(".{0}", vpConst.API_OPTION_PAGE))).each(function() {
1842+
that.appsMenu.open({
1843+
...config,
1844+
pageDom: $(this)
1845+
});
1846+
});
1847+
if (callback) {
1848+
callback(funcJS);
1849+
}
1850+
}, undefined);
1851+
} else {
1852+
// save appsMenu object
1853+
that.appsMenu = new loaded(null, 'vp_appsCode');
1854+
that.appsMenu.open();
1855+
}
1856+
1857+
1858+
});
1859+
return this.appsMenu;
1860+
}
1861+
18211862
/** 블럭을 이동할 때,
18221863
* shadow 블럭을 만드는 메소드
18231864
* @param {ENUM} blockType

src/api_block/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
data-category="apps">Apps
2929
</div>
3030
<div class="vp-block-group-box vp-block-group-box-apps">
31+
<input type="hidden" id="vp_appsCode"/>
3132
<div class="vp-apiblock-menu-apps-grid">
3233
<div class="vp-apiblock-menu-apps-item line1" data-menu="import">
3334
<img src="/nbextensions/visualpython/resource/apps/apps_import.svg">

src/api_block/init.js

Lines changed: 97 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -253,53 +253,55 @@ define([
253253
}
254254
});
255255

256+
/** Apps Menu item click */
256257
/** Apps Menu item click */
257258
$(document).on(STR_CLICK,'.vp-apiblock-menu-apps-item', function() {
258259
var menu = $(this).attr('data-menu');
259260
switch (menu)
260261
{
261262
case 'import':
263+
blockContainer.createAppsPage('/nbextensions/visualpython/src/file_io/import.js', {
264+
title: 'Import',
265+
width: '500px'
266+
});
262267
break;
263268
case 'markdown':
269+
// blockContainer.createAppsPage('/nbextensions/visualpython/src/markdown/markdown.js', {
270+
// title: 'Markdown'
271+
// }, function(funcJS) {
272+
// funcJS.bindOptionEventForPopup();
273+
// });
274+
blockContainer.createTextBlock();
264275
break;
265276
case 'snippets':
266-
var funcID = 'com_udf';
267-
var naviInfo = getNavigationInfo(funcID);
268-
/** board에 선택한 API List 블럭 생성 */
269-
blockContainer.createAPIListBlock(funcID, naviInfo);
277+
blockContainer.createAppsPage('/nbextensions/visualpython/src/file_io/udf.js', {
278+
title: 'Snippets'
279+
});
270280
break;
271281
case 'variable':
272-
var funcID = 'com_variables';
273-
var naviInfo = getNavigationInfo(funcID);
274-
/** board에 선택한 API List 블럭 생성 */
275-
blockContainer.createAPIListBlock(funcID, naviInfo);
282+
blockContainer.createAppsPage('/nbextensions/visualpython/src/file_io/variables.js', {
283+
title: 'Variables'
284+
});
276285
break;
277286
case 'file':
278287
// TODO: file
288+
blockContainer.createAppsPage('nbextensions/visualpython/src/common/vpFile');
279289
break;
280290
case 'instance':
281-
var funcID = 'com_instance';
282-
var naviInfo = getNavigationInfo(funcID);
283-
/** board에 선택한 API List 블럭 생성 */
284-
blockContainer.createAPIListBlock(funcID, naviInfo);
291+
blockContainer.createAppsPage('/nbextensions/visualpython/src/file_io/instance.js', {
292+
title: 'Instance'
293+
});
285294
break;
286295
case 'subset':
287-
var funcID = 'pd_subset';
288-
var naviInfo = getNavigationInfo(funcID);
289-
/** board에 선택한 API List 블럭 생성 */
290-
blockContainer.createAPIListBlock(funcID, naviInfo);
296+
blockContainer.createAppsPage('nbextensions/visualpython/src/common/vpSubsetEditor');
291297
break;
292298
case 'frame':
293-
var funcID = 'pd_frameEditor';
294-
var naviInfo = getNavigationInfo(funcID);
295-
/** board에 선택한 API List 블럭 생성 */
296-
blockContainer.createAPIListBlock(funcID, naviInfo);
299+
blockContainer.createAppsPage('nbextensions/visualpython/src/common/vpFrameEditor');
297300
break;
298301
case 'chart':
299-
var funcID = 'mp_plot';
300-
var naviInfo = getNavigationInfo(funcID);
301-
/** board에 선택한 API List 블럭 생성 */
302-
blockContainer.createAPIListBlock(funcID, naviInfo);
302+
blockContainer.createAppsPage('/nbextensions/visualpython/src/matplotlib/plot.js', {
303+
title: 'Chart'
304+
});
303305
break;
304306
case 'merge':
305307
// TODO: Merge
@@ -316,6 +318,77 @@ define([
316318
}
317319
});
318320

321+
/** Apps Menu Apply event */
322+
$(document).on('popup_apply subset_apply frame_apply', '#vp_appsCode', function(evt) {
323+
var code = evt.code;
324+
var title = evt.title;
325+
326+
var isFirstBlock = false;
327+
const blockList = blockContainer.getBlockList();
328+
/** board에 블럭이 0개 일때
329+
* 즉 블럭이 처음으로 생성되는 경우
330+
*/
331+
if (blockList.length == 0) {
332+
isFirstBlock = true;
333+
}
334+
335+
var createdBlock = undefined;
336+
if (title == 'Markdown') {
337+
338+
createdBlock = blockContainer.createTextBlock(code);
339+
340+
// createdBlock = blockContainer.createBlock(BLOCK_CODELINE_TYPE.TEXT);
341+
// createdBlock.apply();
342+
// createdBlock.setFuncID(STR_TEXT_BLOCK_MARKDOWN_FUNCID);
343+
// createdBlock.setOptionPageLoadCallback(optionPageLoadCallback_block);
344+
// createdBlock.setLoadOption(loadOption_block);
345+
// createdBlock.setState({
346+
// [STATE_codeLine]: code
347+
// });
348+
349+
// /** board에 블럭이 0개일 경우 */
350+
// if (isFirstBlock == true) {
351+
// createdBlock.setDirection(BLOCK_DIRECTION.ROOT);
352+
// blockContainer.reNewContainerDom();
353+
// /** board에 블럭이 1개 이상 일 경우 */
354+
// } else {
355+
// /** board의 가장 아래 블럭을 가져옴 */
356+
// var lastBottomBlock = blockContainer.getRootToLastBottomBlock();
357+
// lastBottomBlock.appendBlock(createdBlock, BLOCK_DIRECTION.DOWN);
358+
// }
359+
// blockContainer.reRenderAllBlock_asc();
360+
// blockContainer.resetBlockList();
361+
// blockContainer.setSelectBlock(createdBlock);
362+
363+
// createdBlock.writeCode(`<p>${code}</p>`);
364+
// createdBlock.renderSelectedBlockBorderColor(true);
365+
} else {
366+
// 1. add code block
367+
// create block as group block
368+
createdBlock = blockContainer.createBlock(BLOCK_CODELINE_TYPE.CODE, null, null, true);
369+
// set code
370+
createdBlock.setState({
371+
customCodeLine: code
372+
});
373+
createdBlock.writeCode(code);
374+
createdBlock.apply();
375+
if (isFirstBlock == true) {
376+
// if it is first block, set as ROOT
377+
createdBlock.setDirection(BLOCK_DIRECTION.ROOT);
378+
} else {
379+
var lastBottomBlock = blockContainer.getRootToLastBottomBlock();
380+
lastBottomBlock.appendBlock(createdBlock, BLOCK_DIRECTION.DOWN);
381+
}
382+
blockContainer.addNodeBlock(createdBlock);
383+
blockContainer.reRenderAllBlock_asc();
384+
blockContainer.resetBlockListAndRenderThisBlock(createdBlock);
385+
386+
}
387+
388+
// 2. add cell and run cell
389+
createdBlock.runThisBlock();
390+
});
391+
319392
/** Logic, API, Data Analysis 의 > 버튼 클릭 */
320393
$(document).on(STR_CLICK,`.vp-apiblock-panel-area-vertical-btn`, function(){
321394
if ($(this).hasClass(`vp-apiblock-arrow-down`)) {

src/common/vpInstanceEditor.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ define([
7777

7878
InstanceEditor.prototype.init = function() {
7979
// load css
80-
this.pageThis.loadCss(Jupyter.notebook.base_url + vpConst.BASE_PATH + vpConst.STYLE_PATH + "common/instanceEditor.css");
80+
vpCommon.loadCss(Jupyter.notebook.base_url + vpConst.BASE_PATH + vpConst.STYLE_PATH + "common/instanceEditor.css");
8181

8282
this.reload();
8383
}

src/common/vpSnippets.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ define([
6363
}
6464

6565
Snippets.prototype.init = function() {
66-
this.pageThis.loadCss(Jupyter.notebook.base_url + vpConst.BASE_PATH + vpConst.STYLE_PATH + "common/snippets.css");
66+
vpCommon.loadCss(Jupyter.notebook.base_url + vpConst.BASE_PATH + vpConst.STYLE_PATH + "common/snippets.css");
6767
this.render();
6868
}
6969

@@ -101,7 +101,7 @@ define([
101101
Snippets.prototype.unbindEvent = function() {
102102

103103
}
104-
104+
105105

106106
return Snippets;
107107
});

0 commit comments

Comments
 (0)