diff --git a/charting_library/charting_library.min.js b/charting_library/charting_library.min.js index c31daad4..9a961490 100644 --- a/charting_library/charting_library.min.js +++ b/charting_library/charting_library.min.js @@ -1,30 +1,26 @@ -(function(f){"function"===typeof define&&define.amd?define(["jquery"],f):f(jQuery)})(function(f){if(!f.support.cors&&f.ajaxTransport&&window.XDomainRequest){var h=/^https?:\/\//i,d=/^get|post$/i,a=new RegExp("^"+location.protocol,"i");f.ajaxTransport("* text html xml json",function(b,c,g){if(b.crossDomain&&b.async&&d.test(b.type)&&h.test(b.url)&&a.test(b.url)){var e=null;return{send:function(a,d){var g="",l=(c.dataType||"").toLowerCase();e=new XDomainRequest;/^\d+$/.test(c.timeout)&&(e.timeout=c.timeout); -e.ontimeout=function(){d(500,"timeout")};e.onload=function(){var a="Content-Length: "+e.responseText.length+"\r\nContent-Type: "+e.contentType,b=200,c="success",g={text:e.responseText};try{if("html"===l||/text\/html/i.test(e.contentType))g.html=e.responseText;else if("json"===l||"text"!==l&&/\/json/i.test(e.contentType))try{g.json=f.parseJSON(e.responseText)}catch(h){b=500,c="parseerror"}else if("xml"===l||"text"!==l&&/\/xml/i.test(e.contentType)){var k=new ActiveXObject("Microsoft.XMLDOM");k.async= -!1;try{k.loadXML(e.responseText)}catch(n){k=void 0}if(!k||!k.documentElement||k.getElementsByTagName("parsererror").length)throw b=500,c="parseerror","Invalid XML: "+e.responseText;g.xml=k}}catch(m){throw m;}finally{d(b,c,g,a)}};e.onprogress=function(){};e.onerror=function(){d(500,"error",{text:e.responseText})};c.data&&(g="string"===f.type(c.data)?c.data:f.param(c.data));e.open(b.type,b.url);e.send(g)},abort:function(){e&&e.abort()}}}})}});"use strict"; -function inherit(f,h){var d=function(){};d.prototype=h.prototype;f.prototype=new d;f.prototype.constructor=f;f.prototype.superclass=h} -(function(){function f(a){"hideSymbolSearch enabledStudies enabledDrawings disabledDrawings disabledStudies disableLogo hideSideToolbar".split(" ").map(function(b){a[b]&&console.warn("Feature `"+b+"` is obsolete. Please see the doc for details.")})}if(!window.TradingView){var h={mobile:{disabledFeatures:"left_toolbar header_widget timeframes_toolbar edit_buttons_in_legend context_menus control_bar border_around_the_chart".split(" "),enabledFeatures:["narrow_chart_enabled"]}},d={BARS:0,CANDLES:1,LINE:2, -AREA:3,HEIKEN_ASHI:8,HOLLOW_CANDLES:9,version:function(){return"1.6 (internal id 3561beec @ 2016-06-22 01:07:28.976139)"},gEl:function(a){return document.getElementById(a)},gId:function(){return"tradingview_"+(1048576*(1+Math.random())|0).toString(16).substring(1)},onready:function(a){window.addEventListener?window.addEventListener("DOMContentLoaded",a,!1):window.attachEvent("onload",a)},css:function(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css"; -c.styleSheet?c.styleSheet.cssText=a:(a=document.createTextNode(a),c.appendChild(a));b.appendChild(c)},bindEvent:function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c)},unbindEvent:function(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&a.detachEvent("on"+b,c)},widget:function(a){this.id=d.gId();if(!a.datafeed)throw"Datafeed is not defined";var b={width:800,height:500,symbol:"AA",interval:"D",timezone:"",container:"",path:"", -locale:"en",toolbar_bg:void 0,hideSymbolSearch:!1,hideSideToolbar:!1,enabledStudies:[],enabledDrawings:[],disabledDrawings:[],disabledStudies:[],drawingsAccess:void 0,studiesAccess:void 0,widgetbar:{datawindow:!1,details:!1,watchlist:!1,watchlist_settings:{default_symbols:[]}},overrides:{"mainSeriesProperties.showCountdown":!1},studiesOverrides:{},fullscreen:!1,autosize:!1,disabledFeatures:[],enabledFeatures:[],indicators_file_name:null,custom_css_url:null,auto_save_delay:null,debug:!1,time_frames:[{text:"5y", -resolution:"W"},{text:"1y",resolution:"W"},{text:"6m",resolution:"120"},{text:"3m",resolution:"60"},{text:"1m",resolution:"30"},{text:"5d",resolution:"5"},{text:"1d",resolution:"1"}],client_id:"0",user_id:"0",charts_storage_url:void 0,charts_storage_api_version:"1.0",logo:{},favorites:{intervals:[],chartTypes:[]},rss_news_feed:null},c={width:a.width,height:a.height,symbol:a.symbol,interval:a.interval,timezone:a.timezone,container:a.container_id,path:a.library_path,locale:a.locale,toolbar_bg:a.toolbar_bg, -hideSymbolSearch:a.hide_symbol_search||a.hideSymbolSearch,hideSideToolbar:a.hide_side_toolbar,enabledStudies:a.enabled_studies,disabledStudies:a.disabled_studies,enabledDrawings:a.enabled_drawings,disabledDrawings:a.disabled_drawings,drawingsAccess:a.drawings_access,studiesAccess:a.studies_access,widgetbar:a.widgetbar,overrides:a.overrides,studiesOverrides:a.studies_overrides,savedData:a.saved_data||a.savedData,snapshotUrl:a.snapshot_url,uid:this.id,datafeed:a.datafeed,tradingController:a.trading_controller, -disableLogo:a.disable_logo||a.disableLogo,logo:a.logo,autosize:a.autosize,fullscreen:a.fullscreen,disabledFeatures:a.disabled_features,enabledFeatures:a.enabled_features,indicators_file_name:a.indicators_file_name,custom_css_url:a.custom_css_url,auto_save_delay:a.auto_save_delay,debug:a.debug,client_id:a.client_id,user_id:a.user_id,charts_storage_url:a.charts_storage_url,charts_storage_api_version:a.charts_storage_api_version,favorites:a.favorites,numeric_formatting:a.numeric_formatting,rss_news_feed:a.rss_news_feed, -studyCountLimit:a.study_count_limit,symbolSearchRequestDelay:a.symbol_search_request_delay};f(c);this.options=$.extend(!0,b,c);this.options.time_frames=a.time_frames||b.time_frames;a.preset&&(a=a.preset,h[a]?(a=h[a],this.options.disabledFeatures=0'},onChartReady:function(a){this._ready?a.call(this):this._ready_handlers.push(a)},setSymbol:function(a, -b,c){this._innerWindow().changeSymbol(a,b+"",c)},layout:function(){return this._innerWindow().layout()},setLayout:function(a){return this._innerWindow().setLayout(a)},chartsCount:function(a){return this._innerWindow().chartsCount(a)},chart:function(a){return this._innerWindow().chart(a)},activeChart:function(){return this._innerWindow().activeChart()},_widgetResizeTimer:null,createButton:function(a){var b=this;a=a||{};var c=a.align||"left";a=this._innerWindow().headerWidget;c="left"==c?a._$left:a._$right; -a=a.createGroup({single:!0}).appendTo(c);a=$('
').appendTo(a);this._widgetResizeTimer&&clearTimeout(this._widgetResizeTimer);this._widgetResizeTimer=setTimeout(function(){b._innerWindow().resizeWindow();clearTimeout(b._widgetResizeTimer)},5);return a},symbolInterval:function(a){var b=this._innerWindow().getSymbolInterval();a&&a(b);return b},onSymbolChange:function(a){this._innerWindow().setCallback("onSymbolChange",a)},onIntervalChange:function(a){this._innerWindow().setCallback("onIntervalChange", -a)},onTick:function(a){this._innerWindow().setCallback("onTick",a)},remove:function(){window.removeEventListener("resize",this._onWindowResize);delete window[this.options.uid];var a=d.gEl(this.id);a.contentWindow.destroyChart();this.unsubscribeFromLoadRequestEvent();a.parentNode.removeChild(a)},getVisibleRange:function(a){var b=this.activeChart().getVisibleRange();a&&a(b);return b},onAutoSaveNeeded:function(a){this._innerWindow().setCallback("onAutoSaveNeeded",a)},onMarkClick:function(a){this._innerWindow().setCallback("onMarkClick", -a)},onBarMarkClicked:function(a){this._innerWindow().setCallback("onMarkClick",a)},onTimescaleMarkClicked:function(a){this._innerWindow().setCallback("onTimescaleMarkClick",a)},subscribe:function(a,b){this._innerWindow().setCallback(a,b)},onScreenshotReady:function(a){this._innerWindow().setCallback("onScreenshotReady",a)},onContextMenu:function(a){this._innerWindow().TradingView.GlobalEventsStorage.subscribe("onContextMenu",function(b){b.callback(a(b.unixtime,b.price))})},onShortcut:function(a,b){this._innerWindow().createShortcutAction(a, -b)},onGrayedObjectClicked:function(a){this._innerWindow().TradingView.GlobalEventsStorage.subscribe("onGrayedObjectClicked",a)},closePopupsAndDialogs:function(){this._innerWindow().closePopupsAndDialogs()},applyOverrides:function(a){this.options=$.extend(!0,this.options,{overrides:a});this._innerWindow().applyOverrides(a)},createStudyTemplate:function(a,b){var c=this.activeChart().createStudyTemplate(a);b&&b(c);return c},addCustomCSSFile:function(a){this._innerWindow().addCustomCSSFile(a)},save:function(a){this._innerWindow().saveChart(a)}, -load:function(a,b){this._innerWindow().loadChart({json:a,extendedData:b})},setLanguage:function(a){this.remove();this.options.locale=a;this.create()},isFloatingTradingPanelVisible:function(){return this._innerWindow().isFloatingTradingPanelVisible()},toggleFloatingTradingPanel:function(){this._innerWindow().toggleFloatingTradingPanel()},isBottomTradingPanelVisible:function(){return this._innerWindow().isBottomTradingPanelVisible()},toggleBottomTradingPanel:function(){this._innerWindow().toggleBottomTradingPanel()}, -showSampleOrderDialog:function(a){return this._innerWindow().showSampleOrderDialog(a)},showSampleClosePositionDialog:function(a){return this._innerWindow().showSampleClosePositionDialog(a)},showSampleReversePositionDialog:function(a){return this._innerWindow().showSampleReversePositionDialog(a)},mainSeriesPriceFormatter:function(){return this._innerWindow().mainSeriesPriceFormatter()},showNoticeDialog:function(a){this._innerWindow().showNoticeDialog(a)},showConfirmDialog:function(a){this._innerWindow().showConfirmDialog(a)}}; -"applyStudyTemplate setChartType clearMarks refreshMarks setVisibleRange createOrderLine createPositionLine createExecutionShape createVerticalLine createMultipointShape createShape removeEntity createStudy removeAllShapes removeAllStudies executeActionById executeAction".split(" ").forEach(function(a){d.widget.prototype[a]=function(){console.warn("Method `"+a+"` is obsolete. Please use `chart()."+a+"` instead.");return this.activeChart()[a].apply(this.activeChart(),arguments)}});window.TradingView&& -jQuery?jQuery.extend(window.TradingView,d):window.TradingView=d}})(); +(function(g){"function"===typeof define&&define.amd?define(["jquery"],g):g(jQuery)})(function(g){if(!g.support.cors&&g.ajaxTransport&&window.XDomainRequest){var k=/^https?:\/\//i,e=/^get|post$/i,a=new RegExp("^"+location.protocol,"i");g.ajaxTransport("* text html xml json",function(b,c,f){if(b.crossDomain&&b.async&&e.test(b.type)&&k.test(b.url)&&a.test(b.url)){var d=null;return{send:function(a,e){var f="",l=(c.dataType||"").toLowerCase();d=new XDomainRequest;/^\d+$/.test(c.timeout)&&(d.timeout=c.timeout); +d.ontimeout=function(){e(500,"timeout")};d.onload=function(){var a="Content-Length: "+d.responseText.length+"\r\nContent-Type: "+d.contentType,b=200,c="success",f={text:d.responseText};try{if("html"===l||/text\/html/i.test(d.contentType))f.html=d.responseText;else if("json"===l||"text"!==l&&/\/json/i.test(d.contentType))try{f.json=g.parseJSON(d.responseText)}catch(k){b=500,c="parseerror"}else if("xml"===l||"text"!==l&&/\/xml/i.test(d.contentType)){var h=new ActiveXObject("Microsoft.XMLDOM");h.async= +!1;try{h.loadXML(d.responseText)}catch(n){h=void 0}if(!h||!h.documentElement||h.getElementsByTagName("parsererror").length)throw b=500,c="parseerror","Invalid XML: "+d.responseText;f.xml=h}}catch(m){throw m;}finally{e(b,c,f,a)}};d.onprogress=function(){};d.onerror=function(){e(500,"error",{text:d.responseText})};c.data&&(f="string"===g.type(c.data)?c.data:g.param(c.data));d.open(b.type,b.url);d.send(f)},abort:function(){d&&d.abort()}}}})}});"use strict"; +(function(){function g(a){e.widget.prototype[a]=function(b){console.warn("Method `"+a+"` is obsolete. Please use `chart."+a+"()` subscription method instead.")}}if(!window.TradingView){var k={mobile:{disabledFeatures:"left_toolbar header_widget timeframes_toolbar edit_buttons_in_legend context_menus control_bar border_around_the_chart".split(" "),enabledFeatures:["narrow_chart_enabled"]}},e={BARS:0,CANDLES:1,LINE:2,AREA:3,HEIKEN_ASHI:8,HOLLOW_CANDLES:9,version:function(){return"1.7 (internal id 49eb0b4e @ 2016-10-04 02:25:30.120643)"}, +gEl:function(a){return document.getElementById(a)},gId:function(){return"tradingview_"+(1048576*(1+Math.random())|0).toString(16).substring(1)},onready:function(a){window.addEventListener?window.addEventListener("DOMContentLoaded",a,!1):window.attachEvent("onload",a)},css:function(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css";c.styleSheet?c.styleSheet.cssText=a:(a=document.createTextNode(a),c.appendChild(a));b.appendChild(c)},bindEvent:function(a, +b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c)},unbindEvent:function(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&a.detachEvent("on"+b,c)},widget:function(a){this.id=e.gId();if(!a.datafeed)throw Error("Datafeed is not defined");var b={width:800,height:500,symbol:"AA",interval:"D",timeframe:null,timezone:"",container:"",path:"",locale:"en",toolbar_bg:void 0,drawingsAccess:void 0,studiesAccess:void 0,widgetbar:{datawindow:!1,details:!1, +watchlist:!1,watchlist_settings:{default_symbols:[]}},overrides:{"mainSeriesProperties.showCountdown":!1},studiesOverrides:{},fullscreen:!1,autosize:!1,disabledFeatures:[],enabledFeatures:[],indicators_file_name:null,custom_css_url:null,auto_save_delay:null,debug:!1,time_frames:[{text:"5y",resolution:"W"},{text:"1y",resolution:"W"},{text:"6m",resolution:"120"},{text:"3m",resolution:"60"},{text:"1m",resolution:"30"},{text:"5d",resolution:"5"},{text:"1d",resolution:"1"}],client_id:"0",user_id:"0",charts_storage_url:void 0, +charts_storage_api_version:"1.0",logo:{},favorites:{intervals:[],chartTypes:[]},rss_news_feed:null};this.options=$.extend(!0,b,{width:a.width,height:a.height,symbol:a.symbol,interval:a.interval,timeframe:a.timeframe,timezone:a.timezone,container:a.container_id,path:a.library_path,locale:a.locale,toolbar_bg:a.toolbar_bg,drawingsAccess:a.drawings_access,studiesAccess:a.studies_access,widgetbar:a.widgetbar,overrides:a.overrides,studiesOverrides:a.studies_overrides,savedData:a.saved_data||a.savedData, +snapshotUrl:a.snapshot_url,uid:this.id,datafeed:a.datafeed,customFormatters:a.customFormatters,tradingController:a.trading_controller,logo:a.logo,autosize:a.autosize,fullscreen:a.fullscreen,disabledFeatures:a.disabled_features,enabledFeatures:a.enabled_features,indicators_file_name:a.indicators_file_name,custom_css_url:a.custom_css_url,auto_save_delay:a.auto_save_delay,debug:a.debug,client_id:a.client_id,user_id:a.user_id,charts_storage_url:a.charts_storage_url,charts_storage_api_version:a.charts_storage_api_version, +favorites:a.favorites,numeric_formatting:a.numeric_formatting,rss_news_feed:a.rss_news_feed,studyCountLimit:a.study_count_limit,symbolSearchRequestDelay:a.symbol_search_request_delay});this.options.time_frames=a.time_frames||b.time_frames;a.preset&&(a=a.preset,k[a]?(a=k[a],this.options.disabledFeatures=0'},onChartReady:function(a){this._ready?a.call(this):this._ready_handlers.push(a)},setSymbol:function(a,b,c){this._innerWindow().tradingViewApi.changeSymbol(a,b+"",c)},layout:function(){return this._innerWindow().tradingViewApi.layout()},setLayout:function(a){return this._innerWindow().tradingViewApi.setLayout(a)}, +chartsCount:function(){return this._innerWindow().tradingViewApi.chartsCount()},chart:function(a){return this._innerWindow().tradingViewApi.chart(a)},activeChart:function(){return this._innerWindow().tradingViewApi.activeChart()},_widgetResizeTimer:null,createButton:function(a){var b=this;a=a||{};var c=a.align||"left";a=this._innerWindow().headerWidget;c="left"===c?a._$left:a._$right;a=a.createGroup("",{single:!0}).appendTo(c);a=$('
').appendTo(a);this._widgetResizeTimer&& +clearTimeout(this._widgetResizeTimer);this._widgetResizeTimer=setTimeout(function(){b._innerWindow().resizeWindow();clearTimeout(b._widgetResizeTimer)},5);return a},symbolInterval:function(a){return this._innerWindow().tradingViewApi.getSymbolInterval(a)},remove:function(){window.removeEventListener("resize",this._onWindowResize);delete window[this.options.uid];var a=e.gEl(this.id);a.contentWindow.destroyChart();a.parentNode.removeChild(a)},getVisibleRange:function(a){return this._innerWindow().tradingViewApi.getVisibleRange(a)}, +getVisiblePriceRange:function(a){return this._innerWindow().tradingViewApi.getVisiblePriceRange(a)},subscribe:function(a,b){this._innerWindow().tradingViewApi.subscribe(a,b)},onContextMenu:function(a){this._innerWindow().tradingViewApi.onContextMenu(a)},onShortcut:function(a,b){this._innerWindow().createShortcutAction(a,b)},onGrayedObjectClicked:function(a){this._innerWindow().tradingViewApi.onGrayedObjectClicked(a)},closePopupsAndDialogs:function(){this._innerWindow().tradingViewApi.closePopupsAndDialogs()}, +applyOverrides:function(a){this.options=$.extend(!0,this.options,{overrides:a});this._innerWindow().applyOverrides(a)},createStudyTemplate:function(a,b){return this._innerWindow().tradingViewApi.createStudyTemplate(a,b)},addCustomCSSFile:function(a){this._innerWindow().addCustomCSSFile(a)},save:function(a){this._innerWindow().tradingViewApi.saveChart(a)},load:function(a,b){this._innerWindow().tradingViewApi.loadChart({json:a,extendedData:b})},setLanguage:function(a){this.remove();this.options.locale= +a;this.create()},isFloatingTradingPanelVisible:function(){return this._innerWindow().isFloatingTradingPanelVisible()},toggleFloatingTradingPanel:function(){this._innerWindow().toggleFloatingTradingPanel()},isBottomTradingPanelVisible:function(){return this._innerWindow().isBottomTradingPanelVisible()},toggleBottomTradingPanel:function(){this._innerWindow().toggleBottomTradingPanel()},showSampleOrderDialog:function(a){return this._innerWindow().showSampleOrderDialog(a)},mainSeriesPriceFormatter:function(){return this._innerWindow().tradingViewApi.mainSeriesPriceFormatter()}, +showNoticeDialog:function(a){this._innerWindow().tradingViewApi.showNoticeDialog(a)},showConfirmDialog:function(a){this._innerWindow().tradingViewApi.showConfirmDialog(a)},selectLineTool:function(a){this._innerWindow().tradingViewApi.selectLineTool(a)},selectedLineTool:function(){return this._innerWindow().tradingViewApi.selectedLineTool()},getSavedCharts:function(a){this._innerWindow().tradingViewApi.getSavedCharts(a)},loadChartFromServer:function(a){this._innerWindow().tradingViewApi.loadChartFromServer(a)}, +saveChartToServer:function(a,b,c,e){this._innerWindow().tradingViewApi.saveChartToServer(a,b,c,e)},removeChartFromServer:function(a,b){this._innerWindow().tradingViewApi.removeChartFromServer(a,b)},getIntervals:function(){return this._innerWindow().tradingViewApi.getIntervals()},getStudiesList:function(){return this._innerWindow().tradingViewApi.getStudiesList()}};g("onSymbolChange");g("onIntervalChange");[["onTick"],["onAutoSaveNeeded"],["onScreenshotReady"],["onBarMarkClicked","onMarkClick"],["onTimescaleMarkClicked", +"onTimescaleMarkClick"]].forEach(function(a){e.widget.prototype[a[0]]=function(b){var c=a[1]||a[0];console.warn("Method `"+a[0]+'` is obsolete. Please use `widget.subscribe("'+c+'", callback)` instead.');this.subscribe(c,b)}});window.TradingView&&jQuery?jQuery.extend(window.TradingView,e):window.TradingView=e}})(); diff --git a/charting_library/customization.txt b/charting_library/customization.txt deleted file mode 100644 index baef3ca8..00000000 --- a/charting_library/customization.txt +++ /dev/null @@ -1,116 +0,0 @@ -// -// This file contains some chart properties description. These properties are treated -// as customizable ones. Other properties customization is not supported. See the documentation for details. -// -// This file format: -// -// : -// - - // supported values: large, medium, small, tiny - volumePaneSize: "large" - - // fonts available in text editors (i.e., in `Text` drawing tool properties dialog) - editorFontsList: ['Verdana', 'Courier New', 'Times New Roman', 'Arial'] - - paneProperties.background: "#ffffff" - paneProperties.vertGridProperties.color: "#E6E6E6" - paneProperties.horzGridProperties.color: "#E6E6E6" - - // Margins (percent). Used for auto scaling. - paneProperties.topMargin: 5 - paneProperties.bottomMargin: 5 - - scalesProperties.showLeftScale : false - scalesProperties.showRightScale : true - scalesProperties.backgroundColor : "#ffffff" - scalesProperties.lineColor : "#555" - scalesProperties.textColor : "#555" - scalesProperties.scaleSeriesOnly : false - - - // Series style. See the supported values below - // bars = 0 - // candles = 1 - // line = 2 - // area = 3 - // heiken ashi = 8 - // candles = 9 - mainSeriesProperties.style: 1 - - mainSeriesProperties.showCountdown: true - mainSeriesProperties.showLastValue:true - mainSeriesProperties.visible:true - mainSeriesProperties.showPriceLine: true - mainSeriesProperties.priceLineWidth: 1 - mainSeriesProperties.lockScale: false - mainSeriesProperties.minTick: "default" - mainSeriesProperties.extendedHours: false - - mainSeriesProperties.priceAxisProperties.autoScale:true - mainSeriesProperties.priceAxisProperties.autoScaleDisabled:false - mainSeriesProperties.priceAxisProperties.percentage:false - mainSeriesProperties.priceAxisProperties.percentageDisabled:false - mainSeriesProperties.priceAxisProperties.log:false - mainSeriesProperties.priceAxisProperties.logDisabled:false - - symbolWatermarkProperties.color : "#555" - - // Percent - symbolWatermarkProperties.transparency: 85 - - - // Different chart types defaults - - // Candles styles - mainSeriesProperties.candleStyle.upColor: "#6ba583" - mainSeriesProperties.candleStyle.downColor: "#d75442" - mainSeriesProperties.candleStyle.drawWick: true - mainSeriesProperties.candleStyle.drawBorder: true - mainSeriesProperties.candleStyle.borderColor: "#378658" - mainSeriesProperties.candleStyle.borderUpColor: "#225437" - mainSeriesProperties.candleStyle.borderDownColor: "#5b1a13" - mainSeriesProperties.candleStyle.wickColor: "#737375" - mainSeriesProperties.candleStyle.barColorsOnPrevClose: false - - // Hollow Candles styles - mainSeriesProperties.hollowCandleStyle.upColor: "#6ba583" - mainSeriesProperties.hollowCandleStyle.downColor: "#d75442" - mainSeriesProperties.hollowCandleStyle.drawWick: true - mainSeriesProperties.hollowCandleStyle.drawBorder: true - mainSeriesProperties.hollowCandleStyle.borderColor: "#378658" - mainSeriesProperties.hollowCandleStyle.borderUpColor: "#225437" - mainSeriesProperties.hollowCandleStyle.borderDownColor: "#5b1a13" - mainSeriesProperties.hollowCandleStyle.wickColor: "#737375" - - // Heikin Ashi styles - mainSeriesProperties.haStyle.upColor: "#6ba583" - mainSeriesProperties.haStyle.downColor: "#d75442" - mainSeriesProperties.haStyle.drawWick: true - mainSeriesProperties.haStyle.drawBorder: true - mainSeriesProperties.haStyle.borderColor: "#378658" - mainSeriesProperties.haStyle.borderUpColor: "#225437" - mainSeriesProperties.haStyle.borderDownColor: "#5b1a13" - mainSeriesProperties.haStyle.wickColor: "#737375" - mainSeriesProperties.haStyle.barColorsOnPrevClose: false - - // Bars styles - mainSeriesProperties.barStyle.upColor: "#6ba583" - mainSeriesProperties.barStyle.downColor: "#d75442" - mainSeriesProperties.barStyle.barColorsOnPrevClose: false - mainSeriesProperties.barStyle.dontDrawOpen: false - - // Line styles - mainSeriesProperties.lineStyle.color: "#0303F7" - mainSeriesProperties.lineStyle.linestyle: CanvasEx.LINESTYLE_SOLID - mainSeriesProperties.lineStyle.linewidth: 1 - mainSeriesProperties.lineStyle.priceSource: "close" - - // Area styles - mainSeriesProperties.areaStyle.color1: "#606090" - mainSeriesProperties.areaStyle.color2: "#01F6F5" - mainSeriesProperties.areaStyle.linecolor: "#0094FF" - mainSeriesProperties.areaStyle.linestyle: CanvasEx.LINESTYLE_SOLID - mainSeriesProperties.areaStyle.linewidth: 1 - mainSeriesProperties.areaStyle.priceSource: "close" - mainSeriesProperties.areaStyle.transparency: 50 \ No newline at end of file diff --git a/charting_library/datafeed/udf/datafeed.js b/charting_library/datafeed/udf/datafeed.js index f6ee21b5..15eafe83 100644 --- a/charting_library/datafeed/udf/datafeed.js +++ b/charting_library/datafeed/udf/datafeed.js @@ -8,8 +8,7 @@ var Datafeeds = {}; -Datafeeds.UDFCompatibleDatafeed = function(datafeedURL, updateFrequency, protocolVersion) { - +Datafeeds.UDFCompatibleDatafeed = function(datafeedURL, updateFrequency) { this._datafeedURL = datafeedURL; this._configuration = undefined; @@ -17,7 +16,6 @@ Datafeeds.UDFCompatibleDatafeed = function(datafeedURL, updateFrequency, protoco this._symbolsStorage = null; this._barsPulseUpdater = new Datafeeds.DataPulseUpdater(this, updateFrequency || 10 * 1000); this._quotesPulseUpdater = new Datafeeds.QuotesPulseUpdater(this); - this._protocolVersion = protocolVersion || 2; this._enableLogging = false; this._initializationFinished = false; @@ -39,17 +37,15 @@ Datafeeds.UDFCompatibleDatafeed.prototype.defaultConfiguration = function() { Datafeeds.UDFCompatibleDatafeed.prototype.getServerTime = function(callback) { if (this._configuration.supports_time) { this._send(this._datafeedURL + '/time', {}) - .done(function (response) { + .done(function(response) { callback(+response); }) .fail(function() { - }); } }; -Datafeeds.UDFCompatibleDatafeed.prototype.on = function (event, callback) { - +Datafeeds.UDFCompatibleDatafeed.prototype.on = function(event, callback) { if (!this._callbacks.hasOwnProperty(event)) { this._callbacks[event] = []; } @@ -101,7 +97,6 @@ Datafeeds.UDFCompatibleDatafeed.prototype._send = function(url, params) { }; Datafeeds.UDFCompatibleDatafeed.prototype._initialize = function() { - var that = this; this._send(this._datafeedURL + '/config') @@ -143,7 +138,7 @@ Datafeeds.UDFCompatibleDatafeed.prototype._setupWithConfiguration = function(con configurationData.symbols_types = symbolsTypes; if (!configurationData.supports_search && !configurationData.supports_group_request) { - throw 'Unsupported datafeed configuration. Must either support search, or support group request'; + throw new Error('Unsupported datafeed configuration. Must either support search, or support group request'); } if (!configurationData.supports_search) { @@ -164,15 +159,15 @@ Datafeeds.UDFCompatibleDatafeed.prototype._setupWithConfiguration = function(con // =============================================================================================================================== // The functions set below is the implementation of JavaScript API. -Datafeeds.UDFCompatibleDatafeed.prototype.getMarks = function (symbolInfo, rangeStart, rangeEnd, onDataCallback, resolution) { +Datafeeds.UDFCompatibleDatafeed.prototype.getMarks = function(symbolInfo, rangeStart, rangeEnd, onDataCallback, resolution) { if (this._configuration.supports_marks) { this._send(this._datafeedURL + '/marks', { - symbol: symbolInfo.ticker.toUpperCase(), - from: rangeStart, - to: rangeEnd, - resolution: resolution - }) - .done(function (response) { + symbol: symbolInfo.ticker.toUpperCase(), + from: rangeStart, + to: rangeEnd, + resolution: resolution + }) + .done(function(response) { onDataCallback(JSON.parse(response)); }) .fail(function() { @@ -181,7 +176,7 @@ Datafeeds.UDFCompatibleDatafeed.prototype.getMarks = function (symbolInfo, range } }; -Datafeeds.UDFCompatibleDatafeed.prototype.getTimescaleMarks = function (symbolInfo, rangeStart, rangeEnd, onDataCallback, resolution) { +Datafeeds.UDFCompatibleDatafeed.prototype.getTimescaleMarks = function(symbolInfo, rangeStart, rangeEnd, onDataCallback, resolution) { if (this._configuration.supports_timescale_marks) { this._send(this._datafeedURL + '/timescale_marks', { symbol: symbolInfo.ticker.toUpperCase(), @@ -189,7 +184,7 @@ Datafeeds.UDFCompatibleDatafeed.prototype.getTimescaleMarks = function (symbolIn to: rangeEnd, resolution: resolution }) - .done(function (response) { + .done(function(response) { onDataCallback(JSON.parse(response)); }) .fail(function() { @@ -207,14 +202,13 @@ Datafeeds.UDFCompatibleDatafeed.prototype.searchSymbols = function(searchString, } if (this._configuration.supports_search) { - this._send(this._datafeedURL + '/search', { - limit: MAX_SEARCH_RESULTS, - query: searchString.toUpperCase(), - type: type, - exchange: exchange - }) - .done(function (response) { + limit: MAX_SEARCH_RESULTS, + query: searchString.toUpperCase(), + type: type, + exchange: exchange + }) + .done(function(response) { var data = JSON.parse(response); for (var i = 0; i < data.length; ++i) { @@ -223,20 +217,18 @@ Datafeeds.UDFCompatibleDatafeed.prototype.searchSymbols = function(searchString, } } - if (typeof data.s == 'undefined' || data.s != 'error') { + if (typeof data.s == 'undefined' || data.s !== 'error') { onResultReadyCallback(data); } else { onResultReadyCallback([]); } - }) .fail(function(reason) { onResultReadyCallback([]); }); } else { - if (!this._symbolSearch) { - throw 'Datafeed error: inconsistent configuration (symbol search)'; + throw new Error('Datafeed error: inconsistent configuration (symbol search)'); } var searchArgument = { @@ -249,7 +241,6 @@ Datafeeds.UDFCompatibleDatafeed.prototype.searchSymbols = function(searchString, if (this._initializationFinished) { this._symbolSearch.searchSymbols(searchArgument, MAX_SEARCH_RESULTS); } else { - var that = this; this.on('initialized', function() { @@ -263,7 +254,6 @@ Datafeeds.UDFCompatibleDatafeed.prototype._symbolResolveURL = '/symbols'; // BEWARE: this function does not consider symbol's exchange Datafeeds.UDFCompatibleDatafeed.prototype.resolveSymbol = function(symbolName, onSymbolResolvedCallback, onResolveErrorCallback) { - var that = this; if (!this._initializationFinished) { @@ -290,12 +280,12 @@ Datafeeds.UDFCompatibleDatafeed.prototype.resolveSymbol = function(symbolName, o if (!this._configuration.supports_group_request) { this._send(this._datafeedURL + this._symbolResolveURL, { - symbol: symbolName ? symbolName.toUpperCase() : '' - }) - .done(function (response) { + symbol: symbolName ? symbolName.toUpperCase() : '' + }) + .done(function(response) { var data = JSON.parse(response); - if (data.s && data.s != 'ok') { + if (data.s && data.s !== 'ok') { onResolveErrorCallback('unknown_symbol'); } else { onResultReady(data); @@ -319,29 +309,23 @@ Datafeeds.UDFCompatibleDatafeed.prototype.resolveSymbol = function(symbolName, o Datafeeds.UDFCompatibleDatafeed.prototype._historyURL = '/history'; Datafeeds.UDFCompatibleDatafeed.prototype.getBars = function(symbolInfo, resolution, rangeStartDate, rangeEndDate, onDataCallback, onErrorCallback) { - // timestamp sample: 1399939200 if (rangeStartDate > 0 && (rangeStartDate + '').length > 10) { - throw ['Got a JS time instead of Unix one.', rangeStartDate, rangeEndDate]; + throw new Error(['Got a JS time instead of Unix one.', rangeStartDate, rangeEndDate]); } - var that = this; - - var requestStartTime = Date.now(); - this._send(this._datafeedURL + this._historyURL, { symbol: symbolInfo.ticker.toUpperCase(), resolution: resolution, from: rangeStartDate, to: rangeEndDate }) - .done(function (response) { - + .done(function(response) { var data = JSON.parse(response); - var nodata = data.s == 'no_data'; + var nodata = data.s === 'no_data'; - if (data.s != 'ok' && !nodata) { + if (data.s !== 'ok' && !nodata) { if (!!onErrorCallback) { onErrorCallback(data.s); } @@ -359,7 +343,6 @@ Datafeeds.UDFCompatibleDatafeed.prototype.getBars = function(symbolInfo, resolut var ohlPresent = typeof data.o != 'undefined'; for (var i = 0; i < barsCount; ++i) { - var barValue = { time: data.t[i] * 1000, close: data.c[i] @@ -380,9 +363,9 @@ Datafeeds.UDFCompatibleDatafeed.prototype.getBars = function(symbolInfo, resolut bars.push(barValue); } - onDataCallback(bars, {version: that._protocolVersion, noData: nodata, nextTime: data.nb || data.nextTime}); + onDataCallback(bars, { noData: nodata, nextTime: data.nb || data.nextTime }); }) - .fail(function (arg) { + .fail(function(arg) { console.warn(['getBars(): HTTP error', arg]); if (!!onErrorCallback) { @@ -391,8 +374,8 @@ Datafeeds.UDFCompatibleDatafeed.prototype.getBars = function(symbolInfo, resolut }); }; -Datafeeds.UDFCompatibleDatafeed.prototype.subscribeBars = function(symbolInfo, resolution, onRealtimeCallback, listenerGUID) { - this._barsPulseUpdater.subscribeDataListener(symbolInfo, resolution, onRealtimeCallback, listenerGUID); +Datafeeds.UDFCompatibleDatafeed.prototype.subscribeBars = function(symbolInfo, resolution, onRealtimeCallback, listenerGUID, onResetCacheNeededCallback) { + this._barsPulseUpdater.subscribeDataListener(symbolInfo, resolution, onRealtimeCallback, listenerGUID, onResetCacheNeededCallback); }; Datafeeds.UDFCompatibleDatafeed.prototype.unsubscribeBars = function(listenerGUID) { @@ -404,9 +387,9 @@ Datafeeds.UDFCompatibleDatafeed.prototype.calculateHistoryDepth = function(perio Datafeeds.UDFCompatibleDatafeed.prototype.getQuotes = function(symbols, onDataCallback, onErrorCallback) { this._send(this._datafeedURL + '/quotes', { symbols: symbols }) - .done(function (response) { + .done(function(response) { var data = JSON.parse(response); - if (data.s == 'ok') { + if (data.s === 'ok') { // JSON format is {s: "status", [{s: "symbol_status", n: "symbol_name", v: {"field1": "value1", "field2": "value2", ..., "fieldN": "valueN"}}]} if (onDataCallback) { onDataCallback(data.d); @@ -417,7 +400,7 @@ Datafeeds.UDFCompatibleDatafeed.prototype.getQuotes = function(symbols, onDataCa } } }) - .fail(function (arg) { + .fail(function(arg) { if (onErrorCallback) { onErrorCallback('network error: ' + arg); } @@ -455,12 +438,9 @@ Datafeeds.SymbolsStorage = function(datafeed) { }; Datafeeds.SymbolsStorage.prototype._requestFullSymbolsList = function() { - var that = this; - var datafeed = this._datafeed; for (var i = 0; i < this._exchangesList.length; ++i) { - var exchange = this._exchangesList[i]; if (this._exchangesDataCache.hasOwnProperty(exchange)) { @@ -472,34 +452,31 @@ Datafeeds.SymbolsStorage.prototype._requestFullSymbolsList = function() { this._exchangesWaitingForData[exchange] = 'waiting_for_data'; this._datafeed._send(this._datafeed._datafeedURL + '/symbol_info', { - group: exchange - }) + group: exchange + }) .done(function(exchange) { return function(response) { that._onExchangeDataReceived(exchange, JSON.parse(response)); that._onAnyExchangeResponseReceived(exchange); }; - }(exchange)) //jshint ignore:line + })(exchange) .fail(function(exchange) { - return function (reason) { + return function(reason) { that._onAnyExchangeResponseReceived(exchange); }; - }(exchange)); //jshint ignore:line + })(exchange); } }; Datafeeds.SymbolsStorage.prototype._onExchangeDataReceived = function(exchangeName, data) { - function tableField(data, name, index) { return data[name] instanceof Array ? data[name][index] : data[name]; } - try - { + try { for (var symbolIndex = 0; symbolIndex < data.symbol.length; ++symbolIndex) { - var symbolName = data.symbol[symbolIndex]; var listedExchange = tableField(data, 'exchange-listed', symbolIndex); var tradedExchange = tableField(data, 'exchange-traded', symbolIndex); @@ -544,14 +521,12 @@ Datafeeds.SymbolsStorage.prototype._onExchangeDataReceived = function(exchangeNa this._symbolsInfo[symbolInfo.ticker] = this._symbolsInfo[symbolName] = this._symbolsInfo[fullName] = symbolInfo; this._symbolsList.push(symbolName); } - } - catch (error) { - throw 'API error when processing exchange `' + exchangeName + '` symbol #' + symbolIndex + ': ' + error; + } catch (error) { + throw new Error('API error when processing exchange `' + exchangeName + '` symbol #' + symbolIndex + ': ' + error); } }; Datafeeds.SymbolsStorage.prototype._onAnyExchangeResponseReceived = function(exchangeName) { - delete this._exchangesWaitingForData[exchangeName]; var allDataReady = Object.keys(this._exchangesWaitingForData).length === 0; @@ -592,9 +567,8 @@ Datafeeds.SymbolSearchComponent = function(datafeed) { // searchArgument = { searchString, onResultReadyCallback} Datafeeds.SymbolSearchComponent.prototype.searchSymbols = function(searchArgument, maxSearchResults) { - if (!this._datafeed._symbolsStorage) { - throw 'Cannot use local symbol search when no groups information is available'; + throw new Error('Cannot use local symbol search when no groups information is available'); } var symbolsStorage = this._datafeed._symbolsStorage; @@ -607,11 +581,11 @@ Datafeeds.SymbolSearchComponent.prototype.searchSymbols = function(searchArgumen var symbolName = symbolsStorage._symbolsList[i]; var item = symbolsStorage._symbolsInfo[symbolName]; - if (searchArgument.type && searchArgument.type.length > 0 && item.type != searchArgument.type) { + if (searchArgument.type && searchArgument.type.length > 0 && item.type !== searchArgument.type) { continue; } - if (searchArgument.exchange && searchArgument.exchange.length > 0 && item.exchange != searchArgument.exchange) { + if (searchArgument.exchange && searchArgument.exchange.length > 0 && item.exchange !== searchArgument.exchange) { continue; } @@ -621,7 +595,7 @@ Datafeeds.SymbolSearchComponent.prototype.searchSymbols = function(searchArgumen if (queryIsEmpty || positionInName >= 0 || positionInDescription >= 0) { var found = false; for (var resultIndex = 0; resultIndex < results.length; resultIndex++) { - if (results[resultIndex].item == item) { + if (results[resultIndex].item === item) { found = true; break; } @@ -636,10 +610,10 @@ Datafeeds.SymbolSearchComponent.prototype.searchSymbols = function(searchArgumen searchArgument.onResultReadyCallback( results - .sort(function (weightedItem1, weightedItem2) { + .sort(function(weightedItem1, weightedItem2) { return weightedItem1.weight - weightedItem2.weight; }) - .map(function (weightedItem) { + .map(function(weightedItem) { var item = weightedItem.item; return { symbol: item.name, @@ -687,8 +661,7 @@ Datafeeds.DataPulseUpdater = function(datafeed, updateFrequency) { that._requestsPending++; - (function(_subscriptionRecord) { - + (function(_subscriptionRecord) { // eslint-disable-line that._datafeed.getBars(_subscriptionRecord.symbolInfo, resolution, datesRangeLeft, datesRangeRight, function(bars) { that._requestsPending--; @@ -715,9 +688,8 @@ Datafeeds.DataPulseUpdater = function(datafeed, updateFrequency) { // Pulse updating may miss some trades data (ie, if pulse period = 10 secods and new bar is started 5 seconds later after the last update, the // old bar's last 5 seconds trades will be lost). Thus, at fist we should broadcast old bar updates when it's ready. if (isNewBar) { - if (bars.length < 2) { - throw 'Not enough bars in history for proper pulse update. Need at least 2.'; + throw new Error('Not enough bars in history for proper pulse update. Need at least 2.'); } var previousBar = bars[bars.length - 2]; @@ -737,8 +709,7 @@ Datafeeds.DataPulseUpdater = function(datafeed, updateFrequency) { function() { that._requestsPending--; }); - })(subscriptionRecord); //jshint ignore:line - + })(subscriptionRecord); } }; @@ -753,13 +724,9 @@ Datafeeds.DataPulseUpdater.prototype.unsubscribeDataListener = function(listener }; Datafeeds.DataPulseUpdater.prototype.subscribeDataListener = function(symbolInfo, resolution, newDataCallback, listenerGUID) { - this._datafeed._logMessage('Subscribing ' + listenerGUID); - var key = symbolInfo.name + ', ' + resolution; - if (!this._subscribers.hasOwnProperty(listenerGUID)) { - this._subscribers[listenerGUID] = { symbolInfo: symbolInfo, resolution: resolution, @@ -774,11 +741,11 @@ Datafeeds.DataPulseUpdater.prototype.subscribeDataListener = function(symbolInfo Datafeeds.DataPulseUpdater.prototype.periodLengthSeconds = function(resolution, requiredPeriodsCount) { var daysCount = 0; - if (resolution == 'D') { + if (resolution === 'D') { daysCount = requiredPeriodsCount; - } else if (resolution == 'M') { + } else if (resolution === 'M') { daysCount = 31 * requiredPeriodsCount; - } else if (resolution == 'W') { + } else if (resolution === 'W') { daysCount = 7 * requiredPeriodsCount; } else { daysCount = requiredPeriodsCount * resolution / (24 * 60); @@ -834,7 +801,7 @@ Datafeeds.QuotesPulseUpdater.prototype._updateQuotes = function(symbolsGetter) { this._datafeed.getQuotes(symbolsGetter(subscriptionRecord), // onDataCallback - (function(subscribers, guid) { + (function(subscribers, guid) { // eslint-disable-line return function(data) { that._requestsPending--; @@ -847,10 +814,10 @@ Datafeeds.QuotesPulseUpdater.prototype._updateQuotes = function(symbolsGetter) { subscribers[i](data); } }; - }(subscriptionRecord.listeners, listenerGUID)), //jshint ignore:line + }(subscriptionRecord.listeners, listenerGUID)), // onErrorCallback - function (error) { + function(error) { that._requestsPending--; - }); //jshint ignore:line + }); } }; diff --git a/charting_library/static/bundles/library.7bade70feaa447892503.js b/charting_library/static/bundles/library.7bade70feaa447892503.js new file mode 100644 index 00000000..72c4f66f --- /dev/null +++ b/charting_library/static/bundles/library.7bade70feaa447892503.js @@ -0,0 +1,71 @@ +webpackJsonp([0],[function(t,e,i){(function(t){"use strict";var e,o,n,s,r,a,l,h,c,d,p,u,_,f,g,m,v,y,b,w,S,T,C,x=i(3);i(4),i(73),i(239),e=i(37),o=i(141).Action,n=i(61).ChartSaver,s=i(240),r=i(42),a=i(38),l=i(82),h=l.PriceFormatter,c=i(241),i(243),d=i(244),p=i(449),u=i(475),_=i(478),f=i(499),g=i(248).UndoHistory,m=i(511),v=i(512),i(506),i(516),y=i(39),b=!!urlParams.indicatorsFile,w=$.Deferred(),S=$.Deferred(),$.when(w,S).done(function(){ChartApiInstance.start()}),b?$.getScript(urlParams.indicatorsFile).done(function(){void 0!==window.__customIndicators&&window.isArray(window.__customIndicators)&&(window.PineJS=i(500),JSServer.studyLibrary=JSServer.studyLibrary.concat(window.__customIndicators),console.log("{0} custom indicators loaded.".format(window.__customIndicators.length)),w.resolve())}).fail(function(t){console.warn("Error loading custom indicators @ `{0}`: {1} ({2}) ".format(urlParams.indicatorsFile,t.statusText,t.status)),w.resolve()}):w.resolve(),window.widgetReady=function(t){a.subscribe("onChartReady",t)},window.customizeUI=function(t){var e,i;if(t.studiesOverrides){e=t.studiesOverrides;for(i in e)m.setProperty(i,e[i])}window.__defaultsOverrides=t.defaultsOverrides},window.applyOverrides=function(t){$.extend(!0,window.__defaultsOverrides,t),window.applyDefaultsOverrides(TradingView.defaultProperties.chartproperties),window.applyDefaultOverridesToLinetools(),window.chartWidgetCollection.applyOverrides(t)},window.is_authenticated=!1,T=function(){var i,o,g,m,b,w,T,C,x,P,L,k,E,I;if(!Modernizr.canvas||!Modernizr.canvastext)throw Error("Charting library cannot be running under this browser");t.setEnabled("charting_library_debug_mode","true"===urlParams.debug),i=window.headerChartPanel=$(".header-chart-panel"),o=$("#library-container"),g=$(".tv-header"),t.enabled("remove_library_container_border")&&(o.css("border","0px"),o.css("padding","1px")),window.customizeUI({studiesOverrides:urlParams.studiesOverrides?JSON.parse(urlParams.studiesOverrides):void 0,defaultsOverrides:JSON.parse(urlParams.overrides)}),urlParams.numeric_formatting=urlParams.numeric_formatting&&JSON.parse(urlParams.numeric_formatting),urlParams.numeric_formatting&&"string"==typeof urlParams.numeric_formatting.decimal_sign&&(h.prototype.decimalSign=urlParams.numeric_formatting.decimal_sign[0]),t.enabled("saveload_storage_customization")&&(void 0!==urlParams.chartsStorageUrl&&urlParams.chartsStorageUrl&&void 0!==urlParams.clientId&&urlParams.clientId?e.initialize(urlParams.clientId,urlParams.userId,urlParams.chartsStorageUrl,urlParams.chartsStorageVer||"1.0"):(t.setEnabled("saveload_storage_customization",!1),t.setEnabled("header_saveload",!1))),window.ChartApiInstance=new f(window.parent[urlParams.uid].datafeed),window.parent[urlParams.uid].customFormatters&&(window.parent[urlParams.uid].customFormatters.timeFormatter&&(l.customFormatters.timeFormatter=window.parent[urlParams.uid].customFormatters.timeFormatter),window.parent[urlParams.uid].customFormatters.dateFormatter&&(l.customFormatters.dateFormatter=window.parent[urlParams.uid].customFormatters.dateFormatter)),urlParams.autoSaveDelay&&ChartApiInstance.setAutoSaveDelay(urlParams.autoSaveDelay),ChartApiInstance.setTimeFramesList(JSON.parse(urlParams.timeFrames)),ChartApiInstance.setStudiesAccessController(ChartApiInstance.createStudiesAccessController(urlParams.studiesAccess)),t.enabled("narrow_chart_enabled")&&$(".chart-page").css("min-width","240px"),t.enabled("use_localstorage_for_settings")&&TVSettings.sync(),m=urlParams.chartContent?JSON.parse(urlParams.chartContent).json:void 0,b=urlParams.interval||"D",w={jqParent:$("#chart-area"),onResize:function(e){var n,s,r,a,l,h,c=$(document.body).height()-2;o.height(c),n=$("#footer-chart-panel"),s=n&&n.is(":visible")?n.outerHeight():0,r=$("#bottom-area"),a=r&&r.is(":visible")?r.outerHeight():0,l=t.enabled("header_widget")&&i.is(":visible")?i.outerHeight():0,h=c-l-g.outerHeight()-a-s,h=Math.max(50,h),e.height(h)},padding:t.enabled("border_around_the_chart")?5:0,edge:t.enabled("border_around_the_chart")?5:0,content:m,widgetOptions:{hideIdeas:!0,addVolume:!0,handleSessionErrors:!0,muteSessionErrors:!0,timezone:urlParams.timezone,defSymbol:urlParams.symbol,defInterval:b,defTimeframe:urlParams.timeframe&&urlParams.timeframe.toLowerCase()},globalEvents:!0,snapshotUrl:urlParams.snapshotUrl},m&&void 0!==m.extendedData&&(T=m.extendedData,w.metaInfo={id:T.uid,name:T.name,description:T.description,uid:T.uid,username:"",tags:""}),C=window.chartWidgetCollection=new d(w),C.activeChartWidget.subscribe(function(t){a.emit("activeChartChanged",C.getAll().indexOf(t))}),window.saver=new n(C),window.chartWidget=C.activeChartWidget.value(),window.pro=new TradingView.Pro,window.tradingViewApi=new v(C,window.saver,ChartApiInstance),x=JSON.parse(urlParams.favorites),x.intervals=x.intervals.map(function(t){var e=""+t;return e.match(/1[DWMYdwmy]/)&&(e=e.slice(1)),e}),t.enabled("study_templates")&&(window.studyTemplates=new s({chartWidgetCollection:C,notShowQuicks:!t.enabled("items_favoriting")})),window.headerWidget=new p({chartWidgetCollection:C,headerChartPanel:i,hideStudyTemplates:!0,favoriteIntervals:x.intervals,interval_options:{interval:b},favoriteChartTypes:x.chartTypes}),r.bindToChartWidgetCollection(C),P=function(){},L=JSON.parse(urlParams.logo),P=L.image?function(e,i,o){var n,s,r,a,l,h,c,d;i=i||chartWidget._jqMainDiv,$(i).find(".onchart-custom-logo").remove(),n=$(''),s=L.link?$('').append(n):n,r=$('Powered by TradingView'),a=$('