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/pandas/common/commonPandas'
, 'nbextensions/visualpython/src/pandas/common/pandasGenerator'
], function (requirejs, $, vpCommon, vpConst, sb, vpFuncJS, libPandas, pdGen) {
// ìµì
ìì±
const funcOptProp = {
stepCount : 1
, funcName : "Variables"
, funcID : "com_variables"
, libID : "pd000"
}
/**
* 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 varPackage = new VariablePackage(uuid);
varPackage.metadata = meta;
// ìµì
ìì± í ë¹.
varPackage.setOptionProp(funcOptProp);
// html ì¤ì .
varPackage.initHtml();
callback(varPackage); // ê³µíµ ê°ì²´ë¥¼ callback ì¸ìë¡ ì ë¬
}
}
/**
* html ë¡ë.
* @param {function} callback í¸ì¶ì(컨í
ì´ë) ì ì½ë°±í¨ì
*/
var initOption = function(callback, meta) {
vpCommon.loadHtml(vpCommon.wrapSelector(vpCommon.formatString("#{0}", vpConst.OPTION_GREEN_ROOM)), "file_io/variables.html", optionLoadCallback, callback, meta);
}
/**
* 본 ìµì
ì²ë¦¬ ìí í´ëì¤
* @param {String} uuid ê³ ì id
*/
var VariablePackage = function(uuid) {
this.uuid = uuid; // Load html ììì uuid.
// pandas í¨ì
this.package = libPandas._PANDAS_FUNCTION[funcOptProp.libID];
}
/**
* vpFuncJS ìì ìì
*/
VariablePackage.prototype = Object.create(vpFuncJS.VpFuncJS.prototype);
/**
* ì í¨ì± ê²ì¬
* @returns ì í¨ì± ê²ì¬ ê²°ê³¼. ì í©ì true
*/
VariablePackage.prototype.optionValidation = function() {
return true;
// ë¶ëª¨ í´ëì¤ ì í¨ì± ê²ì¬ í¸ì¶.
// vpFuncJS.VpFuncJS.prototype.optionValidation.apply(this);
}
/**
* html ë´ë¶ binding ì²ë¦¬
*/
VariablePackage.prototype.initHtml = function() {
var that = this;
this.showFunctionTitle();
this.loadVariables();
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 + "file_io/variables.css");
// load variables on refresh
$(this.wrapSelector('#vp_varRefresh')).click(function(event) {
event.stopPropagation();
that.loadVariables();
});
}
/**
* ì íí í¨í¤ì§ëª
ì
ë ¥
*/
VariablePackage.prototype.showFunctionTitle = function() {
$(this.wrapSelector('.vp_functionName')).text(funcOptProp.funcName);
}
/**
* Variables ì¡°í
*/
VariablePackage.prototype.loadVariables = function() {
var that = this;
// ì¡°íê°ë¥í ë³ì data type ì ì FIXME: ì¡°í íìí ë³ì ì í ì¶ê°
var types = [
// pandas ê°ì²´
'DataFrame', 'Series', 'Index', 'Period', 'GroupBy', 'Timestamp'
// Index íì ì í
, 'RangeIndex', 'CategoricalIndex', 'MultiIndex', 'IntervalIndex', 'DatetimeIndex', 'TimedeltaIndex', 'PeriodIndex', 'Int64Index', 'UInt64Index', 'Float64Index'
// GroupBy íì ì í
, 'DataFrameGroupBy', 'SeriesGroupBy'
// Plot ê´ë ¨ ì í
, 'Figure', 'AxesSubplot'
// Numpy
, 'ndarray'
// Python ë³ì
, 'str', 'int', 'float', 'bool', 'dict', 'list', 'tuple'
];
var tagTable = this.wrapSelector('#vp_var_variableBox table');
// ë³ì ì ë³´ íì
var tagDetailTable = this.wrapSelector("#vp_varDetailTable");
// initialize tags
$(tagTable).find('tr:not(:first)').remove();
$(tagDetailTable).html('');
// HTML 구ì±
pdGen.vp_searchVarList(types, function(result) {
// var jsonVars = result.replace(/'/gi, `"`);
// var varList = JSON.parse(jsonVars);
var varList = JSON.parse(result);
// table ì ë³ìëª©ë¡ ì¶ê°
varList.forEach(varObj => {
if (types.includes(varObj.varType) && varObj.varName[0] !== '_') {
var tagTr = document.createElement('tr');
var tagTdName = document.createElement('td');
var tagTdType = document.createElement('td');
$(tagTr).attr({
'data-var-name': varObj.varName,
'data-var-type': varObj.varType
});
tagTdName.innerText = varObj.varName;
tagTdType.innerText = varObj.varType;
$(tagTr).append(tagTdName);
$(tagTr).append(tagTdType);
$(tagTdName).attr({
'title': 'click to copy'
});
// ë³ìì´ë¦ í´ë¦ ì í´ë¦½ë³´ëì ë³µì¬
$(tagTdName).click(function() {
// // í´ë¦½ë³´ë ë³µì¬ ìì
var tempElem = document.createElement('input');
tempElem.value = varObj.varName;
document.body.appendChild(tempElem);
tempElem.select();
document.execCommand("copy");
document.body.removeChild(tempElem);
// í´ë¦½ë³´ë ë³µì¬ ìë£
vpCommon.renderSuccessMessage('Copied!');
});
// ë³ì ì í ì íì
$(tagTr).click(function() {
$(this).parent().find('tr').removeClass('selected');
$(this).addClass('selected');
// TEST: ë³ì ì í ì ë³ì ì 보를 íë¨ì íì
// vpFuncJS.kernelExecute ììë callbackì msg.content["text"]를 ì ë¬í´ì£¼ê¸° ë문ì ë°ë¡ 구íí¨
Jupyter.notebook.kernel.execute(
varObj.varName,
{
iopub: {
output: function (msg) {
var textResult = msg.content.data["text/plain"];
var htmlResult = msg.content.data["text/html"];
var imgResult = msg.content.data["image/png"];
$(tagDetailTable).html('');
if (htmlResult != undefined) {
// 1. HTML íê·¸ë¡ êµ¬ì±ëì´ ë°íëë ê²½ì°
$(tagDetailTable).append(htmlResult);
} else if (imgResult != undefined) {
// 2. ì´ë¯¸ì§ ë°ì´í°ê° ë°íëë ê²½ì° (base64)
var imgTag = '';
$(tagDetailTable).append(imgTag);
} else if (textResult != undefined) {
// 3. í
ì¤í¸ ë°ì´í°ê° ë°íëë ê²½ì°
var preTag = document.createElement('pre');
$(preTag).text(textResult);
$(tagDetailTable).html(preTag);
} else {
$(tagDetailTable).append('(Nothing Selected)');
}
}
}
},
{ silent: false }
);
// TEST: END
})
$(tagTable).append(tagTr);
}
});
});
};
/**
* ì½ë ìì±
* @param {boolean} exec ì¤íì¬ë¶
*/
VariablePackage.prototype.generateCode = function(addCell, exec) {
var sbCode = new sb.StringBuilder();
// TODO: ë³ì ë´ì© ì¡°í
var selectedVariable = $(this.wrapSelector('#vp_var_variableBox table tr.selected'));
if (selectedVariable) {
var varName = selectedVariable.attr('data-var-name');
if (varName) {
sbCode.appendFormat('{0}', varName);
}
}
if (addCell) this.cellExecute(sbCode.toString(), exec);
return sbCode.toString();
}
return {
initOption: initOption
};
});