import Highcharts from 'highcharts'
import HighchartsMore from 'highcharts/highcharts-more.js'
import ModuleStock from 'highcharts/modules/stock.js'
import ModuleAnnotations from 'highcharts/modules/annotations.js'
import ModuleHeatmap from 'highcharts/modules/heatmap.js'
import ModuleBoost from 'highcharts/modules/boost.js'
import ModuleBoostCanvas from 'highcharts/modules/boost-canvas.js'
import iniMarkers from 'w-highcharts/src/iniMarkers.mjs'
import getDefOpt from 'w-highcharts/src/getDefOpt.mjs'
let inited = false
/**
* 初始化Highcharts, 掛載各擴充模組, 並註冊w-highcharts之擴充標記與預設設定
* 因WHighchartsVue與WHighstockVue皆須使用, 且共用同一Highcharts實體, 故僅首次呼叫時進行初始化
*
* @returns {Object} 回傳Highcharts全域物件
*/
function iniHighcharts() {
//inited, 已初始化就直接回傳
if (inited) {
return Highcharts
}
inited = true
//modules, highcharts@11各模組為工廠函數, 須傳入Highcharts才會掛載
HighchartsMore(Highcharts)
ModuleStock(Highcharts) //因vue-highcharts需有stock才能產生Highstock組件, 故WHighchartsVue亦須先載入stock
ModuleAnnotations(Highcharts)
ModuleHeatmap(Highcharts)
ModuleBoost(Highcharts)
ModuleBoostCanvas(Highcharts)
//掛載至window, 因w-highcharts各函數是由getHighchart取用window.Highcharts, 不接受外部傳入 [w-highcharts/src/getHighchart.mjs:6-11]
window['Highcharts'] = Highcharts
//iniMarkers
iniMarkers(Highcharts)
//setOptions
Highcharts.setOptions(getDefOpt())
return Highcharts
}
export default iniHighcharts