hqchart
Version:
HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接
581 lines (467 loc) • 17.9 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _map = require('babel-runtime/core-js/map');
var _map2 = _interopRequireDefault(_map);
var _jquery = require('jquery');
var _jquery2 = _interopRequireDefault(_jquery);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/*
Copyright (c) 2018 jones
http://www.apache.org/licenses/LICENSE-2.0
开源项目 https://github.com/jones2000/HQChart
jones_2000@163.com
股票列表 (H5版本)
*/
//单元个类型
var CELL_TYPE_ID = {
CELL_NONE_ID: 0,
CELL_INTEGER_ID: 1, //整型
CELL_STRING_ID: 2,
CELL_STOCK_NAME_ID: 3, //股票名称
CELL_STOCK_CODE_ID: 4, //股票代码
CELL_STOCK_PRICE_ID: 5, //价格字段
CELL_PERCENTAGE_ID: 6, //百分比
CELL_BIG_NUMBER_ID: 7, //大数值数据
CELL_DOUBLE_ID: 8 //浮点型
//表头单元类型
};var HEAD_CELL_TYPE_ID = {
CELL_STRING_ID: 2, //字符串
CELL_SELECT_ID: 5 //下拉选择框
};
//行数据
function JsCellItem() {
this.Type = CELL_TYPE_ID.CELL_STRING_ID; //0=数值 1=字符串
this.Value = null; //原始数值
this.Text = ''; //显示文本
this.CSS; //对应css样式的名字
this.Element; //td
this.UpdateStatus = { Value: false, CSS: false }; //是否需要更新
this.Index;
this.Build = function (index, trElement) {
this.Index = index;
if (index < trElement.cells.length) {
if (this.Element != trElement.cells[index]) {
this.Element = trElement.cells[index];
this.UpdateStatus = { Value: true, CSS: true };
}
} else {
this.Element = trElement.insertCell(index);
this.UpdateStatus = { Value: true, CSS: true };
}
this.Update();
};
this.Update = function () {
if (!this.Element) return;
if (this.UpdateStatus.Value == true) this.Element.innerHTML = this.Text;
if (this.UpdateStatus.CSS == true) this.Element.className = this.CSS;
this.UpdateStatus.Value = false;
this.UpdateStatus.CSS = false;
};
this.SetValue = function (value, option) //option: { Type:单元个类型}
{
if (!option || !option.Type) this.SetStringValue(value.toString());
switch (option.Type) {
case CELL_TYPE_ID.CELL_STOCK_NAME_ID:
case CELL_TYPE_ID.CELL_STOCK_CODE_ID:
this.SetStringValue(value, option);
break;
case CELL_TYPE_ID.CELL_STOCK_PRICE_ID:
this.SetPriceValue(value, option);
break;
case CELL_TYPE_ID.CELL_PERCENTAGE_ID:
this.SetPercentageValue(value, option);
break;
case CELL_TYPE_ID.CELL_BIG_NUMBER_ID:
this.SetBigNumberValue(value, option);
break;
case CELL_TYPE_ID.CELL_NONE_ID:
this.SetNoneValue(value, option);
break;
case CELL_TYPE_ID.CELL_DOUBLE_ID:
this.SetDoubleValue(value, option);
break;
case CELL_TYPE_ID.CELL_INTEGER_ID:
this.SetIntegerValue(value, option);
break;
}
};
this.ChangeType = function (option) {
if (!opton) return;
var value = this.Value; //先读取值
this.SetValue(value, option);
};
this.SetPercentageValue = function (value, option) {
this.Value = value;
if (JSTableHelper.IsNumber(value)) this.SetText(value.toFixed(option.Dec) + '%');else this.SetText(option.NullText);
if (value > option.CompareValue) this.SetCSS(option.CSS[0]);else if (value < option.CompareValue) this.SetCSS(option.CSS[1]);else this.SetCSS(option.CSS[2]);
};
this.SetPriceValue = function (value, option) {
if (value == this.Value) return;
this.Value = value;
if (!JSTableHelper.IsNumber(value)) this.SetText(option.NullText);else this.SetText(value.toFixed(option.Dec));
if (value > option.CompareValue) this.SetCSS(option.CSS[0]);else if (value < option.CompareValue) this.SetCSS(option.CSS[1]);else this.SetCSS(option.CSS[2]);
};
this.SetBigNumberValue = function (value, option) {
this.Value = value;
this.SetText(JSTableHelper.FormatValueString(value, option.Dec[0], option.Dec[1]));
this.UpdateStatus.Value = true;
this.SetOption(option);
};
this.SetDoubleValue = function (value, option) {
this.Type = CELL_TYPE_ID.CELL_DOUBLE_ID;
this.Value = value;
if (JSTableHelper.IsNumber(value)) this.SetText(value.toFixed(opton.Dec)); //TO:格式化类
else this.SetText(option.NullText);
this.UpdateStatus.Value = true;
this.SetOption(option);
};
this.SetIntegerValue = function (value, option) {
this.Type = CELL_TYPE_ID.CELL_INTEGER_ID;
this.Value = value;
if (JSTableHelper.IsNumber(value)) this.SetText(parseInt(value).toString()); //TO:格式化类
else this.SetText(option.NullText);
this.SetOption(option);
};
this.SetNoneValue = function (value, option) {
this.Type = CELL_TYPE_ID.CELL_NONE_ID;
this.Value = value;
this.SetText(opton.NullText);
this.SetOption(option);
};
this.SetStringValue = function (value, option) {
this.Type = CELL_TYPE_ID.CELL_STRING_ID;
this.Value = value;
this.SetText(value);
this.SetOption(option);
};
this.SetCSS = function (css) {
if (!css) return;
if (css != this.CSS) {
this.CSS = css;
this.UpdateStatus.CSS = true;
}
};
this.SetType = function (type) {
if (JSTableHelper.IsNumber(type)) this.Type = type;
};
this.SetText = function (text) {
if (this.Text != text) {
this.Text = text;
this.UpdateStatus.Value = true;
}
};
this.SetOption = function (option) {
if (!option) return;
this.SetCSS(option.CSS);
this.SetType(option.Type);
};
}
JsCellItem.GetCellRule = function (type) {
var CELL_RULE_MAP = new _map2.default([[CELL_TYPE_ID.CELL_STOCK_NAME_ID, { Type: CELL_TYPE_ID.CELL_STOCK_NAME_ID, CSS: 'jscell-stock-name' }], [CELL_TYPE_ID.CELL_STOCK_CODE_ID, { Type: CELL_TYPE_ID.CELL_STOCK_CODE_ID, CSS: 'jscell-stock-code' }], [CELL_TYPE_ID.CELL_NONE_ID, { Type: CELL_TYPE_ID.CELL_NONE_ID, CSS: 'jscell-none', NullText: '' }], [CELL_TYPE_ID.CELL_PERCENTAGE_ID, {
Type: CELL_TYPE_ID.CELL_PERCENTAGE_ID,
CSS: ["jscell-value-up", "jscell-value-down", "jscell-value-unchanged"],
CompareValue: 0, //对比值
Dec: 2, //小数位数
NullText: '--'
}], [CELL_TYPE_ID.CELL_STOCK_PRICE_ID, {
Type: CELL_TYPE_ID.CELL_PERCENTAGE_ID,
CSS: ["jscell-value-up", "jscell-value-down", "jscell-value-unchanged"],
CompareValue: 0, //填前收盘价
Dec: 2, //小数位数,
NullText: '--'
}], [CELL_TYPE_ID.CELL_BIG_NUMBER_ID, { Type: CELL_TYPE_ID.CELL_BIG_NUMBER_ID, CSS: 'jscell-big-number', Dec: [2, 2] }], [CELL_TYPE_ID.CELL_INTEGER_ID, { Type: CELL_TYPE_ID.CELL_INTEGER_ID, CSS: 'jscell-number', NullText: '--' }], [CELL_TYPE_ID.CELL_DOUBLE_ID, { Type: CELL_TYPE_ID.CELL_DOUBLE_ID, CSS: 'jscell-number', NullText: '--' }]]);
if (CELL_RULE_MAP.has(type)) return CELL_RULE_MAP.get(type);
return null;
};
function JsRowItem() {
this.Cells = [];
this.Index;
this.Element; //tr
this.Key; //主键 修改使用
this.SetCell = function (index, value, option) {
var cell = new JsCellItem();
cell.SetValue(value, option);
this.Cells[index] = cell;
return cell;
};
this.InsertCell = function (index, value, option) {
var cell = new JsCellItem();
cell.SetValue(value, option);
this.Cells.splice(index, 0, cell);
return cell;
};
this.RemoveCell = function (index) {
var cell = this.Cells.splice(index, 1);
return cell;
};
this.Build = function (index, bodyElement) {
this.Index = index;
if (index < bodyElement.rows.length) this.Element = bodyElement.rows[index];else this.Element = bodyElement.insertRow(index);
for (var i in this.Cells) {
var cellItem = this.Cells[i];
cellItem.Build(i, this.Element);
}
var cellCount = this.Cells.length;
while (cellCount < this.Element.cells.length) {
this.Element.deleteCell(-1);
}
};
this.Update = function () {
if (!this.Element) return;
for (var i in this.Cells) {
var cellItem = this.Cells[i];
cellItem.Update();
}
};
}
function JsHeadCellItem() {
this.CSS; //对应css样式的名字
this.Element;
this.Text;
this.Index;
this.Text;
this.RowSpan;
this.ColSpan;
this.UpdateStatus = { Value: false, CSS: false, RowSpan: false, ColSpan: false }; //是否需要更新
this.CreateElement; //自定义创建元素
this.Identfiy = JSTableHelper.CreateGuid();
this.Children = [];
this.Build = function (index, trElement) {
this.Index = index;
if (index < trElement.cells.length) this.Element = trElement.cells[index];else this.Element = trElement.insertCell(index);
this.Update();
};
this.Update = function () {
if (!this.Element) return;
if (this.CreateElement) {
this.CreateElement(this, this.ID);
return;
}
if (this.UpdateStatus.Value == true) this.Element.innerHTML = this.Text;
if (this.UpdateStatus.CSS == true) this.Element.className = this.CSS;
if (this.UpdateStatus.RowSpan == true) this.Element.rowSpan = this.RowSpan;
if (this.UpdateStatus.ColSpan == true) this.Element.colSpan = this.ColSpan;
this.UpdateStatus.Value = false;
this.UpdateStatus.CSS = false;
this.UpdateStatus.RowSpan = false;
this.UpdateStatus.ColSpan = false;
};
this.SetText = function (text, option) {
if (text != this.Text) {
this.Text = text;
this.UpdateStatus.Value = true;
}
if (option) {
if (option.CSS) {
if (this.CSS != option.CSS) {
this.CSS = option.CSS;
this.UpdateStatus.CSS = true;
}
}
if (option.RowSpan && option.RowSpan != this.RowSpan) {
this.RowSpan = option.RowSpan;
this.UpdateStatus.RowSpan = true;
}
if (option.ColSpan && option.ColSpan != this.ColSpan) {
this.ColSpan = option.ColSpan;
this.UpdateStatus.ColSpan = true;
}
if (option.ID) this.Identfiy = option.ID;
if (option.CreateElement) this.CreateElement = option.CreateElement;
}
};
}
JsHeadCellItem.GetCellRule = function (type) {
var CELL_RULE_MAP = new _map2.default([[HEAD_CELL_TYPE_ID.CELL_STRING_ID, { Type: HEAD_CELL_TYPE_ID.CELL_STRING_ID, CSS: 'jshcell-string' }]]);
if (CELL_RULE_MAP.has(type)) return CELL_RULE_MAP.get(type);
return null;
};
function JsHeadRowItem() {
this.CSS; //对应css样式的名字
this.Element; //<tr>
this.Index;
this.Cells = [];
this.Build = function (index, headElement) {
this.Index = index;
if (index < headElement.rows.length) this.Element = headElement.rows[index];else this.Element = headElement.insertRow(index);
for (var i in this.Cells) {
var item = this.Cells[i];
item.Build(i, this.Element);
}
};
this.InsertCell = function (index, text, option) {
var cell = new JsHeadCellItem();
cell.SetText(text, option);
this.Cells.splice(index, 0, cell);
return cell;
};
}
function JsTableHead() {
this.Element; //<thead>
this.Rows = []; // JsHeadRowItem
this.Build = function () {
for (var i in this.Rows) {
var rowItem = this.Rows[i];
rowItem.Build(i, this.Element);
}
};
this.InsertRow = function (index) {
var row = new JsHeadRowItem();
this.Rows[index] = row;
return row;
};
this.RowCount = function () {
return this.Rows.length;
};
this.GetRow = function (rowIndex, rowColunm) //获取表头单元格数据
{
return this.Rows[rowIndex].Cells[rowColunm];
};
}
function JSTable(divElement, option) {
this.DivElement = divElement;
this.Rows = []; //行
this.Head = new JsTableHead();
this.TableElement = document.createElement("table");
if (option && option.CSS) this.TableElement.className = option.CSS;else this.TableElement.className = 'jstable jstable-metrics jstable-bordered ';
this.TableElement.id = JSTableHelper.CreateGuid();
divElement.appendChild(this.TableElement);
//表头
this.Head.Element = document.createElement("thead");
this.TableElement.appendChild(this.Head.Element);
//标题
this.BodyElement = document.createElement("tbody");
this.TableElement.appendChild(this.BodyElement);
//更新数据及行列
this.Build = function () {
this.Head.Build();
for (var i in this.Rows) {
var rowItem = this.Rows[i];
rowItem.Build(i, this.BodyElement);
}
//删除多余的行
var rowCount = this.Rows.length;
while (rowCount < this.BodyElement.rows.length) {
this.BodyElement.deleteRow(-1);
}
};
//更新数据 行列不发生变化调用
this.Update = function () {
for (var i in this.Rows) {
var rowItem = this.Rows[i];
rowItem.Update();
}
};
this.InsertRow = function (index, row) {
this.Rows.splice(index, 0, row);
return row;
};
this.RemoveRow = function (index) //删除行
{
var row = this.Rows.splice(index, 1);
return row;
};
this.RemoveColumn = function (index) //删除列
{
for (var i in this.Rows) {
var item = this.Rows[i];
item.RemoveCell(index);
}
};
this.ClearRows = function () {
this.Rows = [];
};
this.InsertColumn = function (index, data) //添加列 data:{ Value:, Option }
{
if (Array.isArray(data)) {
for (var i in this.Rows) {
var item = this.Rows[i];
if (i < data.length) {
var dataItem = data[i];
item.InsertCell(index, dataItem.Value, dataItem.Option);
} else {
item.InsertCell(index, null, JsCellItem.GetCellRule(CELL_TYPE_ID.CELL_NONE_ID));
}
}
} else {
for (var i in this.Rows) {
var item = this.Rows[i];
item.InsertCell(index, data.Value, data.Option);
}
}
};
//设置单元格数据
this.SetCellValue = function (rowIndex, colIndex, value, option) {
if (rowIndex >= this.Rows.length) return;
var row = this.Rows[rowIndex];
if (colIndex >= row.Cells.length) return;
row.Cells[colIndex].SetValue(value, option);
};
this.GetRowCount = function () {
return this.Rows.length;
};
//排序
this.Sort = function (orderID, colIndex) //0=不排序 1=升序 2=降序
{
if (orderID == 1) {
this.Rows.sort(function (a, b) {
return a.Cells[colIndex].Value - b.Cells[colIndex].Value;
});
} else if (orderID == 2) {
this.Rows.sort(function (a, b) {
return b.Cells[colIndex].Value - a.Cells[colIndex].Value;
});
}
};
}
//////////////////////////////////////////////////////////////////////////////////////////////////
// 公共方法
//
//
//
function JSTableHelper() {}
JSTableHelper.CreateGuid = function () {
function S4() {
return ((1 + Math.random()) * 0x10000 | 0).toString(16).substring(1);
}
return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4();
};
//是否是数值
JSTableHelper.IsNumber = function (value) {
if (value == null) return false;
if (isNaN(value)) return false;
return true;
};
//是否是整形
JSTableHelper.IsInteger = function (x) {
return typeof x === 'number' && x % 1 === 0;
};
//数据输出格式化 floatPrecision=原始小数位数 changedfloatPrecision=转换以后的小数位数
JSTableHelper.FormatValueString = function (value, floatPrecision, changedfloatPrecision, languageID) {
if (!JSTableHelper.IsNumber(value)) {
if (floatPrecision > 0) {
var nullText = '-.';
for (var i = 0; i < floatPrecision; ++i) {
nullText += '-';
}return nullText;
}
return '--';
}
if (value < 0.00000000001 && value > -0.00000000001) {
return "0";
}
var absValue = Math.abs(value);
if (absValue < 10000) return value.toFixed(floatPrecision);else if (absValue < 100000000) return (value / 10000).toFixed(changedfloatPrecision) + "万";else if (absValue < 1000000000000) return (value / 100000000).toFixed(changedfloatPrecision) + "亿";else return (value / 1000000000000).toFixed(changedfloatPrecision) + "万亿";
};
/*外部导入*/
/*暴露外部用的方法*/
exports.default = {
//类导出
JSTable: JSTable,
JsHeadCellItem: JsHeadCellItem,
JsCellItem: JsCellItem,
CELL_TYPE_ID: CELL_TYPE_ID,
HEAD_CELL_TYPE_ID: HEAD_CELL_TYPE_ID
};