blob: 5945d30db706abc0d59ef847596ef4c0fc2ed6e0 [file] [log] [blame]
/**
* @file data table processor
* @author sushuang(sushuang@baidu.com)
*/
define(function (require) {
var $ = require('jquery');
var dtLib = require('dt/lib');
var helper = require('./helper');
var lang = require('./lang');
var constant = require('./constant');
/**
* @public
*/
var processor = {};
/**
* 此方法只可在jsDataFactory中使用。
* 此方法不做throttle,因为只用于监听ob。
* 约定在ob更新的上游进行throttle(即dataTableProcessor.fillJSData)
*
* @public
* @param {Object} jsDataOb
*/
processor.fillFromJSData = function (jsDataOb) {
var jsData = jsDataOb();
var mainListViewModels = jsDataOb.getCodeInputsListViewModels();
var jsDataType = jsDataOb.getType();
// Clear
mainListViewModels.removeAll();
// Render
var toAddArr = [];
for (var seriesIndex = 0, lenS = jsData.length; seriesIndex < lenS; seriesIndex++) {
var stringifyParam = jsDataOb.getCodeStringifyParam();
var codeText = stringifyParam.outputFormat === 'js'
? dtLib.stringifyJSObject(jsData[seriesIndex], stringifyParam)
: jsonStringify(jsData[seriesIndex], stringifyParam);
var codeTextOb = dtLib.ob(codeText);
var colDesc = jsDataOb.getColDescBySeries(seriesIndex, jsDataType);
var rangeDesc = (colDesc.single ? colDesc.start : (colDesc.start + ' - ' + colDesc.end));
var title = dtLib.strTemplate(lang.codeInputTitle, {rangeDesc: rangeDesc});
toAddArr.push({codeTextOb: codeTextOb, title: title});
codeTextOb.subscribe(onCodeTextChange, processor);
}
toAddArr.length && mainListViewModels.pushArray(toAddArr);
function onCodeTextChange(nextCodeText, codeTextOb) {
if (dtLib.checkValueInfoForConfirmed(codeTextOb)) {
jsDataOb.fillJSDataByCodeInputs();
}
}
};
function jsonStringify(target, stringifyParam) {
return JSON.stringify( // jshint ignore:line
target,
null,
stringifyParam.compress ? 0 : stringifyParam.indentBase
);
}
/**
* 此方法只可在jsDataFactory中使用。
*
* @public
* @param {Object} jsDataOb
*/
processor.fillJSData = function (jsDataOb) {
var jsData = [];
var vms = jsDataOb.getCodeInputsListViewModels()();
var colCount = jsDataOb.getColCount();
var jsDataType = jsDataOb.getType();
var seriesInfo = jsDataOb.getSeriesInfo(jsDataType, colCount);
// 取数据
for (var seriesIndex = 0, lenS = vms.length; seriesIndex < lenS; seriesIndex++) {
var oneCode = helper.parseToArray(vms[seriesIndex].codeTextOb(), true) || [];
var oneSeries = [];
for (var rowIndex = 0, lenR = oneCode.length; rowIndex < lenR; rowIndex++) {
var oneCodeItem = oneCode[rowIndex];
var line;
if (jsDataType === constant.JSDATA_DIM_ARRAY) {
line = seriesInfo.seriesDim === 2
? (!$.isArray(oneCodeItem) ? [] : oneCodeItem)
: oneCodeItem;
}
else { // jsDataType === constant.JSDATA_DIM_ARRAY or constant.JSDATA_GEO
line = $.isPlainObject(oneCodeItem) ? oneCodeItem : {};
}
oneSeries.push(line);
}
jsData.push(oneSeries);
}
jsDataOb(jsData, dtLib.valueInfoForConfirmed(constant.UI_CODE_INPUTS));
};
return processor;
});