define([ 'require' , 'jquery' , 'nbextensions/visualpython/src/common/vpCommon' , 'nbextensions/visualpython/src/common/constant' , 'nbextensions/visualpython/src/common/StringBuilder' , 'nbextensions/visualpython/src/common/vpFuncJS' , 'nbextensions/visualpython/src/container/vpContainer' , 'nbextensions/visualpython/src/pandas/common/pandasGenerator' , 'nbextensions/visualpython/src/matplotlib/plotLibrary' ], function (requirejs, $, vpCommon, vpConst, sb, vpFuncJS, vpContainer, pdGen, plotLib) { // ìµì ìì± const funcOptProp = { stepCount : 1 , funcName : "Make chart" , funcID : "mp_plotNew" // TODO: ID ê·ì¹ ìì± íì } /** * html load ì½ë°±. ê³ ì id ìì±íì¬ ë¶ê³¼íë©° js ê°ì²´ í´ëì¤ ìì±íì¬ ì»¨í ì´ëë¡ ì ë¬ * @param {function} callback í¸ì¶ì(컨í ì´ë) ì ì½ë°±í¨ì */ var optionLoadCallback = function(callback, meta) { // document.getElementsByTagName("head")[0].appendChild(link); // 컨í ì´ëìì ì ë¬ë callback í¨ìê° ì¡´ì¬íë©´ ì¤í. if (typeof(callback) === 'function') { var uuid = vpCommon.getUUID(); // ìµë 10í ì¤ë³µëì§ ìëë¡ ì²´í¬ for (var idx = 0; idx < 10; idx++) { // ì´ë¯¸ ì¬ì©ì¤ì¸ uuid ì¸ ê²½ì° ë¤ì ìì± if ($(vpConst.VP_CONTAINER_ID).find("." + uuid).length > 0) { uuid = vpCommon.getUUID(); } } $(vpCommon.wrapSelector(vpCommon.formatString("#{0}", vpConst.OPTION_GREEN_ROOM))).find(vpCommon.formatString(".{0}", vpConst.API_OPTION_PAGE)).addClass(uuid); // ìµì ê°ì²´ ìì± var mpPackage = new MatplotPackage(uuid); mpPackage.metadata = meta; // ìµì ìì± í ë¹. mpPackage.setOptionProp(funcOptProp); // html ì¤ì . mpPackage.initHtml(); callback(mpPackage); // ê³µíµ ê°ì²´ë¥¼ callback ì¸ìë¡ ì ë¬ } } /** * html ë¡ë. * @param {function} callback í¸ì¶ì(컨í ì´ë) ì ì½ë°±í¨ì */ var initOption = function(callback, meta) { vpCommon.loadHtml(vpCommon.wrapSelector(vpCommon.formatString("#{0}", vpConst.OPTION_GREEN_ROOM)), "matplotlib/plot_new.html", optionLoadCallback, callback, meta); } /** * 본 ìµì ì²ë¦¬ ìí í´ëì¤ * @param {String} uuid ê³ ì id */ var MatplotPackage = function(uuid) { this.uuid = uuid; // Load html ììì uuid. this.package = {}; } /** * vpFuncJS ìì ìì */ MatplotPackage.prototype = Object.create(vpFuncJS.VpFuncJS.prototype); /** * html ë´ë¶ binding ì²ë¦¬ */ MatplotPackage.prototype.initHtml = function() { this.loadCss(Jupyter.notebook.base_url + vpConst.BASE_PATH + vpConst.STYLE_PATH + "pandas/commonPandas.css"); this.loadCss(Jupyter.notebook.base_url + vpConst.BASE_PATH + vpConst.STYLE_PATH + "matplotlib/plot.css"); var sbPageContent = new sb.StringBuilder(); var sbTagString = new sb.StringBuilder(); // matplot contents // 1. subplot setting í ì´ë¸ ë ì´ìì var tblLayoutSubPlot = this.createVERSimpleLayout("20%"); tblLayoutSubPlot.addClass(vpConst.API_ADDITIONAL_OPTION_BOX_CAPTION); tblLayoutSubPlot.addClass('vp-subplot-table'); // 1-add. subplot setting // TODO: // 1-1. figure variable sbTagString.clear(); sbTagString.appendFormatLine("", "fig"); tblLayoutSubPlot.addRow("figure variable", sbTagString.toString()); // 1-2. row/column sbTagString.clear(); sbTagString.appendFormatLine(`` , "vp-input s input-range" , "vp_subplotsRows" , "row" ); sbTagString.appendFormatLine(``, "vp-range", "vp_subplotsRowsRange"); tblLayoutSubPlot.addRow("row count", sbTagString.toString()); sbTagString.clear(); sbTagString.appendFormatLine(`` , "vp-input s input-range" , "vp_subplotsCols" , "col" ); sbTagString.appendFormatLine(``, "vp-range", "vp_subplotsColsRange"); tblLayoutSubPlot.addRow("column count", sbTagString.toString()); // 1-3. figure size sbTagString.clear(); sbTagString.appendFormatLine("(,", "width"); sbTagString.appendFormatLine(")", "height"); tblLayoutSubPlot.addRow("figure size", sbTagString.toString()); // 1-end. subplot setting ìì½ëì¸ ë°ì¤ var accBoxSubplot = this.createOptionContainer('Subplot Setting'); accBoxSubplot.appendContent(tblLayoutSubPlot.toTagString()); sbPageContent.appendLine(accBoxSubplot.toTagString()); // 2. required í ì´ë¸ ë ì´ìì var tblLayoutRequired = this.createVERSimpleLayout("20%"); tblLayoutRequired.addClass(vpConst.OPTION_TABLE_LAYOUT_HEAD_HIGHLIGHT); tblLayoutRequired.addClass('vp-required-table'); // 2-add. required setting // TODO: subplotindex(r,c), kind, data(x,y), color/cmap, ... , user option // 2-1. subplot index sbTagString.clear(); sbTagString.appendFormatLine("(,", "row"); sbTagString.appendFormatLine(")", "col"); // TODO: view button tblLayoutSubPlot.addRow("subplot position", sbTagString.toString()); // 2-end. required ìì½ëì¸ ë°ì¤ var accBoxRequired = this.createOptionContainer(vpConst.API_REQUIRE_OPTION_BOX_CAPTION); accBoxRequired.setOpenBox(true); accBoxRequired.appendContent(tblLayoutRequired.toTagString()); sbPageContent.appendLine(accBoxRequired.toTagString()); // 3. Additional Options í ì´ë¸ ë ì´ìì var tblLayoutAddOption = this.createVERSimpleLayout("20%"); tblLayoutAddOption.addClass(vpConst.API_ADDITIONAL_OPTION_BOX_CAPTION); tblLayoutAddOption.addClass('vp-additional-table'); // 3-add. Additional Options setting // TODO: title, label, limit, legend // 3-end. Additional Options ìì½ëì¸ ë°ì¤ var accBoxAddOption = this.createOptionContainer('Additional Options'); accBoxAddOption.appendContent(tblLayoutAddOption.toTagString()); sbPageContent.appendLine(accBoxAddOption.toTagString()); // íì´ì§ì 컨í¸ë¡¤ ì½ì vpFuncJS ìì ì ê³µ $(this.wrapSelector()).append(sbPageContent.toString()); // ì°¨í¸ ìë¸í롯 íì´ì§ êµ¬ì± // this.bindSubplotOption1(); // this.bindCmapSelector(); // this.bindSubplotOption2(); } /** * ì í¨ì± ê²ì¬ * @returns ì í¨ì± ê²ì¬ ê²°ê³¼. ì í©ì true */ MatplotPackage.prototype.optionValidation = function() { return true; } /** * ì½ë ìì± * @param {boolean} exec ì¤íì¬ë¶ */ MatplotPackage.prototype.generateCode = function(addCell, exec) { var code = new sb.StringBuilder(); //TODO: if (addCell) { // execute code this.cellExecute(code.toString(), exec); } return code.toString(); } return { initOption: initOption } });