{"version":3,"sources":["Components/Pageview/Pageviews.module.css","Components/User/Users.module.css","Components/Chartplus/chartPlus.js","Components/Onboarding/SpotCards.js","Components/ErrorHandling/ErrorBoundary.js","Recoil/Atoms/UserDetailsAtom.js","Components/Overview/MostReaderTable.js","Components/Overview/MostPopularContent.js","Components/Overview/MostActiveContributor.js","Functional/Strings.js","Functional/Transfrom.js","API/axiosInstance.js","API/filterApis.js","Recoil/Atoms/FilterAtom.js","Recoil/Atoms/AccountAtom.js","Recoil/Atoms/ViewDataAtom.js","Mock/FakeData.js","Functional/authUtils.js","Components/FilterComponent/FilterView.jsx","Functional/TableSyntax.js","Components/Chartplus/Chartplusbox.js","Functional/Excelsheetconverter.js","API/dataViewApis.js","Components/ApCalls.js","Components/Overview/FullDataView.js","Components/Overview/Overview.jsx","Components/Pageview/PageviewTable.js","Components/Dialogscreen.js","Functional/Download.js","Components/Pageview/PageviewSearch.jsx","Functional/FilterFunctions.js","Components/Pageview/Pageview.jsx","Components/User/UserTable.jsx","Components/User/UserSearch.jsx","Components/User/User.jsx","Components/Onboarding/First.js","Components/Onboarding/Drawer.js","Components/Home.jsx","Components/App/AppContent.jsx","App.jsx","Analytics/datadog.js","index.js","Components/Overview/Overview.module.css","Styles/wrappers.js"],"names":["module","exports","chartPlusFunction","sampledata","divelement","console","log","defaultConfig","themeConfig","chartPlus","charts","DIV","NAMESPACE","DOCUMENT","document","idCounter","d3Max","d3","d3Min","mathAbs","Math","abs","mathMax","max","mathMin","min","mathRound","round","dateFormat","numFormat","accessDOM","ref","type","element","getElementById","getElementsByClassName","isElement","error","composeDOM","parent","tag","attr","createElement","isString","isObject","extend","appendChild","drop","array","item","i","length","splice","code","stop","msg","window","destination","source","n","getWidth","elem","parseFloat","getComputedStyle","getPropertyValue","getHeight","isArray","Object","prototype","toString","call","isDate","date","HTMLElement","nodeType","nodeName","isFunction","fn","isNumber","num","isNaN","obj","str","merge","args","arguments","result","makeCopy","copy","original","value","key","hasOwnProperty","Array","slice","parseDate","format","d","Date","getTime","getTimezoneOffset","numberFormat","number","getContrastYIQ","hexcode","hexcolor","substr","parseInt","getTransformation","transform","g","createElementNS","setAttributeNS","matrix","baseVal","consolidate","a","b","c","translateX","e","translateY","f","setDefaultVal","defaultValue","undefined","getRound","x","pow","Axis","this","init","apply","Series","Indicator","Area","Bar","Brush","Line","Pie","Sunburst","Tooltip","Legend","Title","Hierarchy","drawBars","context","data","hierarchy","bar","append","on","ddInProgress","target","tagName","attributes","class","__data__","eventMeta","dataSet","path","forEach","idx","depth","dataRef","active","drillUp","push","children","drill","events","getDrillDownData","container","dispatchEvent","details","tooltip","show","y","meta","keys","reverse","hide","selectAll","enter","classed","style","text","x0","select","node","getBBox","width","x1","d3ScaleY","range","minHeight","height","config","rectHeight","rectPadding","scaleY","Sparkline","MultiStack","Table","Chart","lang","months","shortMonths","days","shortDays","numericSymbols","sharedConfig","granularity","localTime","fontFamily","fontSize","fontWeight","invert","legend","display","xAxis","line","ticks","grid","yAxis","export","colors","backgroundColor","contrastLightColor","contrastDarkColor","axis","isIE","versionIE","ua","navigator","userAgent","msie","indexOf","trident","edge","substring","rv","info","detectIE","isSafari","test","vendor","isFirefox","toLowerCase","chart","globalConfig","arg","globalTheme","setColors","sparkline","multiStack","table","require","gridColor","lineWidth","tickWidth","title","padding","xAxisConfig","orient","yAxisConfig","topConfig","rotate","bottomConfig","rightConfig","leftConfig","align","yRange","xRange","d3Axis","tickSizeInner","gElem","alignTicks","maxWidth","maxStep","isXAxis","each","xScale","bandwidth","step","word","tspan","words","split","getComputedTextLength","lineNumber","dy","pop","join","destroy","remove","parentNode","removeChild","cssPrefix","render","formatS","nameSpace","tickSizeOuter","yScale","tickFormat","categoryMap","tickValues","filter","percent","replace","vRange","hRange","setCSS","firstRender","event","offset","resize","tickCount","scale","cssString","lineDash","tickDash","createTextNode","series","component","getConstructor","updateChart","isHidden","stack","dirtyData","dirty","index","prepareData","map","redraw","dirtySeries","color","defaultStyle","stroke","band","fill","general","indicator","indicators","setHours","textSize","styles","shapeRendering","area","drawSeries","datum","d3area","colorScale","name","y0","y1","interpolation","interpolate","fillOpacity","startDate","endDate","categories","group","rectWidth","actions","brush","brushScale","d3Area","domain","brushDomain","d3Brush","move","tempData","yMax","innerLegends","extent","updateOnBrush","marker","radius","symbol","strokeWidth","markerCSS","small","hover","cursor","strokeOpacity","highlight","d3Line","curve","j","parentName","colorByPoint","pie","arcs","layout","arc","outerArc","padAngle","sort","setCoordinates","coordinates","transition","duration","OuterRad","innerRad","outerRadius","innerRadius","sunburst","partition","size","PI","root","startAngle","endAngle","descendants","sum","offsetY","dayFormat","weekFormat","monthFormat","getAncestors","current","unshift","forceHide","stay","closeEvent","svg","targetEvent","setUp","reposition","getBoundingClientRect","targetElem","left","top","className","id","Event","legendX","categoryX","html","legendMap","category","flip","action","icon","pageX","pageY","alignbottom","navigation","nav","aligncentre","alignleft","alignright","aligntop","alignHorizontally","translate","row","items","wrap","itemList","legendSpacing","maxRows","maxListHeight","alignVertically","maxX","float","maxTextLength","maxWidthPercent","textSpacing","whiteSpace","verticalConfig","horizontalConfig","floatConfig","content","clippath","getData","innerLegend","legendName","hiddenLegends","iconSize","maxItemWidth","setNavigation","alignment","forExport","navConfig","currentPage","maxPage","showTopPage","showBottomPage","clipHeight","floor","ceil","textAnchor","idCount","addPath","pathArray","direction","d3Layout","nice","components","updateDrillPath","updateBar","drillDown","offsetHeight","pageConfig","pageHeight","totalPage","initContainer","SVGContainer","position","overflow","resizeBar","maxHeight","dataLength","tempHeight","updatePage","scrollBars","displayMatrix","altKey","delay","end","tempX","exit","exitTransition","enterTransition","up","p","down","pathElem","pageElem","tempWidth","drillPath","navHeight","thickness","d3ScaleX","updateLine","resizeLine","sparklineWidth","breakpoint","userConfig","timeline","setDomain","gElemRoot","sparklineSpacing","classStart","classClose","getExportString","body","ExportableChart","XMLSerializer","serializeToString","imageWidth","imageHeight","match","getDataUrl","callback","svgString","imgsrc","btoa","unescape","encodeURIComponent","canvas","getContext","image","Image","onload","clearRect","drawImage","toDataURL","src","rowElem","headData","total","categoryName","updateHead","values","widthArray","addClasses","hidden","opacity","pointerEvents","visibility","cursorPointer","disabled","clearTimeout","timer","WFLine","totalBars","err","setTimeout","download","href","click","setColorScale","setDateDomain","setOrdinalDomain","setGroupProps","setAxisRange","overlay","hasWFChart","wfLineData","resetData","legHeight","paddingInner","paddingOuter","setRectWidth","classOpen","groups","stackIDs","groupIDs","stackNames","setStackData","updateYDomain","count","weeks","ids","k","innerLegendTotals","updateSeries","dataMin","dataMax","yDomain","selection","version","object","renderActiveSpotlight","onclick","Onboarding","_jsx","Spotlight","onClick","dialogPlacement","ErrorBoundary","React","Component","constructor","props","super","state","errorInfo","componentDidCatch","setState","_jsxs","justifyContent","Button","margin","marginLeft","componentStack","UserDetailsAtom","atom","default","MostReaderTable","userDetails","setUserDetails","useRecoilState","rowarray","table_data","_userDetails$id","_userDetails$id2","_userDetails$id3","userHeaderId","cells","alignItems","Avatar","appearance","imageURL","displayName","isSortable","token","marginTop","DynamicTable","head","rows","isLoading","loading","emptyView","MostPopularContent","shouldTruncate","MostActiveContibutor","ID","NAME","CREATOR","DaterangeCode","ContentCode","GroupbyCode","DisplayCode","PAGEVIEWTABLEHEADING","PAGEVIEWJSMTABLEHEADING","USERT","USERTDIALOGPAGE","USERTDIALOGLAST","GroupbyList","DisplayList","ContentList","SourceList","FilterTransform","res","viewPointData","PopularContent","ActiveReaderId","header","val","ActiveReader","ActiveContriId","ActiveContri","pageviewTableId","UserTableId","UserTable","axiosInstance","Axios","create","async","applyViewFilter","viewId","reqBody","JWT","process","post","headers","authorization","initalFilterState","start_date","moment","subtract","startOf","tz","end_date","endOf","display_array","groupby_array","content_array","source_array","display_value","group_by_value","content_value","space_value","source_value","save_flag","FilterAtom","AccountAtom","is_authenticated","ViewDataAtom","tab_index","chart_flag","onboarding","drawer","page_view_table","user_view_table","user_dialog","page_dialog","active_contributores","active_reader","popular_content","timeline_chart","overview_loading","is_dialog_loading","space_setting","spaces_list","fromNow","getIframeBaseUrl","Promise","resolve","_window$AP","AP","getLocation","location","URL","Filterview","filterData","setFilterData","accountData","setAccountData","viewData","setViewData","validateDate","setValidateDate","useState","StartDate","toISOString","EndDate","Contentvalue","Displayvalue","Groupbyvalue","Sourcevalue","Tab_index","General_page_flag","ContentArray","SourceArray","DisplayArray","GroupbyArray","isAuthenticated","Spacevalues","SaveFlag","visiblestyle","sourceVisibleStyle","theme","background","dropdownBackground","loaderColor","setJWT","jwt","prev","decoded","jwtDecode","datadogRum","setGlobalContext","accID","baseUrl","origin","getInitialSettings","response","get","getViewFilter","_response$data$select","_response$data$select2","_response$data$select3","_response$data$select4","_response$data$select5","_response$data$select6","_response$data$select7","_response$data$select8","_response$data$select9","_response$data$select10","selected","_response$data$config","_response$data$config2","useEffect","getToken","confluence","space","_props$firstLoadFlag","firstLoadFlag","_response$data$5$view","_response$data$6$view","reqpayload","transformed","setToken","label","setJsmAgentInstalled","jsmAgentInstalled","applyFilters","optionsconverter","FilterWrapper","flexDirection","flexWrap","alignContent","Select","options","isMulti","onChange","selectedspaces","DatePicker","isInvalid","placeholder","spacing","new_Date","comparedate","changeStartDate","paddingTop","changeEndDate","Dropdown","trigger","alignSelf","boundariesElement","shouldFitContainer","triggerType","DropdownItemGroup","DropdownItem","changeContent","changeSource","changeGroupBy","changeDisplay","filters","saveViewFilter","Chartplusbox","_ref","openDrilldownView","chartInstance","setChart","TimelineChart","GeneralChartSyntax","tmpFormat","tmpReformat","timeFormat","monthReformat","timeParse","weekReformat","tmpXaxis","legends","formatteddata","filteritem","trunc","percentage","containerRef","useRef","childElementCount","innerHTML","containerNode","handleTooltipClose","isactive","addEventListener","removeEventListener","handleDataView","intXValue","parse","xValue","yValue","FullDataviewExcelsheet","widgetName","then","exceljs","workbook","Workbook","Creator","worksheet","addWorksheet","columns","pass","inneritem","addRow","xlsx","writeBuffer","buf","saveAs","Blob","fetchDataView","reqQuery","success","getUserDetails","userId","resp","request","JSON","FullDataView","searchkeyword","setSearchKeyword","tableData","setTableData","users","flag","chartDrillDownDataFetch","user","_resp$_links","_resp$profilePicture","baseURL","_links","base","pathURL","profilePicture","fetchUserDetails","FilteredTablerows","Filterfunction","filterValue","raw_array","regex","RegExp","_item$","TableRowFormatting","heads","rs","theaders","setColor","trows","_Fragment","marginBottom","Textfield","autoFocus","elemAfterInput","clearSearch","lineHeight","trim","CrossCircleIcon","primaryColor","elemBeforeInput","paddingLeft","SearchIcon","TableRowFormattingforDownload","_userDetails$id4","_userDetails$id5","_userDetails$id6","_userDetails$id7","iconBefore","ArrowDownIcon","rowsPerPage","Overview","drillDownData","setDrillDownData","ActiveContributores","isOpen","Modalclose","whole","FilterView","timelinecomponent","tcheader","textTransform","marginRight","morebutton","DropdownMenu","triggerButtonProps","MoreIcon","MediaServicesPdfIcon","Suspense","fallback","Spinner","AnalyzeWidgetWrapper","ModalTransition","Modal","onClose","ModalHeader","CrossIcon","N500","ModalBody","ModalFooter","tables","tablerow1","tablerow2","PageViewTable","page","isFixedSize","Dialogscreen","DialogTableSyntax","createPageDialogSyntax","tablearray","enableTooltip","rel","dialogData","createUserdialogSyntax","colId","paddingBottom","search","searchfunction","raw","headervalue","xlsxarray","properties","date1904","sheet","User","Pages","addRows","dialog_xlsx_array_create","PageviewSearch","ModalState","setModalState","DialogSearchKeyword","setDialogSearchKeyword","setheader","showDataFlag","setShowDataFlag","setDialogData","PageDialog","DialogLoading","jwtBaseUrl","dialogFilterTableValue","PageViewDialogFilterfunction","reduce","acc","_userDetails$obj$val$","as","closeClick","Dialog_actions","FilteredTableValue","PageViewFilterfunction","tabledata","TableSyntaxValue","createPagetableSyntax","buttonClick","reqquery","headerId","Excel","Created","Last_Modified","Last_Viewed","User_Viewed","Total_Viewed","pageview_xlsx_array_create","heading","SectionMessage","SectionMessageAction","Pageview","UsersTable","loadingSpinnerSize","sortKey","sortOrder","onSort","onSetPage","UserSearch","setColId","UserDialog","Dialogsearchstate","UserDialogFilterfunction","filteredTableValue","UserFilterfunction","_userDetails$obj$val$2","_userDetails$obj$val$3","None","TableSyntax","createUserTableSyntax","Name","Updated","Viewed","user_xlsx_array_create","UserViewTable","First","Fragment","alt","DrawerComponent","DrawerFlag","Drawer","onCloseComplete","LightbulbFilledIcon","DocumentFilledIcon","open","PeopleIcon","Home","useSetRecoilState","tabIndex","setTabIndex","tabs","SpotlightTarget","AppContentWrapper","openDrawer","EditorHelpIcon","Tabs","onSelect","_","Settings","lazy","PermissionPage","createHashSource","history","createHistory","AppContent","MainWrapper","LocationProvider","Router","spinnerStyle","App","_window$AP$theming","theming","initializeTheming","fecthTheme","getTheme","useThemeObserver","SpotlightManager","SpotlightTransition","applicationId","clientToken","site","service","sampleRate","trackInteractions","trackResources","trackLongTasks","useCrossSiteSessionCookie","startSessionReplayRecording","ReactDOM","RecoilRoot","styled","div","themed","light","N20","dark","DN10","borderRadius","subtleText","gridSize","math","multiply","SettingWrapper"],"mappings":"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","file":"static/js/main.588408cc.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"whole\":\"Pageviews_whole__3UdSQ\",\"search\":\"Pageviews_search__3BQhh\",\"components\":\"Pageviews_components__1WWii\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"whole\":\"Users_whole__wnGA_\",\"components\":\"Users_components__3_-Gj\",\"search\":\"Users_search__1lXDq\"};","/* ChartPlus version1.0.0 2019-10-03 */\nimport * as d3 from 'd3';\nimport './chartPlus.css';\nconst chartPlusFunction = (sampledata, divelement) => {\n console.log('sampledata', sampledata);\n /**\n * @fileOverview Core variables and global functions in chartPlus.\n */\n\n /**\n * The global chartPlus object\n * @namespace\n * @property {constructor} chartPlus.chart - Constructor to create a chart instance.\n * @property {array} chartPlus.charts - Array which contains chart object of all the current chartPlus instances.\n * @property {function} chartPlus.globalSettings - Function to update the default configurations with custom options and returns the new configuration.\n */\n var chartPlus = {};\n /**\n * Array which contains chart object of all the current chartPlus instances\n * @type {array}\n */\n var charts = [],\n /** @constant */\n DIV = 'div',\n /** @constant */\n PX = 'px',\n /** @constant */\n SVG = 'svg',\n /** @constant */\n NAMESPACE = 'chartPlus-',\n /** @constant */\n FULL = '100%',\n /** @constant */\n TICKSIZE = 30,\n /** @constant */\n LABELSIZE = 16,\n /** @constant */\n LABELPADDING = 7,\n /** @constant */\n FALSE = false,\n /** @type {object} */\n DOCUMENT = document,\n /** @type {object} */\n defaultConfig,\n /** @type {number} */\n idCounter = 0,\n /** @constant */\n maxRectWidth = 25,\n /** @constant */\n minChartWidth = 150,\n /** @constant */\n rectPadding = 2,\n /** @type {function} */\n d3Max = d3.max,\n /** @type {function} */\n d3Min = d3.min,\n /** @type {function} */\n mathAbs = Math.abs,\n /** @type {function} */\n mathMax = Math.max,\n /** @type {function} */\n mathMin = Math.min,\n /** @type {function} */\n mathRound = Math.round,\n /** @type {function} */\n dateFormat = d3.timeFormat('%Y-%m-%d'),\n /** @type {function} */\n numFormat = d3.format('s'),\n /** @constant */\n NaNString = 'n/a',\n /** @type {object} */\n themeConfig;\n\n /* ------------------------------------------------------------ *\n * GLOBAL CONFIGURATIONS\n * ------------------------------------------------------------ */\n /**\n * Default Configuration Object\n * @type {object}\n */\n defaultConfig = {\n // colors: [\"#1f77b4\", \"#766385\", \"#467d69\", \"#51605a\", \"#b79555\", \"#91c3c1\", \"#9d3b1b\", \"#58101a\"],\n lang: {\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n shortMonths: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n days: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E']\n },\n sharedConfig: {},\n granularity: 'day',\n localTime: false,\n style: {\n fontFamily: 'arial',\n fontSize: '10px',\n fontWeight: '100'\n },\n invert: false,\n type: 'line',\n legend: {\n display: true\n },\n xAxis: {\n display: true,\n line: true,\n ticks: true,\n grid: false\n },\n yAxis: {\n display: true,\n line: true,\n ticks: true,\n grid: true\n },\n tooltip: {},\n export: {\n width: 700,\n height: 400\n }\n };\n /**\n * Theme Configuration Object\n * @type {object}\n */\n themeConfig = {\n colors: [\n '#1f77b4',\n '#766385',\n '#467d69',\n '#51605a',\n '#b79555',\n '#91c3c1',\n '#9d3b1b',\n '#58101a'\n ],\n backgroundColor: '#ffffff',\n text: {\n contrastLightColor: '#ffffff',\n contrastDarkColor: '#707070'\n },\n axis: {\n contrastLightColor: '#ffffff',\n contrastDarkColor: '#e9e9e9'\n },\n tooltip: {\n contrastLightColor: '#ffffff',\n contrastDarkColor: '#151515'\n }\n };\n\n /**\n * This function finds and returns the DOM element using the provided reference\n * @param {string} ref The selector to find the element\n * @param {string} type The selector. id or class\n * @returns {element} The HTML element with the given selector.\n * @throws {Error} It cannot find the element\n */\n function accessDOM(ref, type) {\n var element;\n if (type === 'id') {\n element = DOCUMENT.getElementById(ref);\n }\n if (type === 'class') {\n element = DOCUMENT.getElementsByClassName(ref);\n }\n if (isElement(element)) {\n return element;\n } else {\n error('cant find element', true);\n }\n }\n\n /**\n * Function to create element with attributes\n * @param {Object} parent element\n * @param {Object} tag HTML tag\n * @param {Object} attributes HTML attributes\n */\n function composeDOM(parent, tag, attr) {\n var args = arguments,\n element;\n element = DOCUMENT.createElement(isString(tag) ? tag : DIV);\n // Set attributes\n if (isObject(attr)) {\n extend(element, attr);\n }\n if (isElement(parent)) {\n parent.appendChild(element);\n }\n }\n /**\n * Remove last occurence of an item from an array\n * @param {Array} array Array fom which items should be removed\n * @param {Mixed} item Item which should be removed\n */\n function drop(array, item) {\n var i = array.length;\n while (i--) {\n if (array[i] === item) {\n array.splice(i, 1);\n break;\n }\n }\n }\n /**\n * Provide error messages\n * @param {number} code Error Code\n * @param {boolean} stop Stop flag.\n */\n function error(code, stop) {\n var msg = 'Error - ' + code;\n if (stop) {\n throw msg;\n } else if (window.console) {\n console.log(msg);\n }\n }\n /**\n * Extend method\n * @param {object} destination Destination object\n * @param {object} source Source object\n * @returns {object} Destination object\n */\n function extend(destination, source) {\n var n;\n if (!destination) {\n destination = {};\n }\n for (n in source) {\n destination[n] = source[n];\n }\n return destination;\n }\n\n /**\n * Get width of the given HTML element\n * @param {object} elem HTML element object\n * @returns {number} Returns width\n */\n function getWidth(elem) {\n var size = parseFloat(\n window.getComputedStyle(elem).getPropertyValue('width')\n );\n return size;\n }\n /**\n * Get height of the given HTML element\n * @param {object} elem HTML element object\n * @returns {number} Returns height\n */\n function getHeight(elem) {\n var size = parseFloat(\n window.getComputedStyle(elem).getPropertyValue('height')\n );\n return size;\n }\n /**\n * Function to get time in milliseconds for a given date\n * @param {Object} date Date\n * @returns {number} Time in milliseconds\n */\n function getTime(date) {\n if (isDate(date)) {\n return parseDate(date).getTime();\n } else {\n return 0;\n }\n }\n /**\n * Update the default configurations with custom options and returns the new configuration.\n * @param {object} arg Custom global configuration object\n * @returns {object} Configuration object\n */\n\n function globalConfig(arg) {\n if (!isObject(arg)) return defaultConfig;\n defaultConfig = merge(true, defaultConfig, arg);\n return defaultConfig;\n }\n /**\n * Update the default theme with custom options and returns the new configuration.\n * @param {object} arg Custom global theme object\n * @returns {object} Configuration object\n */\n\n function globalTheme(arg) {\n if (!isObject(arg)) return themeConfig;\n themeConfig = merge(true, themeConfig, arg);\n return themeConfig;\n }\n /**\n * Update the default color array of chartPlus.\n * @param {array} arg Custom colors\n */\n\n function setColors(arg) {\n if (!Array(arg)) return;\n defaultConfig.colors.splice(0, defaultConfig.colors.length);\n defaultConfig.colors.push.apply(defaultConfig.colors, arg);\n }\n /**\n * Check for array\n * @param {array} array array\n * @returns {boolean}\n */\n function isArray(array) {\n return Object.prototype.toString.call(array) === '[object Array]';\n }\n /**\n * Check for Date\n * @param {date} date Date\n * @returns {boolean}\n */\n function isDate(date) {\n return Object.prototype.toString.call(date) === '[object Date]';\n }\n /**\n * Check for DOM Element\n * @param {element} elem DOM Element\n * @returns {boolean}\n */\n function isElement(elem) {\n return typeof HTMLElement === 'object'\n ? elem instanceof HTMLElement //DOM2\n : elem &&\n typeof elem === 'object' &&\n elem !== null &&\n elem.nodeType === 1 &&\n typeof elem.nodeName === 'string';\n }\n /**\n * Check for function\n * @param {function} fn function\n * @returns {boolean}\n */\n function isFunction(fn) {\n return Object.prototype.toString.call(fn) === '[object Function]';\n }\n /**\n * Check for Integer\n * @param {number} n integer\n * @returns {boolean}\n */\n function isInt(n) {\n return isNumber(n) && n % 1 === 0;\n }\n /**\n * Check for DOM Node\n * @param {node} node DOM node\n * @returns {boolean}\n */\n function isNode(node) {\n return typeof Node === 'object'\n ? node instanceof Node\n : node &&\n typeof node === 'object' &&\n typeof node.nodeType === 'number' &&\n typeof node.nodeName === 'string';\n }\n /**\n * Check for number\n * @param {number} num number\n * @returns {boolean}\n */\n function isNumber(num) {\n return (\n !isNaN(num) && Object.prototype.toString.call(num) === '[object Number]'\n );\n }\n /**\n * Check for object\n * @param {object} obj object\n * @returns {boolean}\n */\n function isObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n }\n /**\n * Check for string\n * @param {string} str string\n * @returns {boolean}\n */\n function isString(str) {\n return Object.prototype.toString.call(str) === '[object String]';\n }\n /**\n * Check for IE browser\n * @returns {boolean}\n */\n function detectIE() {\n // check if user is using IE browser\n var versionIE;\n var ua = window.navigator.userAgent,\n msie = ua.indexOf('MSIE '), // IE 10 or older\n trident = ua.indexOf('Trident/'), // IE 11\n edge = ua.indexOf('Edge/'); // IE 12\n\n if (msie > 0) {\n versionIE = parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n } else if (trident > 0) {\n var rv = ua.indexOf('rv:');\n versionIE = parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n } else if (edge > 0) {\n versionIE = parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n if (msie > 0 || trident > 0 || edge > 0) {\n console.info('You are using IE version ' + versionIE);\n return true;\n } else {\n // other browser\n return false;\n }\n }\n /**\n * Merge two object and return a third object\n * @function\n */\n function merge() {\n var i,\n args = arguments,\n result = {},\n makeCopy = function(copy, original) {\n var value, key;\n\n // An object is replacing a primitive\n if (typeof copy !== 'object') {\n copy = {};\n }\n\n for (key in original) {\n if (original.hasOwnProperty(key)) {\n value = original[key];\n\n // recursively call makeCopy if value is an object\n if (\n value &&\n typeof value === 'object' &&\n Object.prototype.toString.call(value) !== '[object Array]' &&\n typeof value.nodeType !== 'number'\n ) {\n copy[key] = makeCopy(copy[key] || {}, value);\n\n // Copy keys & values if value is not a object\n } else {\n copy[key] = original[key];\n }\n }\n }\n return copy;\n };\n\n // If first argument is true, copy into the existing object. Used in globalSettings.\n if (args[0] === true) {\n result = args[1];\n args = Array.prototype.slice.call(args, 2);\n }\n\n //copy each arguments to the result\n for (i = 0; i < args.length; i++) {\n result = makeCopy(result, args[i]);\n }\n\n return result;\n }\n\n /**\n * parse the string to a date.\n * @param {string} date Date string\n * @returns {date} Parsed date\n */\n function parseDate(date, format) {\n var d = new Date(date);\n return new Date(d.getTime() + d.getTimezoneOffset() * 60 * 1000);\n //return dateFormat.parse(date); // Issue in Atlassian Env.\n }\n /**\n * parse the number to a format.\n * @param {number} number Number\n * @returns {number} Formated number\n */\n\n function numberFormat(number) {\n if (!isNumber(number)) {\n return NaNString;\n } else {\n if (number < 1000) {\n return number;\n } else {\n return numFormat(number);\n }\n }\n }\n\n /**\n * Create array of numbers form start to end\n * @param {number} start starting number\n * @param {number} end ending number\n * @returns {array}\n */\n function range(start, end) {\n var list = [],\n i;\n if (start <= end) {\n for (i = start; i <= end; i++) {\n list.push(i);\n }\n } else {\n for (i = start; i >= end; i--) {\n list.push(i);\n }\n }\n return list;\n }\n\n /**\n * Clip string and add ellipsis to SVG text of it overflows maxWidth\n * @param {number} maxWidth maximum width for SVG text\n */\n function wrap(maxWidth, maxStep) {\n return function() {\n var text = d3.select(this),\n words = text\n .text()\n .split(/\\s+/)\n .reverse(),\n word,\n tspan,\n textLength = text.node().getComputedTextLength(),\n step = maxStep,\n line = [],\n lineNumber = 0,\n lineHeight = 1.1, // ems\n y = text.attr('y'),\n dy = parseFloat(text.attr('dy'));\n\n if (mathAbs(maxStep - maxWidth) < 5) {\n text.text(''); // Do away with text if there is not enough space\n } else {\n // wrap the text to fit.\n\n tspan = text\n .text(null)\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', dy + 'em');\n\n /* jshint -W084 */\n while ((word = words.pop())) {\n line.push(word);\n tspan.text(line.join(' '));\n if (tspan.node().getComputedTextLength() > maxWidth - 5) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word];\n tspan = text\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', ++lineNumber * lineHeight + dy + 'em')\n .text(word);\n }\n }\n }\n };\n }\n /**\n * Hide SVG text of it overflows maxWidth\n * @param {number} maxWidth maximum width for SVG text\n */\n function hide(maxWidth) {\n return function() {\n var self = d3.select(this),\n textLength = self.node().getComputedTextLength(),\n text = self.text();\n if (textLength > maxWidth) {\n self.text('');\n } else {\n self.text(text);\n }\n };\n }\n\n /**\n * Function to fing whether the contrast color is black or white\n * @param {string} color in hexcode\n * @returns {string} contrast color value\n */\n function getContrastYIQ(hexcode) {\n var hexcolor = hexcode.substr(1, hexcode.length - 1);\n var r = parseInt(hexcolor.substr(0, 2), 16);\n var g = parseInt(hexcolor.substr(2, 2), 16);\n var b = parseInt(hexcolor.substr(4, 2), 16);\n var yiq = (r * 299 + g * 587 + b * 114) / 1000;\n return yiq >= 128 ? 'dark' : 'light';\n }\n\n /**\n * Function to get Transformations object (d3.transform missing in v4)\n * @param {string} transform string\n * @returns {object} properties for all transformation definitions\n */\n function getTransformation(transform) {\n if (!!transform) {\n // Create a dummy g for calculation purposes only. This will never\n // be appended to the DOM and will be discarded once this function\n // returns.\n\n var g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n\n // Set the transform attribute to the provided string value.\n g.setAttributeNS(null, 'transform', transform);\n\n // consolidate the SVGTransformList containing all transformations\n // to a single SVGTransform of type SVG_TRANSFORM_MATRIX and get\n // its SVGMatrix.\n var matrix = g.transform.baseVal.consolidate().matrix;\n\n // Below calculations are taken and adapted from the private function\n // transform/decompose.js of D3's module d3-interpolate.\n //var {a, b, c, d, e, f} = matrix; // ES6, if this doesn't work, use below assignment\n var a = matrix.a,\n b = matrix.b,\n c = matrix.c,\n d = matrix.d,\n e = matrix.e,\n f = matrix.f; // ES5\n // var scaleX, scaleY, skewX;\n // if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n // if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n // if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n // if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f\n // rotate: Math.atan2(b, a) * 180 / Math.PI,\n // skewX: Math.atan(skewX) * 180 / Math.PI,\n // scaleX: scaleX,\n // scaleY: scaleY\n };\n } else {\n return {\n translateX: 0,\n translateY: 0\n };\n }\n }\n\n /**\n * Function to set default value if undefined\n * @param {object, default value} input with default specified\n * @returns {object} object\n */\n function setDefaultVal(value, defaultValue) {\n return value === undefined ? defaultValue : value;\n }\n\n function getRound(x, n) {\n return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n }\n\n chartPlus.isIE = detectIE();\n chartPlus.isSafari =\n /Safari/.test(navigator.userAgent) &&\n /Apple Computer/.test(navigator.vendor);\n chartPlus.isFirefox =\n navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n // Exposing global variables\n\n extend(chartPlus, {\n chart: Chart,\n charts: charts,\n globalConfig: globalConfig,\n globalTheme: globalTheme,\n setColors: setColors,\n hierarchy: Hierarchy,\n sparkline: Sparkline,\n multiStack: MultiStack,\n table: Table\n });\n\n // Node/CommonJS - require D3\n if (\n typeof module !== 'undefined' &&\n typeof exports !== 'undefined' &&\n typeof d3 == 'undefined'\n ) {\n d3 = require('d3');\n }\n\n // Node/CommonJS exports\n if (typeof module !== 'undefined' && typeof exports !== 'undefined') {\n module.exports = chartPlus;\n }\n // The chartPlus namespace\n if (typeof window !== 'undefined') {\n window.chartPlus = chartPlus;\n }\n\n // (function() {\n // function IEevent(event, params) {\n // params = params || { bubbles: false, cancelable: false, detail: undefined };\n // var evt = document.createEvent('CustomEvent');\n // evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n // return evt;\n // }\n\n // CustomEvent.prototype = window.Event.prototype;\n\n // window.IEevent = IEevent;\n // })();\n /**\n * A Constructor for creating, updating and removing X and Y axes.\n * @constructor\n */\n function Axis() {\n this.init.apply(this, arguments);\n }\n Axis.prototype = {\n /**\n * The default configuration for both X and Y axes.\n * @type {object}\n */\n defaultConfig: {\n // color: defaultConfig.style.color || '#707070',\n gridColor: '#e9e9e9',\n lineWidth: '1px',\n tickWidth: '1px',\n title: {\n padding: 3,\n style: {\n 'text-anchor': 'middle',\n fontSize: '11px'\n }\n }\n },\n /**\n * Special default configurations for X axis.\n * @type {object}\n */\n xAxisConfig: {\n orient: 'bottom'\n },\n /**\n * Special default configurations for Y axis.\n * @type {object}\n */\n yAxisConfig: {\n orient: 'left',\n style: {\n // 'dominant-baseline': 'hanging'\n }\n },\n /**\n * Special default configurations if axis is aligned to top.\n * @type {object}\n */\n topConfig: {\n orient: 'top',\n title: {\n rotate: 0\n }\n },\n /**\n * Special default configurations if axis is aligned to bottom.\n * @type {object}\n */\n bottomConfig: {\n orient: 'bottom',\n title: {\n rotate: 0\n }\n },\n /**\n * Special default configurations if axis is aligned to right.\n * @type {object}\n */\n rightConfig: {\n orient: 'right',\n title: {\n rotate: 90\n }\n },\n /**\n * Special default configurations if axis is aligned to left.\n * @type {object}\n */\n leftConfig: {\n orient: 'left',\n title: {\n rotate: 270\n }\n },\n /**\n * Function to align axis to top or bottom or left or right\n */\n align: function() {\n var axis = this,\n x,\n y;\n if (axis.config.orient === 'top') {\n x = 0;\n y = d3Min(axis.chart.yRange);\n axis.path.attr('transform', 'translate(' + x + ',' + y + ')');\n } else if (axis.config.orient === 'bottom') {\n x = d3Min(axis.chart.xRange) + axis.path.node().getBBox().width / 2;\n y =\n d3Max(axis.chart.yRange) +\n axis.path.node().getBBox().height +\n axis.title.node().getBBox().height;\n if (axis.config.grid === true) {\n y = y - d3Max(axis.chart.yRange);\n }\n axis.title.attr('transform', 'translate(' + x + ',' + y + ')');\n x = 0;\n y = d3Max(axis.chart.yRange);\n axis.path.attr('transform', 'translate(' + x + ',' + y + ')');\n } else if (axis.config.orient === 'left') {\n x = axis.title.node().getBBox().width;\n y = d3Min(axis.chart.yRange) + axis.path.node().getBBox().height / 2;\n axis.title.attr('transform', 'translate(' + x + ',' + y + ')');\n x =\n axis.title.node().getBBox().width +\n axis.path.node().getBBox().width +\n (axis.title.node().getBBox().width > 0\n ? axis.config.title.padding\n : 0);\n if (axis.config.grid === true) {\n x = x + axis.d3Axis.tickSizeInner();\n }\n y = 0;\n axis.path.attr('transform', 'translate(' + x + ',' + y + ')');\n } else if (axis.config.orient === 'right') {\n x =\n mathAbs(axis.chart.xRange[0] - axis.chart.xRange[1]) -\n axis.path.node().getBBox().width;\n y = 0;\n axis.path.attr('transform', 'translate(' + x + ',' + y + ')');\n }\n axis.gElem.attr(\n 'transform',\n 'translate(' + (axis.config.x || 0) + ',' + (axis.config.y || 0) + ')'\n );\n },\n /**\n * Function to align ticks for ordinal scale axis\n */\n alignTicks: function() {\n var axis = this;\n if (!!axis.config.isXAxis) {\n // axis.path.selectAll('.tick').attr(\"transform\", function(d, i) {\n // return \"translate(\" + (axis.chart.xScale.bandwidth() + axis.chart.xScale.range()[i]) + \",\" + (0) + \")\";\n // });\n axis.path\n .selectAll('text')\n // .attr('x', -axis.chart.xScale.bandwidth() / 2)\n // // .each(hide(axis.chart.xScale.bandwidth()));\n .each(wrap(axis.chart.xScale.bandwidth(), axis.chart.xScale.step()));\n // .style(\"text-anchor\", \"end\")\n // .attr(\"dx\", \"-.8em\")\n // .attr(\"dy\", \".15em\")\n // .attr(\"transform\", \"rotate(-65)\");\n } else {\n axis.path.selectAll('text').attr('dy', '0.8em');\n axis.path.select('text').text('');\n }\n },\n /**\n * Function to destroy axis\n */\n destroy: function() {\n var axis = this,\n chart = axis.chart,\n key;\n\n if (axis.config.isXAxis === true) {\n delete chart.xAxis;\n } else {\n delete chart.yAxis;\n }\n\n axis.title.selectAll('*').remove();\n axis.title.node().parentNode.removeChild(axis.title.node());\n axis.path.selectAll('*').remove();\n axis.path.node().parentNode.removeChild(axis.path.node());\n axis.gElem.selectAll('*').remove();\n axis.gElem.node().parentNode.removeChild(axis.gElem.node());\n\n for (key in axis) {\n delete axis[key];\n }\n },\n /**\n * Function to hide axis\n */\n hide: function(config) {\n var axis = this;\n axis.path.selectAll('*').classed(axis.chart.cssPrefix + 'hidden', true);\n axis.title.selectAll('*').classed(axis.chart.cssPrefix + 'hidden', true);\n },\n /**\n * Function to initialise d3 and associated functions required for axis\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n * @param {boolean} render Flag whether to do rendering after initialisation\n */\n init: function(chart, config, render) {\n var axis = this;\n axis.chart = chart;\n var formatS = d3.format('.3s');\n axis.nameSpace = config.isXAxis ? 'xAxis' : 'yAxis';\n axis.config = merge(\n axis.defaultConfig,\n axis[(config.isXAxis ? 'xAxis' : 'yAxis') + 'Config'],\n config\n );\n if (!!config.isXAxis) {\n axis.config.orient =\n config.orient || (!!chart.config.invert ? 'left' : 'bottom');\n\n axis.d3Axis = d3\n .axisBottom(axis.chart.xScale)\n .ticks(5)\n .tickSizeOuter(0);\n } else {\n axis.config.orient =\n config.orient || (!!chart.config.invert ? 'top' : 'left');\n\n axis.d3Axis = d3.axisLeft(axis.chart.yScale).ticks(5);\n }\n axis.config = merge(axis.config, axis[axis.config.orient + 'Config']);\n /* ----------------------------------- Title\n if (axis.config.type === 'date') {\n axis.config.title.text = 'Date';\n }\n ----------------------------------- */\n\n if (axis.config.ticks === true && axis.config.isXAxis === true) {\n if (axis.config.type === 'date') {\n if (axis.chart.config.granularity === 'month') {\n axis.d3Axis.tickFormat(d3.timeFormat('%b %Y'));\n } else if (axis.chart.config.granularity === 'week') {\n axis.d3Axis.tickFormat(d3.timeFormat('Week %V'));\n } else {\n // D3 automatically handles tick formatting for timeline\n }\n } else if (!!axis.chart.config.categoryMap) {\n axis.d3Axis.tickFormat(function(d) {\n return axis.chart.config.categoryMap[d];\n });\n }\n } else if (axis.config.ticks === true) {\n axis.d3Axis.tickValues(\n axis.chart.yScale.ticks().filter(function(d, i) {\n return i % 2 === 0 && d % 1 === 0;\n })\n );\n if (axis.chart.config.percent === true) {\n axis.d3Axis.tickFormat(function(d) {\n return d + '%';\n });\n } else {\n axis.d3Axis.tickFormat(function(d) {\n return formatS(d).replace(/\\.0+$/, '');\n });\n }\n } else {\n axis.d3Axis.tickFormat('').tickSizeInner(0);\n }\n\n if (axis.config.grid === true) {\n axis.d3Axis.tickSizeInner(\n axis.config.isXAxis\n ? -Math.abs(axis.chart.vRange[0] - axis.chart.vRange[1])\n : -Math.abs(axis.chart.hRange[0] - axis.chart.hRange[1])\n );\n }\n\n axis.setCSS();\n if (render !== false) {\n axis.render();\n }\n },\n /**\n * Function to remove axis\n */\n remove: function() {\n var axis = this;\n axis.destroy();\n },\n /**\n * Function to render axis to the HTML\n */\n render: function() {\n var axis = this;\n axis.firstRender = false;\n axis.gElem = axis.chart.gElem\n .append('g')\n .attr('class', 'axis ' + axis.chart.cssPrefix + axis.nameSpace);\n\n axis.path = axis.gElem.append('g').call(this.d3Axis);\n\n axis.path\n .selectAll('path')\n .classed(axis.chart.cssPrefix + axis.nameSpace + '-line', true);\n axis.path\n .selectAll('line')\n .classed(axis.chart.cssPrefix + axis.nameSpace + '-tickLine', true);\n\n axis.title = axis.gElem\n .append('g')\n .attr('class', axis.chart.cssPrefix + axis.nameSpace + '-title');\n\n axis.title\n .append('text')\n .attr('transform', 'rotate(' + axis.config.title.rotate + ')')\n .text(axis.config.title.text || '');\n\n if (axis.config.type !== 'date') {\n axis.alignTicks();\n }\n axis.align();\n\n axis.path\n .on('mouseover', function() {\n if (\n d3.event.target.tagName == 'text' &&\n d3\n .select(this)\n .text()\n .indexOf('...') > -1\n ) {\n axis.chart.tooltip.show(d3.event.target.__data__);\n }\n })\n .on('mouseout', function(event) {\n axis.chart.tooltip.hide();\n });\n\n if (axis.config.isXAxis === true) {\n axis.offset =\n axis.path.node().getBBox().width -\n axis.path\n .select('path')\n .node()\n .getBBox().width;\n } else {\n axis.offset =\n axis.path.node().getBBox().height -\n axis.path\n .select('path')\n .node()\n .getBBox().height;\n }\n },\n /**\n * Function to resize axis\n */\n resize: function() {\n var axis = this,\n tickCount;\n axis.d3Axis.scale(\n axis.config.isXAxis ? axis.chart.xScale : axis.chart.yScale\n );\n\n if (axis.config.grid === true) {\n axis.d3Axis.tickSizeInner(\n axis.config.isXAxis\n ? -Math.abs(axis.chart.vRange[0] - axis.chart.vRange[1])\n : -Math.abs(axis.chart.hRange[0] - axis.chart.hRange[1])\n );\n }\n\n if (!axis.config.isXAxis) {\n axis.d3Axis.tickValues(\n axis.chart.yScale.ticks().filter(function(d, i) {\n return i % 2 === 0 && d % 1 === 0;\n })\n );\n } else if (\n axis.config.type === 'date' &&\n axis.chart.config.granularity === 'day'\n ) {\n tickCount = mathRound(\n mathAbs(axis.chart.xRange[0] - axis.chart.xRange[1]) / 100\n );\n tickCount = tickCount < 5 ? tickCount : 4;\n axis.d3Axis.ticks(tickCount % 2 === 0 ? tickCount : tickCount - 1);\n }\n axis.path.call(axis.d3Axis);\n axis.path\n .selectAll('path')\n .classed(axis.chart.cssPrefix + axis.nameSpace + '-line', true);\n axis.path\n .selectAll('line')\n .classed(axis.chart.cssPrefix + axis.nameSpace + '-tickLine', true);\n\n if (axis.config.type !== 'date') {\n axis.alignTicks();\n }\n axis.align();\n\n if (axis.config.isXAxis === true) {\n axis.offset =\n axis.path.node().getBBox().width -\n axis.path\n .select('path')\n .node()\n .getBBox().width;\n } else {\n axis.offset =\n axis.path.node().getBBox().height -\n axis.path\n .select('path')\n .node()\n .getBBox().height;\n }\n },\n /**\n * Function to create and append css classes to style tag for the axis\n */\n setCSS: function() {\n var axis = this;\n var cssString = '',\n i;\n cssString =\n cssString + ' .' + axis.chart.cssPrefix + axis.nameSpace + ' {';\n for (i in axis.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n axis.config.style[i] +\n ';';\n }\n cssString = cssString + '}';\n\n // axis styles\n cssString =\n cssString + ' .' + axis.chart.cssPrefix + axis.nameSpace + '-line {';\n if (!axis.config.line) {\n cssString = cssString + 'stroke:none;';\n }\n cssString = cssString + 'fill:none;shape-rendering: crispEdges;';\n\n if (axis.config.lineDash) {\n cssString =\n cssString + 'stroke-dasharray:' + axis.config.lineDash + ';';\n }\n if (axis.config.lineWidth) {\n cssString = cssString + 'stroke-width:' + axis.config.lineWidth + ';';\n }\n cssString = cssString + '}';\n\n // tick line styles\n cssString =\n cssString +\n ' .' +\n axis.chart.cssPrefix +\n axis.nameSpace +\n '-tickLine {';\n\n cssString = cssString + 'fill:none;shape-rendering: crispEdges;';\n\n if (axis.config.tickDash) {\n cssString =\n cssString + 'stroke-dasharray:' + axis.config.tickDash + ';';\n }\n if (axis.config.tickWidth) {\n cssString = cssString + 'stroke-width:' + axis.config.tickWidth + ';';\n }\n cssString = cssString + '}';\n\n // axis title styles\n cssString =\n cssString + ' .' + axis.chart.cssPrefix + axis.nameSpace + '-title {';\n\n for (i in axis.config.title.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n axis.config.title.style[i] +\n ';';\n }\n\n cssString = cssString + '}';\n\n axis.chart.style.node().appendChild(document.createTextNode(cssString));\n },\n /**\n * Function to show axis\n */\n show: function() {\n var axis = this;\n axis.path.selectAll('*').classed(axis.chart.cssPrefix + 'hidden', false);\n axis.title.selectAll('*').classed(axis.chart.cssPrefix + 'hidden', false);\n }\n };\n /**\n * A Constructor for instantiating constructors required for each series based on type.\n * @constructor\n */\n function Series() {\n this.init.apply(this, arguments);\n }\n Series.prototype = {\n /**\n * Function to destroy series\n */\n destroy: function() {\n var series = this,\n chart = series.chart,\n key;\n\n if (isObject(series.component)) {\n series.component.remove();\n }\n\n drop(chart.series, series);\n drop(chart.config.series, series.config);\n\n for (key in series) {\n delete series[key];\n }\n },\n /**\n * Function to get the required constructors based in chart type pie\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n */\n getConstructor: function(type, config) {\n //chart.series[idx] = chart.getConstructor(series.type || chart.chartConfig.type, extend(series, { index: idx }), chart);\n var series = this;\n switch (type) {\n case 'area':\n return new Area(series.chart, config, series);\n case 'line':\n return new Line(series.chart, config, series);\n // break;\n case 'bar':\n return new Bar(series.chart, config, series);\n case 'waterfall':\n return new Bar(series.chart, config, series);\n // break;\n case 'pie':\n return new Pie(series.chart, config, series);\n // break;\n case 'sunburst':\n return new Sunburst(series.chart, config, series);\n // break;\n default:\n return new Line(series.chart, config, series);\n }\n },\n /**\n * Function to hide the series\n */\n hide: function(updateChart) {\n var series = this;\n if (isObject(series.chart.tooltip)) {\n series.chart.tooltip.hide(true);\n }\n series.config.isHidden = true;\n if (isObject(series.component)) {\n series.component.hide();\n }\n if (isObject(series.component) && updateChart !== false) {\n if (\n !!series.config.stack ||\n !!series.chart.config.stack ||\n series.config.type === 'bar'\n ) {\n series.chart.dirtyData = true;\n }\n series.chart.yAxis.dirty = true;\n series.chart.updateChart();\n }\n },\n /**\n * Function to initialise constructors and prepare data required for series\n */\n init: function(chart, config) {\n var series = this;\n series.chart = chart;\n series.config = config;\n series.index = config.index;\n if (\n (isArray(config.data) && config.data.length > 0) ||\n isObject(config.data)\n ) {\n series.prepareData(config.data);\n series.setCSS();\n series.render();\n if (!!series.config.isHidden) {\n series.component.hide();\n }\n }\n },\n /**\n * Function to parse date for timeseries and set the data\n */\n prepareData: function(data) {\n var series = this;\n\n if (isArray(series.data)) {\n series.data.splice(0, series.data.length);\n } else {\n series.data = [];\n }\n if (isObject(data)) {\n series.data = merge({}, data);\n } else if (isArray(data) && data.length > 0) {\n if (\n series.chart.config.xAxis &&\n series.chart.config.xAxis.type === 'date'\n ) {\n if (isObject(data[0])) {\n series.data = data.map(function(d) {\n return { x: parseDate(d.x), y: d.y, dy: d.dy || 0 };\n });\n } else {\n error(\n 'Timeline data with y values alone is not supported right now',\n true\n );\n }\n } else {\n // ordinal data should be provided in {x:,y:} format\n if (!isObject(data[0])) {\n error('ordinal data should be provided in {x:,y:} format', true);\n }\n series.data.push.apply(series.data, data);\n }\n }\n },\n /**\n * Function to redraw series\n */\n redraw: function() {\n var series = this;\n if (isObject(series.component)) {\n series.component.redraw();\n }\n },\n /**\n * Function to remove series\n */\n remove: function(updateChart) {\n var series = this,\n chart = series.chart;\n\n chart.dirtySeries = true;\n series.destroy();\n\n if (updateChart === true) {\n chart.updateChart();\n }\n },\n /**\n * Function to render series to HTML\n */\n render: function() {\n var series = this;\n if (\n isObject(series.config.data) ||\n (isArray(series.config.data) && series.config.data.length > 0)\n ) {\n series.component = series.getConstructor(\n series.config.type,\n series.config\n );\n }\n },\n /**\n * Function to resize series\n */\n resize: function() {\n var series = this;\n if (isObject(series.component)) {\n series.component.resize();\n }\n },\n /**\n * Function to create and append css classes to style tag for the series\n */\n setCSS: function() {\n var series = this;\n var cssString = '';\n\n if (series.config.color) {\n cssString =\n cssString +\n ' .' +\n series.chart.cssPrefix +\n 's' +\n series.index +\n '{stroke:' +\n series.config.color +\n '}' +\n ' .' +\n series.chart.cssPrefix +\n 'f' +\n series.index +\n '{fill:' +\n series.config.color +\n '}';\n }\n series.chart.style.node().appendChild(document.createTextNode(cssString));\n },\n /**\n * Function to show series\n */\n show: function(updateChart) {\n var series = this;\n if (isObject(series.chart.tooltip)) {\n series.chart.tooltip.hide(true);\n }\n series.config.isHidden = false;\n if (isObject(series.component)) {\n series.component.show();\n }\n if (isObject(series.component) && updateChart !== false) {\n if (\n !!series.config.stack ||\n !!series.chart.config.stack ||\n series.config.type === 'bar'\n ) {\n series.chart.dirtyData = true;\n }\n series.chart.yAxis.dirty = true;\n series.chart.updateChart();\n }\n }\n };\n\n /**\n * A Constructor for instantiating constructors required for each indicator based on type.\n * @constructor\n */\n function Indicator() {\n this.init.apply(this, arguments);\n }\n Indicator.prototype = {\n defaultStyle: {\n line: {\n stroke: '#cccccc',\n 'stroke-width': 2\n },\n band: {\n stroke: 'none',\n fill: '#cccccc'\n },\n general: {\n padding: 3\n }\n },\n /**\n * Function to destroy indicator\n */\n destroy: function() {\n var indicator = this,\n chart = indicator.chart,\n key;\n drop(chart.indicators, indicator);\n if (indicator.config.type === 'line') {\n indicator.component.remove();\n } else {\n indicator.gElem.selectAll('*').remove();\n indicator.gElem.node().parentNode.removeChild(indicator.gElem.node());\n }\n for (key in indicator) {\n delete indicator[key];\n }\n },\n /**\n * Function to initialise constructors and prepare data required for indicators\n */\n init: function(chart, config) {\n var indicator = this;\n\n indicator.chart = chart;\n indicator.config = config;\n\n if (\n indicator.config.type === 'xBand' ||\n indicator.config.type === 'yBand'\n ) {\n indicator.config.style = merge(\n indicator.defaultStyle.band,\n config.style\n );\n } else if (\n indicator.config.type === 'xLine' ||\n indicator.config.type === 'yLine' ||\n indicator.config.type === 'line'\n ) {\n indicator.config.style = merge(\n indicator.defaultStyle.line,\n config.style\n );\n if (indicator.config.type === 'line' && !indicator.config.color) {\n indicator.config.color = '#cccccc';\n }\n }\n\n indicator.index = config.index;\n\n indicator.setCSS();\n indicator.prepareData();\n indicator.render();\n },\n prepareData: function() {\n var indicator = this,\n value = 0;\n\n if (isArray(indicator.data) && indicator.config.type !== 'line') {\n indicator.data.splice(0, indicator.data.length);\n } else if (!isArray(indicator.data)) {\n indicator.data = [];\n }\n\n // .attr(\"d\", function(d) { return \"M\" + d.join(\"L\") + \"Z\"; });\n if (indicator.config.type === 'yLine') {\n // set the start and end coordinates' absolute value\n value = indicator.chart.yScale(indicator.config.data[0]);\n if (indicator.chart.config.invert !== true) {\n indicator.data.push([d3Min(indicator.chart.xRange), value]);\n indicator.data.push([d3Max(indicator.chart.xRange), value]);\n } else {\n indicator.data.push([value, d3Min(indicator.chart.xRange)]);\n indicator.data.push([value, d3Min(indicator.chart.xRange)]);\n }\n } else if (indicator.config.type === 'xLine') {\n // set the start and end coordinates' absolute value\n value = indicator.chart.xScale(parseDate(indicator.config.data[0]));\n if (indicator.chart.config.invert !== true) {\n indicator.data.push([value, d3Min(indicator.chart.yRange)]);\n indicator.data.push([value, d3Max(indicator.chart.yRange)]);\n } else {\n indicator.data.push([d3Min(indicator.chart.yRange), value]);\n indicator.data.push([d3Max(indicator.chart.yRange), value]);\n }\n } else if (indicator.config.type === 'yBand') {\n // set the absolute value of the 4 coordinates\n if (indicator.chart.config.invert !== true) {\n value = indicator.chart.yScale(indicator.config.data[0]);\n indicator.data.push([d3Min(indicator.chart.xRange), value]);\n indicator.data.push([d3Max(indicator.chart.xRange), value]);\n\n value = indicator.chart.yScale(indicator.config.data[1]);\n indicator.data.push([d3Max(indicator.chart.xRange), value]);\n indicator.data.push([d3Min(indicator.chart.xRange), value]);\n } else {\n value = indicator.chart.yScale(indicator.config.data[0]);\n indicator.data.push([value, d3Min(indicator.chart.xRange)]);\n indicator.data.push([value, d3Max(indicator.chart.xRange)]);\n\n value = indicator.chart.yScale(indicator.config.data[1]);\n indicator.data.push([value, d3Max(indicator.chart.xRange)]);\n indicator.data.push([value, d3Min(indicator.chart.xRange)]);\n }\n } else if (indicator.config.type === 'xBand') {\n // set the absolute value of the 4 coordinates\n if (indicator.chart.config.invert !== true) {\n value = indicator.chart.xScale(\n parseDate(indicator.config.data[0]).setHours(0, 0, 0, 0)\n );\n indicator.data.push([value, d3Min(indicator.chart.yRange)]);\n indicator.data.push([value, d3Max(indicator.chart.yRange)]);\n\n value = indicator.chart.xScale(\n parseDate(indicator.config.data[1]).setHours(23, 59, 59, 999)\n );\n indicator.data.push([value, d3Max(indicator.chart.yRange)]);\n indicator.data.push([value, d3Min(indicator.chart.yRange)]);\n } else {\n value = indicator.chart.xScale(\n parseDate(indicator.config.data[0]).setHours(0, 0, 0, 0)\n );\n indicator.data.push([d3Min(indicator.chart.yRange), value]);\n indicator.data.push([d3Max(indicator.chart.yRange), value]);\n\n value = indicator.chart.xScale(\n parseDate(indicator.config.data[1]).setHours(23, 59, 59, 999)\n );\n indicator.data.push([d3Max(indicator.chart.yRange), value]);\n indicator.data.push([d3Min(indicator.chart.yRange), value]);\n }\n } else if (\n indicator.config.type === 'line' &&\n indicator.data.length === 0\n ) {\n if (\n indicator.chart.config.xAxis &&\n indicator.chart.config.xAxis.type === 'date'\n ) {\n indicator.data = indicator.config.data.map(function(d) {\n return { x: parseDate(d.x), y: d.y, dy: d.dy || 0 };\n });\n } else {\n error(\n 'Timeline data with y values alone is not supported right now',\n true\n );\n }\n }\n },\n /**\n * Function to remove indicator\n */\n remove: function() {\n var indicator = this;\n indicator.destroy();\n },\n /**\n * Function to render indicator\n */\n render: function() {\n var indicator = this,\n textSize;\n if (indicator.config.type === 'line') {\n indicator.component = new Line(\n indicator.chart,\n merge(indicator.config, { indicator: true }),\n indicator\n );\n } else {\n indicator.gElem = indicator.chart.gElem\n .append('g')\n .attr(\n 'class',\n indicator.chart.cssPrefix + 'indicator-' + indicator.index\n );\n\n indicator.gElem.classed(indicator.chart.cssPrefix + 'clipChart', true);\n\n indicator.gElem.append('path').attr('d', function(d) {\n return 'M' + indicator.data.join('L') + 'Z';\n });\n }\n\n if (\n indicator.config.type === 'xLine' ||\n indicator.config.type === 'yLine'\n ) {\n indicator.gElem\n .append('text')\n .text(\n dateFormat(new Date()) === indicator.config.data[0]\n ? 'Today'\n : indicator.config.data[0]\n );\n\n textSize = indicator.gElem\n .select('text')\n .node()\n .getBBox();\n\n if (indicator.config.type === 'xLine') {\n indicator.gElem\n .select('text')\n .styles({ 'text-anchor': 'end', stroke: 'none' })\n .attr('transform', 'rotate(-90)')\n .attr('x', d3Min(indicator.chart.yRange));\n\n if (\n indicator.chart.xScale(parseDate(indicator.config.data[0])) -\n textSize.height -\n indicator.defaultStyle.general.padding <\n d3Min(indicator.chart.xRange)\n ) {\n indicator.gElem\n .select('text')\n .attr(\n 'y',\n indicator.chart.xScale(parseDate(indicator.config.data[0])) +\n textSize.height +\n indicator.defaultStyle.general.padding\n );\n } else {\n indicator.gElem\n .select('text')\n .attr(\n 'y',\n indicator.chart.xScale(parseDate(indicator.config.data[0])) -\n indicator.defaultStyle.general.padding\n );\n }\n }\n\n if (indicator.config.type === 'yLine') {\n indicator.gElem\n .select('text')\n .styles({ 'text-anchor': 'end', stroke: 'none' })\n .attr('x', d3Max(indicator.chart.xRange));\n if (\n indicator.chart.yScale(indicator.config.data[0]) -\n textSize.height -\n indicator.defaultStyle.general.padding >\n d3Min(indicator.chart.yRange)\n ) {\n indicator.gElem\n .select('text')\n .attr(\n 'y',\n indicator.chart.yScale(indicator.config.data[0]) -\n indicator.defaultStyle.general.padding\n );\n } else {\n indicator.gElem\n .select('text')\n .attr(\n 'y',\n indicator.chart.yScale(indicator.config.data[0]) +\n textSize.height +\n indicator.defaultStyle.general.padding\n );\n }\n }\n }\n },\n /**\n * Function to resize the indicator\n */\n resize: function() {\n var indicator = this,\n textSize;\n indicator.prepareData();\n\n if (indicator.config.type === 'line') {\n indicator.component.resize();\n } else {\n indicator.gElem.select('path').attr('d', function(d) {\n return 'M' + indicator.data.join('L') + 'Z';\n });\n }\n\n if (\n indicator.config.type === 'xLine' ||\n indicator.config.type === 'yLine'\n ) {\n textSize = indicator.gElem\n .select('text')\n .node()\n .getBBox();\n\n if (indicator.config.type === 'xLine') {\n indicator.gElem\n .select('text')\n .styles({ 'text-anchor': 'end', stroke: 'none' })\n .attr('transform', 'rotate(-90)')\n .attr('x', d3Min(indicator.chart.yRange));\n\n // if ((indicator.chart.xScale(parseDate(indicator.config.data[0])) + textSize.height + indicator.defaultStyle.general.padding) < d3Max(indicator.chart.xRange)) {\n if (\n indicator.chart.xScale(parseDate(indicator.config.data[0])) -\n textSize.height -\n indicator.defaultStyle.general.padding <\n d3Min(indicator.chart.xRange)\n ) {\n indicator.gElem\n .select('text')\n .attr(\n 'y',\n indicator.chart.xScale(parseDate(indicator.config.data[0])) +\n textSize.height +\n indicator.defaultStyle.general.padding\n );\n } else {\n indicator.gElem\n .select('text')\n .attr(\n 'y',\n indicator.chart.xScale(parseDate(indicator.config.data[0])) -\n indicator.defaultStyle.general.padding\n );\n }\n }\n\n if (indicator.config.type === 'yLine') {\n indicator.gElem\n .select('text')\n .styles({ 'text-anchor': 'end', stroke: 'none' })\n .attr('x', d3Max(indicator.chart.xRange));\n if (\n indicator.chart.yScale(indicator.config.data[0]) -\n textSize.height -\n indicator.defaultStyle.general.padding >\n d3Min(indicator.chart.yRange)\n ) {\n indicator.gElem\n .select('text')\n .attr(\n 'y',\n indicator.chart.yScale(indicator.config.data[0]) -\n indicator.defaultStyle.general.padding\n );\n } else {\n indicator.gElem\n .select('text')\n .attr(\n 'y',\n indicator.chart.yScale(indicator.config.data[0]) +\n textSize.height +\n indicator.defaultStyle.general.padding\n );\n }\n }\n }\n },\n /**\n * Function to create and append css classes to style tag for the indicator\n */\n setCSS: function() {\n var indicator = this;\n var cssString = '';\n if (isObject(indicator.config.style)) {\n cssString =\n cssString +\n ' .' +\n indicator.chart.cssPrefix +\n 'indicator-' +\n indicator.index +\n ' {';\n for (var key in indicator.config.style) {\n cssString = cssString + key + ':' + indicator.config.style[key] + ';';\n }\n cssString = cssString + '}';\n }\n indicator.chart.style\n .node()\n .appendChild(document.createTextNode(cssString));\n }\n };\n\n /**\n * A Constructor for creating, updating and removing area series.\n * @constructor\n */\n function Area() {\n this.init.apply(this, arguments);\n }\n Area.prototype = {\n /**\n * Default configurations for area.\n * @type {object}\n */\n defaultConfig: {\n style: {\n stroke: 'none',\n shapeRendering: 'auto'\n }\n },\n /**\n * Function to destroy area component\n */\n destroy: function() {\n var area = this,\n chart = area.chart,\n series = area.series,\n key;\n delete series.component;\n\n area.gElem.selectAll('*').remove();\n area.gElem.node().parentNode.removeChild(area.gElem.node());\n\n for (key in area) {\n delete area[key];\n }\n },\n /**\n * Function to draw path and path\n */\n drawSeries: function() {\n var area = this;\n\n area.gElem.selectAll('path').remove();\n\n area.gElem.datum(area.series.data);\n area.gElem.append('path').attr('d', function(d) {\n return area.d3area(d);\n });\n\n if (area.series.config.color) {\n area.gElem.select('path').style('fill', area.series.config.color);\n } else {\n area.gElem\n .select('path')\n .style('fill', area.chart.colorScale(area.series.config.name));\n }\n },\n /**\n * Function to hide area series\n */\n hide: function() {\n var area = this;\n area.gElem.classed(area.chart.cssPrefix + 'hidden', true);\n },\n /**\n * Function to initialise d3 and associated functions required for area series\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n */\n init: function(chart, config, series) {\n var area = this;\n area.chart = chart;\n area.series = series;\n area.config = merge(area.config, this.defaultConfig);\n\n if (isObject(this.chart.config.sharedConfig.area)) {\n merge(true, area.config, this.chart.config.sharedConfig.area);\n }\n\n merge(true, area.config, config);\n\n area.d3area = d3\n .area()\n .x(function(d, i) {\n return area.chart.xScale(d.x);\n })\n .y0(function(d) {\n return area.chart.yScale(d.y + (d.dy || 0));\n // console.log(d);\n // return area.chart.yScale((d.dy > 0) ? (d.dy) : 0);\n })\n .y1(function(d) {\n return area.chart.yScale(d.dy > 0 ? d.dy : 0);\n });\n\n if (!!area.config.interpolation) {\n area.d3area.interpolate(area.config.interpolation);\n }\n\n area.setCSS();\n area.render();\n },\n /**\n * Function to redraw area\n */\n redraw: function() {\n var area = this;\n area.drawSeries();\n },\n /**\n * Function to remove area\n */\n remove: function() {\n var area = this;\n area.destroy();\n },\n /**\n * Function to render path to HTML\n */\n render: function() {\n var area = this;\n area.gElem = area.chart.gElem\n .append('g')\n .attr('class', area.chart.cssPrefix + 'series-' + area.series.index);\n\n area.gElem.classed(area.chart.cssPrefix + 'clipChart', true);\n\n area.drawSeries();\n },\n /**\n * Function to resize area\n */\n resize: function() {\n var area = this;\n area.gElem.selectAll('path').attr('d', function(d) {\n return area.d3area(d);\n });\n },\n /**\n * Function to create and append css classes to style tag for the area series\n */\n setCSS: function() {\n var area = this;\n var cssString = '',\n i,\n j;\n cssString =\n cssString +\n ' .' +\n area.chart.cssPrefix +\n 'series-' +\n area.series.index +\n ' {';\n for (i in area.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n area.config.style[i] +\n ';';\n }\n cssString = cssString + '}';\n\n area.chart.style.node().appendChild(document.createTextNode(cssString));\n },\n /**\n * Function to show area path\n */\n show: function() {\n var area = this;\n area.gElem.classed(area.chart.cssPrefix + 'hidden', false);\n }\n };\n\n /**\n * A Constructor for creating, updating and removing bar component in chart.\n * @constructor\n */\n function Bar() {\n this.init.apply(this, arguments);\n }\n Bar.prototype = {\n /**\n * The default configuration for bar.\n * @type {object}\n */\n defaultConfig: {\n style: {\n fillOpacity: 1\n }\n },\n /**\n * Function to destroy bar\n */\n destroy: function() {\n var bar = this,\n chart = bar.chart,\n series = bar.series,\n key;\n delete series.component;\n\n bar.gElem.selectAll('*').remove();\n bar.gElem.node().parentNode.removeChild(bar.gElem.node());\n\n for (key in bar) {\n delete bar[key];\n }\n },\n /**\n * Function to draw the bar series\n */\n drawSeries: function() {\n var bar = this,\n className;\n\n bar.gElem.selectAll('.chartPlus-bar').remove();\n if (!!bar.config.startDate && !!bar.config.endDate) {\n bar.gElem.datum(\n bar.series.data.filter(function(d) {\n return (\n d.x.getTime() >= bar.config.startDate.getTime() &&\n d.x.getTime() <= bar.config.endDate.getTime()\n );\n })\n );\n } else if (isArray(bar.config.categories)) {\n bar.gElem.datum(\n bar.series.data.filter(function(d) {\n return bar.config.categories.indexOf(d.x) > -1;\n })\n );\n } else {\n bar.gElem.datum(bar.series.data);\n }\n bar.gElem\n .selectAll('.bar')\n .data(bar.gElem.datum())\n .enter()\n .append('rect')\n .attr('class', 'chartPlus-bar')\n .attr('x', function(d, i) {\n return bar.config.invert === true\n ? bar.chart.yScale(d.dy || 0)\n : bar.chart.xScale(d.x) +\n (bar.series.config.group || 0) * bar.chart.rectWidth;\n })\n .attr('y', function(d, i) {\n return bar.config.invert === true\n ? bar.chart.xScale(d.x) +\n (bar.series.config.group || 0) * bar.chart.rectWidth\n : bar.chart.yScale(d.y + (d.dy || 0));\n })\n .attr('width', function(d, i) {\n return bar.config.invert === true\n ? bar.chart.yScale(d.y)\n : bar.chart.rectWidth;\n })\n .attr('height', function(d, i) {\n return bar.config.invert === true\n ? bar.chart.rectWidth\n : mathMax(bar.chart.yRange[0], bar.chart.yRange[1]) -\n bar.chart.yScale(d.y);\n });\n\n if (bar.series.config.color) {\n bar.gElem.selectAll('rect').style('fill', bar.series.config.color);\n } else {\n bar.gElem\n .selectAll('rect')\n .style('fill', bar.chart.colorScale(bar.series.config.name));\n }\n },\n /**\n * Function to hide bar\n */\n hide: function() {\n var bar = this;\n bar.gElem.classed(bar.chart.cssPrefix + 'hidden', true);\n },\n /**\n * Function to initialise d3 and associated functions required for bar series\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n * @param {Object} series Parent series object\n */\n init: function(chart, config, series) {\n var bar = this;\n bar.chart = chart;\n bar.series = series;\n bar.config = merge(bar.config, this.defaultConfig);\n\n if (isObject(this.chart.config.sharedConfig.bar)) {\n merge(true, bar.config, this.chart.config.sharedConfig.bar);\n }\n\n merge(true, bar.config, config);\n if (!!bar.config.startDate) {\n bar.config.startDate = parseDate(bar.config.startDate);\n }\n if (!!bar.config.endDate) {\n bar.config.endDate = parseDate(\n !!bar.config.endDate\n ? bar.config.endDate\n : bar.config.data[bar.config.data.length - 1].x\n );\n }\n bar.setCSS();\n bar.render();\n },\n /**\n * Function to remove existing rect elements and redraw bars\n */\n redraw: function() {\n var bar = this;\n bar.drawSeries();\n },\n /**\n * Function to remove bar\n */\n remove: function() {\n var bar = this;\n bar.destroy();\n },\n /**\n * Function to render bar\n */\n render: function(container) {\n var bar = this;\n bar.gElem = bar.chart.gElem\n .append('g')\n .attr('class', NAMESPACE + 'series-' + bar.series.index);\n\n if (bar.config.tooltip !== false) {\n if (\n !!bar.chart.config.tooltip.actions &&\n bar.chart.config.tooltip.actions.length > 0\n ) {\n bar.gElem.style('cursor', 'pointer');\n }\n bar.gElem\n .on('mouseover', function() {\n if (d3.event.target.tagName == 'rect') {\n bar.chart.tooltip.show(\n d3.event.target.__data__,\n bar.series.config.name || 'Series ' + bar.series.config.index\n );\n }\n })\n .on('click', function() {\n if (d3.event.target.tagName == 'rect') {\n bar.chart.tooltip.show(\n d3.event.target.__data__,\n bar.series.config.name || 'Series ' + bar.series.config.index,\n true\n );\n }\n })\n .on('mouseout', function(event) {\n bar.chart.tooltip.hide();\n });\n }\n bar.gElem.classed(bar.chart.cssPrefix + 'clipChart', true);\n\n if (isFunction(bar.chart.xScale.bandwidth)) {\n bar.gElem.attr(\n 'transform',\n 'translate(' +\n ((bar.chart.xScale.bandwidth() - bar.chart.rectWidth) / 2 || 0) +\n ',' +\n 0 +\n ')'\n );\n }\n bar.drawSeries();\n },\n /**\n * Function to resize bar\n */\n resize: function() {\n var bar = this;\n if (isFunction(bar.chart.xScale.bandwidth)) {\n bar.gElem.attr(\n 'transform',\n 'translate(' +\n ((bar.chart.xScale.bandwidth() - bar.chart.rectWidth) / 2 || 0) +\n ',' +\n 0 +\n ')'\n );\n }\n bar.gElem\n .selectAll('rect')\n .attr('x', function(d, i) {\n return bar.config.invert === true\n ? bar.chart.yScale(d.dy || 0)\n : bar.chart.xScale(d.x) +\n (bar.series.config.group || 0) * bar.chart.rectWidth;\n })\n .attr('y', function(d, i) {\n return bar.config.invert === true\n ? bar.chart.xScale(d.x) +\n (bar.series.config.group || 0) * bar.chart.rectWidth\n : bar.chart.yScale(d.y + (d.dy || 0));\n })\n .attr('width', function(d, i) {\n return bar.config.invert === true\n ? bar.chart.yScale(d.y)\n : bar.chart.rectWidth;\n })\n .attr('height', function(d, i) {\n return bar.config.invert === true\n ? bar.chart.rectWidth\n : mathMax(bar.chart.yRange[0], bar.chart.yRange[1]) -\n bar.chart.yScale(d.y);\n });\n },\n /**\n * Function to create and append css classes to style tag for the bars\n */\n setCSS: function() {\n var bar = this;\n var cssString = '',\n i;\n\n cssString =\n cssString +\n ' .' +\n bar.chart.cssPrefix +\n 'series-' +\n bar.series.index +\n ' {';\n for (i in bar.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n bar.config.style[i] +\n ';';\n }\n cssString = cssString + '}';\n bar.chart.style.node().appendChild(document.createTextNode(cssString));\n },\n /**\n * Function to show bar\n */\n show: function(updateChart) {\n var bar = this;\n bar.gElem.classed(bar.chart.cssPrefix + 'hidden', false);\n }\n };\n\n /**\n * A Constructor for creating, updating and removing time range selection slider.\n * @constructor\n */\n function Brush() {\n this.init.apply(this, arguments);\n }\n Brush.prototype = {\n /**\n * The default configuration for brush.\n * @type {object}\n */\n defaultConfig: {\n height: 20,\n padding: 3,\n color: '#1f77b4'\n // color: '#cccccc',\n // style: {\n // 'fillOpacity': 0.5\n // }\n },\n /**\n * Function to destroy brush\n */\n destroy: function() {\n var brush = this,\n chart = brush.chart,\n key;\n brush.gElem.selectAll('*').remove();\n brush.gElem.node().parentNode.removeChild(brush.gElem.node());\n\n for (key in brush) {\n delete brush[key];\n }\n },\n resize: function(x, y) {\n var brush = this;\n brush.gElem.attr('transform', 'translate(0,' + (!!y ? y : 0) + ')');\n brush.gElem\n .select('rect')\n .attr('x', brush.chart.brushScale.range()[0])\n .attr(\n 'width',\n brush.chart.brushScale.range()[1] - brush.chart.brushScale.range()[0]\n );\n\n brush.container\n .select('.totalData')\n .select('path')\n .attr('d', function(d) {\n return brush.d3Area(d);\n });\n brush.container\n .select('.axis')\n .attr('y1', brush.config.height)\n .attr('x1', brush.chart.brushScale.range()[0])\n .attr('y2', brush.config.height)\n .attr('x2', brush.chart.brushScale.range()[1]);\n\n brush.container\n .select('.leftRect')\n .attr('x', brush.chart.brushScale(brush.chart.brushScale.domain()[0]))\n .attr(\n 'width',\n brush.chart.brushScale(brush.chart.brushDomain[0]) -\n brush.chart.brushScale(brush.chart.brushScale.domain()[0])\n );\n\n brush.container\n .select('.rightRect')\n .attr('x', brush.chart.brushScale(brush.chart.brushDomain[1]))\n .attr(\n 'width',\n brush.chart.brushScale(brush.chart.brushScale.domain()[1]) -\n brush.chart.brushScale(brush.chart.brushDomain[1])\n );\n\n brush.container\n .select('.d3Brush')\n .call(brush.d3Brush)\n .selectAll('rect')\n .attr('y', 0)\n .style('fill-opacity', 0)\n .attr('height', brush.config.height);\n\n // Set the selection\n brush.container\n .select('.d3Brush')\n .call(\n brush.d3Brush.move,\n [brush.chart.brushDomain[0], brush.chart.brushDomain[1]].map(\n brush.chart.brushScale\n )\n );\n\n brush.container\n .select('.handle.handle--e')\n // .select('rect')\n .attr('y', 3)\n .attr('height', brush.config.height - 6)\n .style('fill', '#34a7df')\n .style('fill-opacity', 1)\n .style('visibility', 'visible');\n\n brush.container\n .select('.handle.handle--w')\n // .select('rect')\n .attr('y', 3)\n .attr('height', brush.config.height - 6)\n .style('fill', '#34a7df')\n .style('fill-opacity', 1)\n .style('visibility', 'visible');\n },\n /**\n * Function to initialise Brush\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n * @param {boolean} render Flag whether to do rendering after initialisation\n */\n init: function(chart, config, render) {\n var brush = this;\n brush.firstRender = true;\n brush.chart = chart;\n brush.config = merge(this.defaultConfig, config);\n brush.data = [];\n var tempData = {},\n yMax = 0;\n\n chart.config.series.forEach(function(series) {\n series.data.forEach(function(d, i) {\n if (!!tempData[d.x]) {\n tempData[d.x] = tempData[d.x] + d.y;\n } else {\n tempData[d.x] = d.y;\n }\n });\n });\n chart.innerLegends.forEach(function(key) {\n if (isNumber(tempData[key])) {\n if (yMax < tempData[key]) {\n yMax = tempData[key];\n }\n brush.data.push({ x: parseDate(key), y: tempData[key] });\n } else {\n brush.data.push({ x: parseDate(key), y: 0 });\n }\n });\n\n brush.d3Brush = d3\n .brushX()\n .extent([\n [brush.chart.brushScale.range()[0], 0],\n [brush.chart.brushScale.range()[1], brush.config.height]\n ])\n .on('brush', function() {\n brush.chart.updateOnBrush();\n brush.container\n .select('.leftRect')\n .attr(\n 'x',\n brush.chart.brushScale(brush.chart.brushScale.domain()[0])\n )\n .attr(\n 'width',\n brush.chart.brushScale(brush.chart.brushDomain[0]) -\n brush.chart.brushScale(brush.chart.brushScale.domain()[0])\n );\n\n brush.container\n .select('.rightRect')\n .attr('x', brush.chart.brushScale(brush.chart.brushDomain[1]))\n .attr(\n 'width',\n brush.chart.brushScale(brush.chart.brushScale.domain()[1]) -\n brush.chart.brushScale(brush.chart.brushDomain[1])\n );\n\n return;\n });\n\n brush.yScale = d3\n .scaleLinear()\n .domain([0, yMax])\n .range([brush.config.height, 0]);\n brush.d3Area = d3\n .area()\n .x(function(d, i) {\n return brush.chart.brushScale(d.x);\n })\n .y(brush.config.height)\n .y1(function(d) {\n return brush.yScale(d.y);\n });\n brush.setCSS();\n if (render !== false) {\n brush.render();\n }\n },\n /**\n * Function to append brush to the HTML\n */\n render: function() {\n var brush = this;\n brush.firstRender = false;\n brush.gElem = brush.chart.gElem\n .append('g')\n .attr('class', brush.chart.cssPrefix + 'brush');\n\n brush.gElem\n .append('rect')\n .attr('fill', 'none')\n .attr(\n 'width',\n brush.chart.brushScale.range()[1] - brush.chart.brushScale.range()[0]\n )\n .attr('height', brush.config.height + brush.config.padding * 2)\n .attr('x', brush.chart.brushScale.range()[0])\n .attr('y', 0);\n\n brush.firstRender = false;\n\n brush.container = brush.gElem\n .append('g')\n .attr('transform', 'translate(0,' + brush.config.padding + ')');\n\n brush.container\n .append('line')\n .attr('class', 'axis')\n .style('stroke', '#c7c7c7')\n .style('fill', 'none')\n .style('shape-rendering', 'crispEdges')\n\n .attr('y1', brush.config.height)\n .attr('x1', brush.chart.brushScale.range()[0])\n .attr('y2', brush.config.height)\n .attr('x2', brush.chart.brushScale.range()[1]);\n\n brush.container\n .append('g')\n .attr('class', 'totalData')\n .style('fill', brush.config.color)\n .style('fill-opacity', 0.5)\n .style('stroke', 'none')\n .datum(brush.data)\n .append('path')\n .attr('d', function(d) {\n return brush.d3Area(d);\n });\n\n brush.container\n .append('rect')\n .attr('class', 'leftRect')\n .style('fill', '#cccccc')\n .style('fill-opacity', 0.5)\n .attr('x', brush.chart.brushScale(brush.chart.brushScale.domain()[0]))\n .attr('y', 0)\n .attr(\n 'width',\n brush.chart.brushScale(brush.chart.brushDomain[0]) -\n brush.chart.brushScale(brush.chart.brushScale.domain()[0])\n )\n .attr('height', brush.config.height);\n brush.container\n .append('rect')\n .attr('class', 'rightRect')\n .style('fill', '#cccccc')\n .style('fill-opacity', 0.5)\n .attr('x', brush.chart.brushScale(brush.chart.brushDomain[1]))\n .attr('y', 0)\n .attr(\n 'width',\n brush.chart.brushScale(brush.chart.brushScale.domain()[1]) -\n brush.chart.brushScale(brush.chart.brushDomain[1])\n )\n .attr('height', brush.config.height);\n\n brush.container\n .append('g')\n .attr('class', 'd3Brush')\n .call(brush.d3Brush)\n .selectAll('rect')\n .attr('y', 0)\n .style('fill-opacity', 0)\n .attr('height', brush.config.height);\n\n // Set the selection\n brush.container\n .select('.d3Brush')\n .call(\n brush.d3Brush.move,\n [brush.chart.brushDomain[0], brush.chart.brushDomain[1]].map(\n brush.chart.brushScale\n )\n );\n\n brush.container\n .select('.handle.handle--e')\n // .select('rect')\n .attr('y', 3)\n .attr('height', brush.config.height - 6)\n .style('fill', '#34a7df')\n .style('fill-opacity', 1)\n .style('visibility', 'visible');\n\n brush.container\n .select('.handle.handle--w')\n // .select('rect')\n .attr('y', 3)\n .attr('height', brush.config.height - 6)\n .style('fill', '#34a7df')\n .style('fill-opacity', 1)\n .style('visibility', 'visible');\n },\n /**\n * Function to remove brush\n */\n remove: function() {\n var brush = this;\n brush.destroy();\n },\n /**\n * Function to create and append css classes to style tag for the brush\n */\n setCSS: function() {\n var brush = this;\n var cssString = '',\n i;\n\n // cssString = cssString + ' .' + brush.chart.cssPrefix + 'brush {';\n // for (i in brush.config.style) {\n // cssString = cssString + i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() + ':' + brush.config.style[i] + ';';\n // }\n // if (brush.config.color) {\n // cssString = cssString + 'fill:' + brush.config.color + ';';\n // }\n // cssString = cssString + '}';\n // brush.chart.style.node().appendChild(document.createTextNode(cssString));\n }\n };\n\n /**\n * A Constructor for creating, updating and removing line series.\n * @constructor\n */\n function Line() {\n this.init.apply(this, arguments);\n }\n Line.prototype = {\n /**\n * Default configurations for line.\n * @type {object}\n */\n defaultConfig: {\n marker: {\n radius: 3,\n display: true,\n symbol: 'circle',\n type: 'small' // small/large/highlight\n },\n style: {\n fill: 'none',\n strokeWidth: '2px',\n shapeRendering: 'auto'\n }\n },\n\n /**\n * Special default configurations for points on line.\n * @type {object}\n */\n markerCSS: {\n small: {\n strokeWidth: '2px',\n fill: '#ffffff',\n hover: {\n cursor: 'pointer',\n strokeWidth: '7px',\n strokeOpacity: 0.3\n }\n },\n highlight: {\n strokeWidth: '2px',\n fill: '#ffffff',\n hover: {\n strokeWidth: '4px'\n }\n }\n },\n /**\n * Function to destroy line component\n */\n destroy: function() {\n var line = this,\n chart = line.chart,\n parent = line.parent,\n key;\n delete parent.component;\n\n line.gElem.selectAll('*').remove();\n line.gElem.node().parentNode.removeChild(line.gElem.node());\n\n for (key in line) {\n delete line[key];\n }\n },\n /**\n * Function to draw path and path\n */\n drawSeries: function() {\n var line = this;\n\n line.gElem.selectAll('path').remove();\n line.gElem.selectAll('circle').remove();\n\n line.gElem.datum(line.parent.data);\n\n line.gElem.append('path').attr('d', function(d) {\n return line.d3Line(d);\n });\n\n if (line.parent.config.color) {\n line.gElem.select('path').style('stroke', line.parent.config.color);\n } else {\n line.gElem\n .select('path')\n .style('stroke', line.chart.colorScale(line.parent.config.name));\n }\n\n if (line.config.marker.display !== false) {\n line.gElem\n .selectAll('.marker')\n .data(\n line.gElem.datum().filter(function(d) {\n return d.y !== 0;\n })\n )\n .enter()\n .append('circle')\n .attr(\n 'class',\n line.chart.cssPrefix + 'marker ' + line.config.marker.type\n )\n .attr('cx', function(d, i) {\n return line.config.invert === true\n ? line.chart.yScale(d.y)\n : line.chart.xScale(d.x);\n })\n .attr('cy', function(d) {\n return line.config.invert === true\n ? line.chart.xScale(d.x)\n : line.chart.yScale(d.y);\n })\n .attr('r', line.config.marker.radius);\n\n if (line.parent.config.color) {\n line.gElem\n .selectAll('circle')\n .style('stroke', line.parent.config.color);\n } else {\n line.gElem\n .selectAll('circle')\n .style('stroke', line.chart.colorScale(line.parent.config.name));\n }\n }\n },\n /**\n * Function to hide line series\n */\n hide: function() {\n var line = this;\n line.gElem.classed(line.chart.cssPrefix + 'hidden', true);\n },\n /**\n * Function to initialise d3 and associated functions required for line series\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n * @param {Object} parent Parent object. it can be a series or indicator\n */\n init: function(chart, config, parent) {\n var line = this;\n line.chart = chart;\n line.parent = parent;\n line.config = merge(line.config, this.defaultConfig);\n\n if (isObject(this.chart.config.sharedConfig.line)) {\n merge(true, line.config, this.chart.config.sharedConfig.line);\n }\n merge(true, line.config, config);\n\n line.d3Line = d3\n .line()\n .x(function(d, i) {\n return line.chart.config.invert === true\n ? line.chart.yScale(d.y)\n : line.chart.xScale(d.x);\n })\n .y(function(d) {\n return line.chart.config.invert === true\n ? line.chart.xScale(d.x)\n : line.chart.yScale(d.y);\n });\n if (!!line.config.interpolation) {\n line.d3Line.curve(d3.curveStepAfter);\n }\n\n line.setCSS();\n line.render();\n },\n /**\n * Function to redraw line\n */\n redraw: function() {\n var line = this;\n line.drawSeries();\n },\n /**\n * Function to remove line\n */\n remove: function() {\n var line = this;\n line.destroy();\n },\n /**\n * Function to render path to HTML\n */\n render: function() {\n var line = this;\n line.gElem = line.chart.gElem\n .append('g')\n .attr(\n 'class',\n line.chart.cssPrefix +\n (line.config.indicator === true ? 'indicator-' : 'series-') +\n line.parent.index\n );\n\n if (line.config.tooltip !== false) {\n if (\n !!line.chart.config.tooltip.actions &&\n line.chart.config.tooltip.actions.length > 0\n ) {\n line.gElem.classed('cursorPointer', true);\n }\n line.gElem\n .on('mouseover', function() {\n if (d3.event.target.tagName == 'circle') {\n line.chart.tooltip.show(\n d3.event.target.__data__,\n line.parent.config.name ||\n (line.config.indicator === true ? 'Indicator ' : 'Series ') +\n line.parent.config.index\n );\n }\n })\n .on('mouseout', function(event) {\n line.chart.tooltip.hide();\n })\n .on('click', function(event) {\n if (d3.event.target.tagName == 'circle') {\n line.chart.tooltip.show(\n d3.event.target.__data__,\n line.parent.config.name ||\n (line.config.indicator === true ? 'Indicator ' : 'Series ') +\n line.parent.config.index,\n true\n );\n }\n });\n }\n line.gElem.classed(line.chart.cssPrefix + 'clipChart', true);\n\n line.drawSeries();\n },\n /**\n * Function to resize line\n */\n resize: function() {\n var line = this;\n line.gElem.selectAll('path').attr('d', function(d) {\n return line.d3Line(d);\n });\n\n if (line.config.marker.display !== false) {\n line.gElem\n .selectAll('.' + line.chart.cssPrefix + 'marker')\n .attr('cx', function(d, i) {\n return line.config.invert === true\n ? line.chart.yScale(d.y)\n : line.chart.xScale(d.x);\n })\n .attr('cy', function(d) {\n return line.config.invert === true\n ? line.chart.xScale(d.x)\n : line.chart.yScale(d.y);\n });\n }\n },\n /**\n * Function to create and append css classes to style tag for the line series\n */\n setCSS: function() {\n var line = this;\n var cssString = '',\n i,\n j,\n parentName;\n\n parentName = line.config.indicator === true ? 'indicator-' : 'series-';\n\n cssString =\n cssString +\n ' .' +\n line.chart.cssPrefix +\n parentName +\n line.parent.index +\n ' {';\n for (i in line.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n line.config.style[i] +\n ';';\n }\n cssString = cssString + '}';\n\n // marker CSS\n cssString =\n cssString +\n ' .' +\n line.chart.cssPrefix +\n parentName +\n line.parent.index +\n ' .' +\n line.chart.cssPrefix +\n 'marker' +\n '.' +\n line.config.marker.type +\n ' {';\n for (i in line.markerCSS[line.config.marker.type]) {\n if (!isObject(line.markerCSS[line.config.marker.type][i])) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n line.markerCSS[line.config.marker.type][i] +\n ';';\n }\n }\n for (i in line.config.marker.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n line.config.marker.style[i] +\n ';';\n }\n cssString = cssString + '}';\n\n // hover styles for marker\n for (i in line.markerCSS[line.config.marker.type]) {\n if (isObject(line.markerCSS[line.config.marker.type][i])) {\n cssString =\n cssString +\n ' .' +\n line.chart.cssPrefix +\n parentName +\n line.parent.index +\n ' .' +\n line.chart.cssPrefix +\n 'marker' +\n '.' +\n line.config.marker.type +\n ':' +\n i +\n ' {';\n for (j in line.markerCSS[line.config.marker.type][i]) {\n cssString =\n cssString +\n j.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n line.markerCSS[line.config.marker.type][i][j] +\n ';';\n }\n cssString = cssString + '}';\n }\n }\n\n line.chart.style.node().appendChild(document.createTextNode(cssString));\n\n //markerCSS\n },\n /**\n * Function to show line path\n */\n show: function() {\n var line = this;\n line.gElem.classed(line.chart.cssPrefix + 'hidden', false);\n }\n };\n\n /**\n * A Constructor for creating, updating and removing pie component in chart.\n * @constructor\n */\n function Pie() {\n this.init.apply(this, arguments);\n }\n Pie.prototype = {\n /**\n * The default configuration for pie.\n * @type {object}\n */\n defaultConfig: {\n colorByPoint: true,\n style: {\n stroke: '#ffffff',\n strokeWidth: '0.5px',\n fillOpacity: 1,\n hover: {\n fillOpacity: 0.8\n }\n }\n },\n /**\n * Function to destroy pie\n */\n destroy: function() {\n var pie = this,\n chart = pie.chart,\n series = pie.series,\n key;\n delete series.component;\n\n pie.gElem.selectAll('*').remove();\n pie.gElem.node().parentNode.removeChild(pie.gElem.node());\n\n for (key in pie) {\n delete pie[key];\n }\n },\n /**\n * Function to draw the pie series\n */\n drawSeries: function() {\n var pie = this,\n className = '';\n pie.gElem.selectAll('path').remove();\n pie.gElem.datum(pie.series.data);\n\n pie.arcs = pie.gElem\n .selectAll('.arc')\n .data(pie.layout(pie.gElem.datum()))\n .enter()\n .append('path')\n .attr('class', 'arc')\n .style('fill', function(d, i) {\n return pie.chart.colorScale(d.data.x);\n })\n .attr('d', pie.arc);\n },\n /**\n * Function to initialise d3 and associated functions required for pie series\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n * @param {Object} series Parent series object\n */\n init: function(chart, config, series) {\n var pie = this;\n pie.chart = chart;\n pie.series = series;\n pie.config = merge(this.defaultConfig, config);\n pie.arc = d3.arc();\n pie.outerArc = d3.arc();\n pie.layout = d3\n .pie()\n .padAngle(0.01)\n .value(function(d) {\n return d.y;\n });\n if (pie.config.sort !== true) {\n pie.layout.sort(null);\n }\n pie.setCSS();\n pie.render();\n },\n /**\n * Function to remove existing elements and redraw pie\n */\n redraw: function() {\n var pie = this;\n pie.drawSeries();\n },\n /**\n * Function to remove pie\n */\n remove: function() {\n var pie = this;\n pie.destroy();\n },\n /**\n * Function to render pie\n */\n render: function() {\n var pie = this;\n pie.setCoordinates();\n pie.gElem = pie.chart.gElem\n .append('g')\n .attr(\n 'transform',\n 'translate(' + pie.coordinates[0] + ',' + pie.coordinates[1] + ')'\n )\n .attr('class', pie.chart.cssPrefix + 'series-' + pie.series.index);\n if (pie.config.tooltip !== false) {\n if (\n !!pie.chart.config.tooltip.actions &&\n pie.chart.config.tooltip.actions.length > 0\n ) {\n pie.gElem.style('cursor', 'pointer');\n }\n pie.gElem\n .on('mouseover', function() {\n if (d3.event.target.tagName == 'path') {\n d3.select(d3.event.target)\n .transition()\n .duration(100)\n .attr('d', pie.outerArc);\n pie.chart.tooltip.show(\n d3.event.target.__data__.data,\n pie.series.config.name || 'Series ' + pie.series.config.index\n );\n }\n })\n .on('click', function() {\n if (d3.event.target.tagName == 'path') {\n d3.select(d3.event.target)\n .transition()\n .duration(100)\n .attr('d', pie.outerArc);\n pie.chart.tooltip.show(\n d3.event.target.__data__.data,\n pie.series.config.name || 'Series ' + pie.series.config.index,\n true\n );\n }\n })\n .on('mouseout', function(event) {\n if (d3.event.target.tagName == 'path') {\n d3.select(d3.event.target)\n .transition()\n .duration(100)\n .attr('d', pie.arc);\n }\n pie.chart.tooltip.hide();\n });\n }\n pie.drawSeries();\n },\n /**\n * Function to resize pie\n */\n resize: function() {\n var pie = this;\n pie.setCoordinates();\n pie.gElem.attr(\n 'transform',\n 'translate(' + pie.coordinates[0] + ',' + pie.coordinates[1] + ')'\n );\n\n pie.gElem.selectAll('.arc').attr('d', pie.arc);\n },\n /**\n * Function to create and append css classes to style tag for the pie\n */\n setCSS: function() {\n var pie = this;\n var cssString = '',\n i,\n j;\n cssString =\n cssString +\n ' .' +\n pie.chart.cssPrefix +\n 'series-' +\n pie.series.index +\n ' .arc {';\n for (i in pie.config.style) {\n if (!isObject(pie.config.style[i])) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n pie.config.style[i] +\n ';';\n }\n }\n cssString = cssString + '}';\n\n // hover styles\n for (i in pie.config.style) {\n if (isObject(pie.config.style[i])) {\n cssString =\n cssString +\n ' .' +\n pie.chart.cssPrefix +\n 'series-' +\n pie.series.index +\n ' .arc:' +\n i +\n ' {';\n for (j in pie.config.style[i]) {\n cssString =\n cssString +\n j.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n pie.config.style[i][j] +\n ';';\n }\n cssString = cssString + '}';\n }\n }\n\n pie.chart.style.node().appendChild(document.createTextNode(cssString));\n\n //markerCSS\n },\n /**\n * Function to set cordinates of centre of pie\n */\n setCoordinates: function() {\n var pie = this;\n if (\n mathAbs(pie.chart.xRange[0] - pie.chart.xRange[1]) <\n mathAbs(pie.chart.yRange[0] - pie.chart.yRange[1])\n ) {\n pie.OuterRad = mathAbs(pie.chart.xRange[0] - pie.chart.xRange[1]) / 2;\n } else {\n pie.OuterRad = mathAbs(pie.chart.yRange[0] - pie.chart.yRange[1]) / 2;\n }\n pie.innerRad = pie.OuterRad * 0.9;\n pie.outerArc.outerRadius(pie.OuterRad).innerRadius(pie.OuterRad * 0.5);\n pie.arc.outerRadius(pie.innerRad).innerRadius(pie.innerRad * 0.5);\n pie.coordinates = [];\n pie.coordinates[0] =\n mathAbs(pie.chart.xRange[0] - pie.chart.xRange[1]) / 2 +\n d3Min(pie.chart.xRange);\n pie.coordinates[1] =\n mathAbs(pie.chart.yRange[0] - pie.chart.yRange[1]) / 2 +\n d3Min(pie.chart.yRange);\n }\n };\n\n /**\n * A Constructor for creating, updating and removing sunburst component in chart.\n * @constructor\n */\n function Sunburst() {\n this.init.apply(this, arguments);\n }\n Sunburst.prototype = {\n /**\n * The default configuration for sunburst.\n * @type {object}\n */\n defaultConfig: {\n colorByPoint: true,\n style: {\n stroke: '#ffffff',\n strokeWidth: '0.5px',\n fillOpacity: 1,\n hover: {\n fillOpacity: 0.8\n }\n }\n },\n /**\n * Function to destroy sunburst\n */\n destroy: function() {\n var sunburst = this,\n chart = sunburst.chart,\n series = sunburst.series,\n key;\n delete series.component;\n\n sunburst.gElem.selectAll('*').remove();\n sunburst.gElem.node().parentNode.removeChild(sunburst.gElem.node());\n\n for (key in sunburst) {\n delete sunburst[key];\n }\n },\n /**\n * Function to draw the sunburst series\n */\n drawSeries: function() {\n var sunburst = this,\n className = '';\n\n sunburst.gElem.selectAll('path').remove();\n\n var radius = Math.min(sunburst.chart.width, sunburst.chart.height) / 3;\n\n sunburst.partition = d3.partition().size([2 * Math.PI, radius]);\n\n sunburst.partition(sunburst.root);\n\n sunburst.arc = d3\n .arc()\n .startAngle(function(d) {\n return d.x0;\n })\n .endAngle(function(d) {\n return d.x1;\n })\n .innerRadius(function(d) {\n return d.y0;\n })\n .outerRadius(function(d) {\n return d.y1;\n });\n\n sunburst.gElem\n .selectAll('path')\n .data(sunburst.root.descendants())\n .enter()\n .append('path')\n .attr('display', function(d) {\n return d.depth ? null : 'none';\n }) // hide inner ring\n .attr('class', 'arc')\n .style('fill', function(d, i) {\n return sunburst.chart.colorScale(\n (d.children ? d : d.parent).data.name\n );\n })\n .attr('d', sunburst.arc);\n },\n /**\n * Function to initialise d3 and associated functions required for sunburst series\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n * @param {Object} series Parent series object\n */\n init: function(chart, config, series) {\n var sunburst = this;\n sunburst.chart = chart;\n sunburst.series = series;\n sunburst.config = merge(this.defaultConfig, config);\n\n sunburst.root = d3.hierarchy(sunburst.series.data).sum(function(d) {\n return d.value;\n });\n\n sunburst.setCSS();\n sunburst.render();\n },\n /**\n * Function to remove existing elements and redraw sunburst\n */\n redraw: function() {\n var sunburst = this;\n sunburst.drawSeries();\n },\n /**\n * Function to remove sunburst\n */\n remove: function() {\n var sunburst = this;\n sunburst.destroy();\n },\n /**\n * Function to render sunburst\n */\n render: function() {\n var sunburst = this;\n sunburst.setCoordinates();\n sunburst.gElem = sunburst.chart.gElem\n .append('g')\n .attr(\n 'transform',\n 'translate(' +\n sunburst.coordinates[0] +\n ',' +\n sunburst.coordinates[1] +\n ')'\n )\n .attr(\n 'class',\n sunburst.chart.cssPrefix + 'series-' + sunburst.series.index\n );\n if (sunburst.config.tooltip !== false) {\n if (\n !!sunburst.chart.config.tooltip.actions &&\n sunburst.chart.config.tooltip.actions.length > 0\n ) {\n sunburst.gElem.style('cursor', 'pointer');\n }\n sunburst.gElem\n .on('mouseover', function() {\n if (d3.event.target.tagName == 'path') {\n sunburst.chart.tooltip.show(\n d3.event.target.__data__,\n sunburst.series.config.name ||\n 'Series ' + sunburst.series.config.index\n );\n }\n })\n .on('click', function() {\n if (d3.event.target.tagName == 'path') {\n sunburst.chart.tooltip.show(\n d3.event.target.__data__,\n sunburst.series.config.name ||\n 'Series ' + sunburst.series.config.index,\n true\n );\n }\n })\n .on('mouseout', function(event) {\n sunburst.chart.tooltip.hide();\n });\n }\n sunburst.drawSeries();\n },\n /**\n * Function to resize sunburst\n */\n resize: function() {\n var sunburst = this;\n sunburst.setCoordinates();\n sunburst.gElem.attr(\n 'transform',\n 'translate(' +\n sunburst.coordinates[0] +\n ',' +\n sunburst.coordinates[1] +\n ')'\n );\n\n sunburst.drawSeries();\n },\n /**\n * Function to create and append css classes to style tag for the sunburst\n */\n setCSS: function() {\n var sunburst = this;\n var cssString = '',\n i,\n j;\n cssString =\n cssString +\n ' .' +\n sunburst.chart.cssPrefix +\n 'series-' +\n sunburst.series.index +\n ' .arc {';\n for (i in sunburst.config.style) {\n if (!isObject(sunburst.config.style[i])) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n sunburst.config.style[i] +\n ';';\n }\n }\n cssString = cssString + '}';\n\n // hover styles\n for (i in sunburst.config.style) {\n if (isObject(sunburst.config.style[i])) {\n cssString =\n cssString +\n ' .' +\n sunburst.chart.cssPrefix +\n 'series-' +\n sunburst.series.index +\n ' .arc:' +\n i +\n ' {';\n for (j in sunburst.config.style[i]) {\n cssString =\n cssString +\n j.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n sunburst.config.style[i][j] +\n ';';\n }\n cssString = cssString + '}';\n }\n }\n\n sunburst.chart.style\n .node()\n .appendChild(document.createTextNode(cssString));\n\n //markerCSS\n },\n /**\n * Function to set cordinates of centre of sunburst\n */\n setCoordinates: function() {\n var sunburst = this;\n if (\n mathAbs(sunburst.chart.xRange[0] - sunburst.chart.xRange[1]) <\n mathAbs(sunburst.chart.yRange[0] - sunburst.chart.yRange[1])\n ) {\n sunburst.OuterRad =\n mathAbs(sunburst.chart.xRange[0] - sunburst.chart.xRange[1]) / 2;\n } else {\n sunburst.OuterRad =\n mathAbs(sunburst.chart.yRange[0] - sunburst.chart.yRange[1]) / 2;\n }\n sunburst.innerRad = sunburst.OuterRad * 0.9;\n // sunburst.outerArc.outerRadius(sunburst.OuterRad).innerRadius(sunburst.OuterRad * 0.5);\n // sunburst.arc.outerRadius(sunburst.innerRad).innerRadius(sunburst.innerRad * 0.5);\n\n sunburst.coordinates = [];\n sunburst.coordinates[0] =\n mathAbs(sunburst.chart.xRange[0] - sunburst.chart.xRange[1]) / 2 +\n d3Min(sunburst.chart.xRange);\n sunburst.coordinates[1] =\n mathAbs(sunburst.chart.yRange[0] - sunburst.chart.yRange[1]) / 2 +\n d3Min(sunburst.chart.yRange);\n }\n };\n\n /**\n * A Constructor for creating, updating and removing tooltip component in chart.\n * @constructor\n */\n function Tooltip() {\n this.init.apply(this, arguments);\n }\n Tooltip.prototype = {\n /**\n * The default configuration for tooltip.\n * @type {object}\n */\n defaultConfig: {\n offsetY: 15,\n dayFormat: '%e %B %Y',\n weekFormat: '%V - %Y',\n monthFormat: '%B %Y'\n // actions: [{\n // name: 'dataView',\n // icon: 'fa fa-cloud'\n // }, {\n // name: 'dataView',\n // icon: 'fa fa-car'\n // }]\n },\n /**\n * Function to destroy tooltip\n */\n destroy: function() {\n var tooltip = this,\n chart = tooltip.chart,\n key;\n tooltip.elem.remove();\n\n for (key in tooltip) {\n delete tooltip[key];\n }\n delete chart.tooltip;\n if (!!chart.config) {\n delete chart.config.tooltip;\n }\n if (!!chart.config) {\n delete chart.config.tooltip;\n }\n },\n /**\n * Function to get Ancestor names for hierarchical data\n */\n getAncestors: function(node, key) {\n var path = [];\n var current = node;\n while (current.parent) {\n path.unshift(key !== undefined ? current.data[key] : current);\n current = current.parent;\n }\n return path;\n },\n /**\n * Function to hide the tooltip\n */\n hide: function(forceHide) {\n var tooltip = this;\n if (tooltip.stay === true && forceHide !== true) {\n return;\n }\n if (forceHide === true) {\n if (tooltip.stay === true) {\n tooltip.chart.container.dispatchEvent(tooltip.closeEvent);\n }\n tooltip.stay = false;\n d3.select(tooltip.chart.svg.node())\n .selectAll('.chartPlus-grey-fill')\n .classed('chartPlus-grey-fill', false);\n d3.select(tooltip.chart.svg.node())\n .selectAll('.chartPlus-grey-stroke')\n .classed('chartPlus-grey-stroke', false);\n }\n tooltip.targetEvent = null;\n tooltip.elem.classed('chartPlus-allEvents', false);\n tooltip.elem.classed('chartPlus-tooltip-visible', false);\n tooltip.elem.classed('chartPlus-tooltip-hidden', true);\n },\n /**\n * Function to initialise d3 and associated functions required for tooltip\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n */\n init: function(chart, config) {\n var tooltip = this;\n tooltip.chart = chart;\n tooltip.config = merge(this.defaultConfig, config);\n tooltip.setCSS();\n tooltip.setUp();\n },\n /**\n * Function to remove tooltip\n */\n remove: function() {\n var tooltip = this;\n tooltip.destroy();\n },\n /**\n * Function to reposition tooltip\n */\n reposition: function() {\n var tooltip = this;\n var container = tooltip.chart.container.getBoundingClientRect();\n if (!tooltip.targetEvent) {\n return;\n }\n var targetElem = tooltip.targetEvent.target.getBoundingClientRect();\n tooltip.elem\n .style('left', function() {\n var info = this.getBoundingClientRect(),\n left = targetElem.left - container.left + 10;\n if (\n container.width - (targetElem.left - container.left) <\n info.width + 10\n ) {\n left = targetElem.left - container.left - info.width + 10;\n }\n return left + 'px';\n })\n .style('top', function() {\n var info = this.getBoundingClientRect(),\n top = targetElem.top - container.top + tooltip.config.offsetY;\n if (top + info.height > container.height) {\n top = top - info.height - tooltip.config.offsetY;\n }\n return top + 'px';\n });\n },\n /**\n * Function to create and append css classes to style tag for the tooltip\n */\n\n setCSS: function() {\n var tooltip = this;\n var cssString = '',\n i;\n\n cssString = cssString + ' .' + tooltip.chart.cssPrefix + 'tooltip {';\n for (i in tooltip.chart.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n tooltip.chart.config.style[i] +\n ';';\n }\n if (getContrastYIQ(themeConfig.backgroundColor) === 'dark') {\n cssString =\n cssString +\n 'background:' +\n themeConfig.tooltip.contrastDarkColor +\n ';' +\n 'color:' +\n themeConfig.text.contrastLightColor +\n ';';\n } else {\n cssString =\n cssString +\n 'background:' +\n themeConfig.tooltip.contrastLightColor +\n ';' +\n 'color:' +\n themeConfig.text.contrastDarkColor +\n ';';\n }\n for (i in tooltip.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n tooltip.config.style[i] +\n ';';\n }\n cssString = cssString + '}';\n tooltip.chart.style\n .node()\n .appendChild(document.createTextNode(cssString));\n },\n /**\n * Function to create DOM elements to show tooltip\n */\n setUp: function() {\n var tooltip = this;\n\n composeDOM(\n d3\n .select(tooltip.chart.container)\n .select('.chartPlus-container')\n .node(),\n DIV,\n {\n className:\n tooltip.chart.cssPrefix +\n 'tooltip' +\n ' ' +\n NAMESPACE +\n 'tooltip' +\n (tooltip.config.className ? ' ' + tooltip.config.className : ''),\n id: NAMESPACE + 'tooltip'\n }\n );\n tooltip.elem = d3\n .select(accessDOM(NAMESPACE + tooltip.chart.index, 'id'))\n .select('.' + NAMESPACE + 'tooltip');\n\n if (\n isArray(tooltip.config.actions) &&\n tooltip.config.actions.length > 0\n ) {\n tooltip.config.actions.forEach(function(d, i) {\n if (!chartPlus.isIE) {\n d.event = new Event(d.name);\n } else {\n d.event = new Event(d.name);\n }\n });\n if (!chartPlus.isIE) {\n tooltip.closeEvent = new Event('tooltip-closed');\n } else {\n tooltip.closeEvent = new Event('tooltip-closed');\n }\n }\n\n if (isString(tooltip.config.dateFormat)) {\n tooltip.dateFormat = d3.timeFormat(tooltip.config.dateFormat);\n } else if (tooltip.chart.config.granularity === 'week') {\n tooltip.dateFormat = function(d) {\n return 'Week ' + d3.timeFormat(tooltip.config.weekFormat)(d);\n };\n } else if (!!tooltip.chart.config.granularity) {\n tooltip.dateFormat = d3.timeFormat(\n tooltip.config[tooltip.chart.config.granularity + 'Format']\n );\n } else {\n tooltip.dateFormat = d3.timeFormat(tooltip.config.dayFormat);\n }\n },\n /**\n * Function to show tooltip\n */\n show: function(d, name, stay) {\n var tooltip = this,\n html = '',\n legendX,\n categoryX,\n container;\n var dayFormat = d3.timeFormat('%Y-%m-%d');\n container = tooltip.chart.container.getBoundingClientRect();\n\n if (stay !== true && tooltip.stay === true) {\n return;\n }\n if (stay === true && tooltip.stay === true) {\n tooltip.chart.container.dispatchEvent(tooltip.closeEvent);\n }\n\n tooltip.targetEvent = d3.event;\n if (\n isArray(tooltip.config.actions) &&\n tooltip.config.actions.length > 0\n ) {\n tooltip.stay = !!stay;\n if (tooltip.stay === true) {\n tooltip.chart.series.forEach(function(series, idx) {\n if (series.config.type === 'line') {\n if (isObject(series.component)) {\n d3.select(series.component.gElem.node())\n .select('path')\n .classed('chartPlus-grey-stroke', true);\n d3.select(series.component.gElem.node())\n .selectAll('circle')\n .classed('chartPlus-grey-fill', true);\n }\n } else {\n if (isObject(series.component)) {\n d3.select(series.component.gElem.node())\n .selectAll('*')\n .classed('chartPlus-grey-fill', true);\n }\n }\n });\n d3.select(d3.event.target).classed('chartPlus-grey-fill', false);\n d3.select(d3.event.target).classed('chartPlus-grey-stroke', false);\n }\n }\n\n if (!!isObject(d)) {\n // dataview and linking support\n // if (isArray(tooltip.config.actions) && tooltip.config.actions.length > 0) {\n // html = '
\\u274C';\n // html = html + '
';\n // }\n\n if (isDate(d.x)) {\n // Support for legend key map\n if (!!tooltip.chart.config.legendMap) {\n legendX = tooltip.chart.config.legendMap[name];\n } else {\n legendX = name;\n }\n console.log(\n 'inside tooltip to find date',\n d.x,\n dayFormat(d.x),\n tooltip.dateFormat(d.x)\n );\n tooltip.data = { category: dayFormat(d.x), legend: name };\n html = html + '
';\n html = html + '' + tooltip.dateFormat(d.x) + '';\n if (\n isArray(tooltip.config.actions) &&\n tooltip.config.actions.length > 0\n ) {\n html =\n html +\n '  \\u274C';\n }\n html = html + '
';\n\n html = html + '
';\n html =\n html +\n '' +\n legendX +\n ' : ' +\n numberFormat(d.y) +\n (tooltip.chart.config.percent === true ? '%' : '') +\n '';\n html = html + '
';\n } else if (!!d.value && !!d.parent) {\n tooltip.data = {\n category: tooltip.getAncestors(d, 'name')[0],\n legend: tooltip.getAncestors(d, 'name')[1]\n };\n\n // Support for Legend and Categeory Key Map\n if (\n !!tooltip.chart.config.categoryMap &&\n !!tooltip.chart.config.legendMap\n ) {\n categoryX = tooltip.chart.config.categoryMap[tooltip.data.category];\n legendX = tooltip.chart.config.legendMap[tooltip.data.legend];\n\n html = html + '
';\n html = html + '' + categoryX;\n if (typeof legendX !== 'undefined') {\n html = html + '/' + legendX + '';\n } else {\n html = html + '';\n }\n } else {\n html = html + '
';\n html =\n html +\n '' +\n tooltip.getAncestors(d, 'name').join('/') +\n '';\n }\n\n if (\n isArray(tooltip.config.actions) &&\n tooltip.config.actions.length > 0\n ) {\n html =\n html +\n '  \\u274C';\n }\n html = html + '
';\n\n html = html + '
';\n html =\n html +\n '' +\n name +\n ' : ' +\n numberFormat(d.value) +\n (tooltip.chart.config.percent === true ? '%' : '') +\n '';\n html = html + '
';\n } else {\n if (tooltip.chart.config.flip === undefined) {\n tooltip.data = { category: d.x, legend: name };\n } else {\n // Special handling for Pie group by option\n tooltip.data = { category: name, legend: d.x };\n }\n\n // Support for category key map\n if (!!tooltip.chart.config.categoryMap) {\n categoryX = tooltip.chart.config.categoryMap[tooltip.data.category];\n } else {\n categoryX = tooltip.data.category;\n }\n // Support for legend key map\n if (!!tooltip.chart.config.legendMap) {\n legendX = tooltip.chart.config.legendMap[tooltip.data.legend];\n } else {\n legendX = tooltip.data.legend;\n }\n\n html = html + '
';\n html = html + '' + categoryX + '';\n if (\n isArray(tooltip.config.actions) &&\n tooltip.config.actions.length > 0\n ) {\n html =\n html +\n '  \\u274C';\n }\n html = html + '
';\n\n html = html + '
';\n html =\n html +\n '' +\n legendX +\n ' : ' +\n numberFormat(d.y) +\n (tooltip.chart.config.percent === true ? '%' : '') +\n '';\n html = html + '
';\n }\n\n // dataview and linking support\n if (\n isArray(tooltip.config.actions) &&\n tooltip.config.actions.length > 0\n ) {\n html = html + '
';\n tooltip.config.actions.forEach(function(action, i) {\n html =\n html +\n '';\n });\n html = html + '
';\n }\n } else if (isArray(d)) {\n // hierarchy number numerator vs denominator\n\n html = '
';\n d.forEach(function(item) {\n html =\n html +\n '
' +\n '' +\n item.key +\n ' : ' +\n '' +\n '' +\n item.value +\n '' +\n '
';\n });\n html = html + '
';\n } else {\n // plain text tooltip\n\n // Support for legend key map\n if (!!tooltip.chart.config.legendMap) {\n legendX = tooltip.chart.config.legendMap[d];\n } else {\n legendX = d;\n }\n\n html = '' + legendX + '';\n }\n\n var top, left;\n tooltip.elem\n .html(html)\n .style('left', function() {\n var info = this.getBoundingClientRect(),\n left = d3.event.pageX - container.left + 10;\n // if ((container.width - (d3.event.pageX - container.left)) < (info.width + 10)) {\n if (container.width / 2 < left) {\n left = d3.event.pageX - container.left - info.width + 10;\n }\n return left + 'px';\n })\n .style('top', function() {\n var info = this.getBoundingClientRect(),\n top = d3.event.pageY - container.top + tooltip.config.offsetY;\n if (top + info.height > container.height) {\n top = top - info.height - tooltip.config.offsetY;\n }\n return top + 'px';\n });\n\n if (\n isArray(tooltip.config.actions) &&\n tooltip.config.actions.length > 0\n ) {\n tooltip.elem\n .select('.chartPlus-tooltip-actions')\n .selectAll('span')\n .datum(function(d, i) {\n return tooltip.config.actions[i];\n });\n tooltip.elem\n .select('.chartPlus-tooltip-actions')\n .on('click', function() {\n var item = d3.event.target.__data__;\n item.data = [0];\n item.event.data = tooltip.data;\n tooltip.chart.container.dispatchEvent(item.event);\n });\n tooltip.elem.select('.chartPlus-tooltip-close').on('click', function() {\n tooltip.hide(true);\n });\n }\n\n if (d3.event.type === 'click') {\n tooltip.elem.classed('chartPlus-allEvents', true);\n } else {\n tooltip.elem.classed('chartPlus-allEvents', false);\n }\n tooltip.elem.classed('chartPlus-tooltip-visible', true);\n tooltip.elem.classed('chartPlus-tooltip-hidden', false);\n }\n };\n /**\n * A Constructor for creating, updating and removing legends.\n * @constructor\n */\n function Legend() {\n this.init.apply(this, arguments);\n }\n Legend.prototype = {\n /**\n * Function to align legend set to bottom end of svg\n */\n alignbottom: function() {\n var legend = this,\n x,\n y;\n x = 0; //getTransformation(legend.gElem.attr(\"transform\")).translateX;\n y = legend.chart.height - legend.gElem.node().getBBox().height;\n if (legend.config.layout === 'vertical') {\n if (legend.chart.height < legend.gElem.node().getBBox().height) {\n y = 0;\n } else {\n y = legend.chart.height - legend.gElem.node().getBBox().height;\n }\n } else {\n y =\n legend.chart.height -\n (!!legend.navigation\n ? getTransformation(legend.nav.attr('transform')).translateY +\n legend.nav.node().getBBox().height +\n 2 * legend.config.navigation.padding\n : legend.gElem.node().getBBox().height);\n }\n\n legend.gElem.attr('transform', 'translate(' + x + ',' + y + ')');\n },\n /**\n * Function to align legend set to centre of svg\n */\n aligncentre: function() {\n var legend = this,\n x,\n y;\n x = getTransformation(legend.gElem.attr('transform')).translateX;\n y = getTransformation(legend.gElem.attr('transform')).translateY;\n if (legend.config.layout === 'horizontal') {\n x = (legend.chart.width - legend.gElem.node().getBBox().width) / 2;\n } else {\n if (legend.chart.height < legend.gElem.node().getBBox().height) {\n y = 0;\n } else {\n y = (legend.chart.height - legend.gElem.node().getBBox().height) / 2;\n }\n }\n legend.gElem.attr('transform', 'translate(' + x + ',' + y + ')');\n },\n /**\n * Function to align legend set to left end of svg\n */\n alignleft: function() {\n var legend = this,\n x,\n y;\n x = legend.config.padding;\n y = getTransformation(legend.gElem.attr('transform')).translateY;\n legend.gElem.attr('transform', 'translate(' + x + ',' + y + ')');\n },\n /**\n * Function to align legend set to right end of svg\n */\n alignright: function() {\n var legend = this,\n x,\n y;\n x = legend.chart.width - legend.gElem.node().getBBox().width;\n // y = getTransformation(legend.gElem.attr(\"transform\")).translateY;\n y = 0;\n legend.gElem.attr('transform', 'translate(' + x + ',' + y + ')');\n },\n /**\n * Function to align legend set to top end of svg\n */\n aligntop: function() {\n var legend = this,\n x,\n y;\n x = getTransformation(legend.gElem.attr('transform')).translateX;\n y = legend.config.padding;\n legend.gElem.attr('transform', 'translate(' + x + ',' + y + ')');\n },\n /**\n * Function to align legend items horizontally\n */\n alignHorizontally: function() {\n var legend = this,\n x = 0,\n y = 0,\n row = 1,\n maxWidth = legend.chart.width - legend.config.padding,\n translate;\n\n legend.items.attr('transform', function(d, i) {\n if (\n i > 0 &&\n legend.config.wrap === true &&\n maxWidth < x + this.getBBox().width\n ) {\n row = row + 1;\n x = 0;\n y =\n legend.itemList.node().getBBox().height +\n legend.config.legendSpacing;\n if (!!legend.config.maxRows && row === legend.config.maxRows + 1) {\n legend.maxListHeight = y;\n }\n }\n translate = 'translate(' + x + ',' + y + ')';\n x = x + (this.getBBox().width || 0) + legend.config.legendSpacing;\n return translate;\n });\n },\n /**\n * Function to align legend items vertically\n */\n alignVertically: function() {\n var legend = this,\n y = 0,\n x = 0,\n maxX = 0,\n translate;\n legend.items.attr('transform', function(d, i) {\n if (\n i > 0 &&\n legend.config.wrap === true &&\n legend.maxListHeight <\n y + this.getBBox().height + legend.config.legendSpacing\n ) {\n x = x + maxX + legend.config.legendSpacing;\n y = legend.config.legendSpacing;\n }\n translate = 'translate(' + x + ',' + y + ')';\n\n y = y + (this.getBBox().height || 0) + legend.config.legendSpacing;\n maxX = maxX < this.getBBox().width ? this.getBBox().width : maxX;\n\n return translate;\n });\n },\n /**\n * The default configuration for legends.\n * @type {object}\n */\n defaultConfig: {\n align: 'top-right',\n float: false,\n layout: 'vertical', ///horizontal\n padding: 15,\n size: 5,\n maxTextLength: 25,\n maxWidthPercent: 30,\n legendSpacing: 10, // space between each legend items\n textSpacing: 10, // space between rect and text\n wrap: false,\n color: defaultConfig.style.color || '#707070',\n navigation: {\n padding: 3,\n size: 15,\n duration: 800\n },\n style: {\n whiteSpace: 'nowrap',\n fontSize: '11px'\n }\n },\n /**\n * Special default configurations for vertically aligning legend items.\n * @type {object}\n */\n verticalConfig: {\n legendSpacing: 10, // space between each legend items\n textSpacing: 10, // space between rect and text\n wrap: false\n },\n /**\n * Special default configurations for horizontally aligning legend items.\n * @type {object}\n */\n horizontalConfig: {\n legendSpacing: 10,\n textSpacing: 10,\n wrap: true,\n maxRows: 2\n },\n /**\n * Special default configurations for floating legends.\n * @type {object}\n */\n floatConfig: {\n padding: 0\n },\n /**\n * Function to destroy legends\n */\n destroy: function() {\n var legend = this,\n chart = legend.chart,\n key;\n delete chart.legend;\n delete chart.config.legend;\n if (legend.navigation === true) {\n legend.nav.selectAll('*').remove();\n legend.nav.node().parentNode.removeChild(legend.nav.node());\n }\n legend.items.selectAll('*').remove();\n legend.items.node().parentNode.removeChild(legend.items.node());\n legend.content.selectAll('*').remove();\n legend.content.node().parentNode.removeChild(legend.content.node());\n legend.gElem.selectAll('*').remove();\n legend.gElem.node().parentNode.removeChild(legend.gElem.node());\n legend.clippath.selectAll('*').remove();\n legend.clippath.node().parentNode.removeChild(legend.clippath.node());\n\n for (key in legend) {\n delete legend[key];\n }\n },\n /**\n * Function to prepare data for legends\n */\n getData: function() {\n var legend = this;\n\n if (legend.config.innerLegend === true) {\n legend.data = legend.chart.innerLegends.map(function(legend, idx) {\n return { name: legend };\n });\n } else {\n legend.data = legend.chart.config.series.map(function(series, idx) {\n return {\n name: series.name || 'Series ' + idx,\n isHidden: series.isHidden\n };\n });\n }\n },\n /**\n * Function to initialise d3 and associated functions required for legends\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n * @param {boolean} render Flag whether to do rendering after initialisation\n */\n init: function(chart, config, render) {\n var legend = this;\n legend.defaultConfig.color = defaultConfig.style.color || '#707070';\n legend.chart = chart;\n legend.config = merge(\n this.defaultConfig,\n config,\n config.float ? this.floatConfig : {}\n );\n // legend.config = merge(legend.config, this[legend.config.layout + 'Config']);\n\n legend.getData();\n // set css if any\n legend.setCSS();\n\n if (render !== false) {\n legend.render();\n }\n },\n /**\n * Function to remove legends\n */\n remove: function() {\n var legend = this;\n legend.destroy();\n },\n /**\n * Function to render legends to HTML\n */\n render: function() {\n var legend = this,\n hiddenLegends = 0,\n className = '',\n legendName,\n index;\n legend.firstRender = false;\n\n legend.clippath = legend.chart.svg\n .append('defs')\n .append('clipPath')\n .attr('id', 'legendClip-' + legend.chart.index);\n legend.clippath\n .append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', 0)\n .attr('height', 0);\n\n legend.gElem = legend.chart.gElem\n .append('g')\n .attr('class', legend.chart.cssPrefix + 'legend');\n\n legend.content = legend.gElem.append('g');\n // .attr(\"transform\", \"translate(0,\" + (legend.config.legendSpacing) + \")\");\n\n legend.itemList = legend.content\n .append('g')\n .attr('transform', 'translate(0,0)')\n .on('mouseover', function() {\n if (\n d3.event.target.tagName == 'text' &&\n d3\n .select(this)\n .text()\n .indexOf('...') > -1\n ) {\n legend.chart.tooltip.show(d3.event.target.__data__.name);\n }\n })\n .on('mouseout', function(event) {\n legend.chart.tooltip.hide();\n })\n .on('click', function(event) {\n if (legend.config.innerLegend === true) {\n // check what to do\n } else {\n index = legend.data.indexOf(d3.event.target.__data__);\n if (!!d3.event.target.__data__.isHidden) {\n hiddenLegends = hiddenLegends - 1;\n legend.chart.series[index].show();\n } else {\n hiddenLegends = hiddenLegends + 1;\n legend.chart.series[index].hide();\n }\n d3.event.target.__data__.isHidden = !d3.event.target.__data__\n .isHidden;\n\n d3.select(d3.event.target.parentNode)\n .select('circle')\n .style('fill', function() {\n if (!!d3.event.target.__data__.isHidden) {\n return '#cccccc';\n } else if (\n !legend.chart.config.colorByPoint &&\n legend.chart.config.series[index].color\n ) {\n return legend.chart.config.series[index].color;\n } else {\n return legend.chart.colorScale(d3.event.target.__data__.name);\n }\n });\n d3.select(d3.event.target.parentNode)\n .select('text')\n .style('fill', function(d, i) {\n if (!!d.isHidden) {\n return '#cccccc';\n } else {\n return null;\n }\n });\n if (legend.chart.config.percent !== true) {\n if (hiddenLegends === legend.data.length) {\n legend.chart.yAxis.hide();\n } else {\n legend.chart.yAxis.show();\n }\n }\n }\n });\n\n if (legend.config.innerLegend !== true) {\n legend.content.classed(legend.chart.cssPrefix + 'cursorPointer', true);\n }\n\n legend.items = legend.itemList\n .selectAll('.legendItem')\n .data(legend.data)\n .enter()\n .append('g');\n\n legend.items\n .append('circle')\n .attr('class', 'legendIcon')\n .style('fill', function(d, i) {\n if (!!d.isHidden) {\n return '#cccccc';\n } else if (\n !legend.chart.config.colorByPoint &&\n legend.chart.config.series[i].color\n ) {\n return legend.chart.config.series[i].color;\n } else {\n return legend.chart.colorScale(d.name);\n }\n })\n .attr('cx', 5)\n .attr('cy', 5)\n .attr('r', legend.config.size);\n\n legend.iconSize = legend.items\n .select('circle')\n .node()\n .getBBox();\n\n legend.items\n .append('text')\n .style('fill', function(d, i) {\n if (!!d.isHidden) {\n return '#cccccc';\n } else {\n return null;\n }\n })\n .attr('x', function(d, i) {\n return legend.iconSize.width + legend.config.textSpacing;\n })\n .attr('y', function(d, i) {\n return legend.iconSize.height;\n })\n .text(function(d, i) {\n // Legends needs to be mapped to keys if categoryMap (Pie) & legendMap(Bar) is provided\n // Support for legend key map\n if (\n (legend.chart.config.type == 'pie' &&\n legend.chart.config.flip === undefined) ||\n legend.chart.config.type == 'sunburst'\n ) {\n if (!!legend.chart.config.categoryMap) {\n legendName = legend.chart.config.categoryMap[d.name];\n legendName = setDefaultVal(legendName, 'unknown');\n } else {\n legendName = d.name;\n }\n } else {\n if (!!legend.chart.config.legendMap) {\n legendName = legend.chart.config.legendMap[d.name];\n legendName = setDefaultVal(legendName, 'unknown');\n } else {\n legendName = d.name;\n }\n }\n if (legendName.length > legend.config.maxTextLength) {\n legendName =\n legendName.slice(0, legend.config.maxTextLength) + '...';\n }\n return legendName;\n });\n var maxItemWidth = 0;\n\n legend.items.each(function(item) {\n if (maxItemWidth < this.getBBox().width) {\n maxItemWidth = this.getBBox().width;\n }\n });\n if (\n legend.config.layout == 'horizontal' ||\n maxItemWidth >\n (legend.chart.width * legend.config.maxWidthPercent) / 100\n ) {\n legend.config.layout = 'horizontal';\n legend.config.align = 'bottom-left';\n legend.config = merge(legend.config, legend.horizontalConfig);\n } else {\n legend.config.layout = 'vertical';\n legend.config.align = 'top-right';\n if (legend.config.innerLegend === true) {\n legend.config.align = 'centre-right';\n }\n legend.config = merge(legend.config, legend.verticalConfig);\n }\n\n if (legend.config.layout === 'horizontal') {\n legend.alignHorizontally();\n } else {\n legend.alignVertically();\n }\n\n if (legend.config.layout === 'vertical') {\n // legend.maxListHeight = (isNumber(legend.config.maxHeight) && (legend.config.maxHeight < legend.chart.height)) ? (legend.config.maxHeight - legend.config.legendSpacing) : (legend.chart.height - legend.config.legendSpacing);\n if (legend.gElem.node().getBBox().height > legend.chart.height) {\n legend.setNavigation();\n }\n } else {\n if (legend.itemList.node().getBBox().height > legend.maxListHeight) {\n legend.setNavigation();\n }\n }\n\n legend.config.align.split('-').forEach(function(alignment, idx) {\n legend['align' + alignment]();\n });\n },\n /**\n * Function to reposition legends\n */\n reposition: function() {\n var legend = this;\n legend.items.attr('transform', 'translate(0,0)');\n var maxItemWidth = 0;\n\n legend.items.each(function(item) {\n if (maxItemWidth < this.getBBox().width) {\n maxItemWidth = this.getBBox().width;\n }\n });\n if (\n legend.config.layout == 'horizontal' ||\n maxItemWidth >\n (legend.chart.width * legend.config.maxWidthPercent) / 100\n ) {\n legend.config.layout = 'horizontal';\n legend.config.align = 'bottom-left';\n if (legend.chart.forExport !== true) {\n // Special handling incase of export to pdf , rowsize is 5\n legend.config = merge(legend.config, legend.horizontalConfig);\n }\n } else {\n legend.config.layout = 'vertical';\n legend.config.align = 'top-right';\n if (legend.config.innerLegend === true) {\n legend.config.align = 'centre-right';\n }\n legend.config = merge(legend.config, legend.verticalConfig);\n }\n\n if (legend.config.layout === 'vertical') {\n legend.alignVertically();\n // legend.maxListHeight = (isNumber(legend.config.maxHeight) && (legend.config.maxHeight < legend.chart.height)) ? (legend.config.maxHeight - legend.config.legendSpacing) : (legend.chart.height - legend.config.legendSpacing);\n if (legend.gElem.node().getBBox().height > legend.chart.height) {\n legend.setNavigation();\n } else if (legend.navigation === true) {\n legend.nav.selectAll('*').remove();\n legend.nav.node().parentNode.removeChild(legend.nav.node());\n legend.navigation = false;\n legend.content.classed(legend.chart.cssPrefix + 'clipLegend', false);\n }\n } else {\n legend.alignHorizontally();\n if (legend.itemList.node().getBBox().height > legend.maxListHeight) {\n legend.setNavigation();\n } else if (legend.navigation === true) {\n legend.nav.selectAll('*').remove();\n legend.nav.node().parentNode.removeChild(legend.nav.node());\n legend.navigation = false;\n legend.content.classed(legend.chart.cssPrefix + 'clipLegend', false);\n }\n }\n\n legend.config.align.split('-').forEach(function(alignment, idx) {\n legend['align' + alignment]();\n });\n },\n /**\n * Function to resize legends\n */\n resize: function() {\n var legend = this;\n // additional functions while resizing\n legend.reposition();\n },\n /**\n * Function to set navigation arrows for overflowing legends\n */\n setNavigation: function() {\n var legend = this,\n x = 0,\n size = legend.config.navigation.size;\n if (!legend.navigation) {\n legend.navConfig = { currentPage: 1, maxPage: 0 };\n\n legend.nav = legend.gElem\n .append('g')\n .attr('class', legend.chart.cssPrefix + 'legendNav');\n\n legend.nav\n .append('g')\n .attr('class', 'navTop')\n .on('click', function() {\n legend.showTopPage();\n d3.select(this)\n .select('path')\n .classed(\n legend.chart.cssPrefix + 'greyed',\n legend.navConfig.currentPage === 1\n )\n .classed(\n legend.chart.cssPrefix + 'cursorPointer',\n legend.navConfig.currentPage !== 1\n );\n\n legend.nav\n .select('.navBottom')\n .select('path')\n .classed(\n legend.chart.cssPrefix + 'greyed',\n legend.navConfig.currentPage === legend.navConfig.maxPage\n )\n .classed(\n legend.chart.cssPrefix + 'cursorPointer',\n legend.navConfig.currentPage !== legend.navConfig.maxPage\n );\n });\n\n legend.nav\n .select('.navTop')\n .append('path')\n .attr('transform', 'translate(' + 10 / 2 + ',' + 10 / 2 + ')')\n .attr(\n 'd',\n 'M6.582,12.141c-0.271,0.268-0.709,0.268-0.978,0c-0.269-0.268-0.272-0.701,0-0.969l3.908-3.83 c0.27-0.268,0.707-0.268,0.979,0l3.908,3.83c0.27,0.267,0.27,0.701,0,0.969c-0.271,0.268-0.709,0.268-0.979,0L10,9L6.582,12.141z'\n )\n .attr('class', legend.chart.cssPrefix + 'greyed');\n\n legend.nav\n .append('text')\n .text(legend.navConfig.currentPage + '/' + legend.navConfig.maxPage);\n\n legend.nav\n .append('g')\n .attr('class', 'navBottom')\n .on('click', function() {\n legend.showBottomPage();\n d3.select(this)\n .select('path')\n .classed(\n legend.chart.cssPrefix + 'greyed',\n legend.navConfig.currentPage === legend.navConfig.maxPage\n )\n .classed(\n legend.chart.cssPrefix + 'cursorPointer',\n legend.navConfig.currentPage !== legend.navConfig.maxPage\n );\n\n legend.nav\n .select('.navTop')\n .select('path')\n .classed(\n legend.chart.cssPrefix + 'greyed',\n legend.navConfig.currentPage === 1\n )\n .classed(\n legend.chart.cssPrefix + 'cursorPointer',\n legend.navConfig.currentPage !== 1\n );\n });\n\n legend.nav\n .select('.navBottom')\n .append('path')\n .attr('transform', 'translate(' + 10 / 2 + ',' + 10 / 2 + ')')\n .attr(\n 'd',\n 'M13.418,7.859c0.271-0.268,0.709-0.268,0.978,0c0.27,0.268,0.272,0.701,0,0.969l-3.908,3.83 c-0.27,0.268-0.707,0.268-0.979,0l-3.908-3.83c-0.27-0.267-0.27-0.701,0-0.969c0.271-0.268,0.709-0.268,0.978,0L10,11L13.418,7.859z'\n )\n .attr('class', legend.chart.cssPrefix + 'cursorPointer');\n\n legend.navigation = true;\n }\n\n legend.nav\n .select('.navTop')\n .attr(\n 'transform',\n 'translate(' + (x + legend.config.navigation.padding) + ',0)'\n );\n\n x =\n legend.nav\n .select('.navTop')\n .node()\n .getBBox().width +\n legend.config.navigation.padding +\n 20;\n\n legend.nav.select('text').attr(\n 'transform',\n 'translate(' +\n (x + legend.config.navigation.padding) +\n ',' +\n legend.nav\n .select('.navTop')\n .select('path')\n .node()\n .getBBox().height +\n ')'\n );\n if (legend.config.layout === 'horizontal') {\n legend.clipHeight = legend.maxListHeight;\n } else {\n legend.clipHeight =\n legend.chart.height -\n legend.nav.node().getBBox().height -\n 2 * legend.config.navigation.padding;\n legend.clipHeight =\n Math.floor(\n legend.clipHeight /\n (legend.items.node().getBBox().height +\n legend.config.legendSpacing)\n ) *\n (legend.items.node().getBBox().height + legend.config.legendSpacing);\n }\n legend.navConfig.maxPage = Math.ceil(\n legend.itemList.node().getBBox().height / legend.clipHeight\n );\n\n legend.nav\n .select('text')\n .text(legend.navConfig.currentPage + '/' + legend.navConfig.maxPage);\n\n x =\n x +\n legend.nav\n .select('text')\n .node()\n .getBBox().width +\n legend.config.navigation.padding;\n\n legend.nav\n .select('.navBottom')\n .attr(\n 'transform',\n 'translate(' + (x + legend.config.navigation.padding) + ',0)'\n );\n\n legend.nav.attr('transform', 'translate(0,' + legend.clipHeight + ')');\n\n legend.clippath\n .select('rect')\n // .attr('x', 0)\n .attr('y', 0)\n .attr('width', legend.itemList.node().getBBox().width)\n .attr('height', legend.clipHeight);\n\n legend.content.classed(legend.chart.cssPrefix + 'clipLegend', true);\n },\n /**\n * Function to create and append css classes to style tag for the axis\n */\n setCSS: function() {\n var legend = this;\n var cssString = '',\n i;\n if (!!legend.chart.config.style.color) {\n legend.config.color = legend.chart.config.style.color;\n }\n\n cssString = cssString + ' .' + legend.chart.cssPrefix + 'legend {';\n for (i in legend.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n legend.config.style[i] +\n ';';\n }\n if (legend.config.color) {\n cssString = cssString + 'fill:' + legend.config.color + ';';\n }\n cssString = cssString + '}';\n cssString = cssString + ' .' + legend.chart.cssPrefix + 'legendNav {';\n for (i in legend.config.navigation.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n legend.config.navigation.style[i] +\n ';';\n }\n if (legend.config.color) {\n cssString = cssString + 'fill:' + legend.config.color + ';';\n }\n cssString = cssString + '}';\n\n cssString = cssString + ' .' + legend.chart.cssPrefix + 'clipLegend {';\n cssString =\n cssString + 'clip-path:url(#legendClip-' + legend.chart.index + ');';\n cssString = cssString + '}';\n\n legend.chart.style.node().appendChild(document.createTextNode(cssString));\n },\n /**\n * Function to show bottom legends for navigation\n */\n showBottomPage: function() {\n var legend = this;\n\n if (legend.navConfig.currentPage < legend.navConfig.maxPage) {\n legend.navConfig.currentPage = legend.navConfig.currentPage + 1;\n legend.nav\n .select('text')\n .text(legend.navConfig.currentPage + '/' + legend.navConfig.maxPage);\n legend.itemList\n .transition()\n .duration(legend.config.navigation.duration)\n .attr(\n 'transform',\n 'translate(0,' +\n legend.clipHeight * (1 - legend.navConfig.currentPage) +\n ')'\n );\n }\n },\n /**\n * Function to show top legends for navigation\n */\n showTopPage: function() {\n var legend = this;\n if (legend.navConfig.currentPage > 1) {\n legend.navConfig.currentPage = legend.navConfig.currentPage - 1;\n legend.nav\n .select('text')\n .text(legend.navConfig.currentPage + '/' + legend.navConfig.maxPage);\n legend.itemList\n .transition()\n .duration(legend.config.navigation.duration)\n .attr(\n 'transform',\n 'translate(0,' +\n legend.clipHeight * (1 - legend.navConfig.currentPage) +\n ')'\n );\n }\n }\n };\n\n /**\n * A Constructor for creating, updating and removing chart title component in chart.\n * @constructor\n */\n function Title() {\n this.init.apply(this, arguments);\n }\n Title.prototype = {\n /**\n * The default configuration for chart title.\n * @type {object}\n */\n defaultConfig: {\n style: {\n textAnchor: 'middle',\n fontSize: '17px'\n },\n padding: 10\n },\n /**\n * Function to destroy chart title\n */\n destroy: function() {\n var title = this,\n chart = title.chart,\n key;\n\n title.gElem.selectAll('*').remove();\n title.gElem.node().parentNode.removeChild(title.gElem.node());\n\n for (key in title) {\n delete title[key];\n }\n delete chart.title;\n },\n /**\n * Function to initialise d3 and associated functions required for chart title series\n * @param {Object} chart Parent chart object\n * @param {Object} config configuration object\n * @param {boolean} render Flag whether to do rendering after initialisation\n */\n init: function(chart, config, render) {\n var title = this;\n title.chart = chart;\n title.config = merge(this.defaultConfig, config);\n title.setCSS();\n if (render !== false) {\n title.render();\n }\n },\n /**\n * Function to remove chart title\n */\n remove: function() {\n var title = this;\n title.destroy();\n },\n /**\n * Function to render chart title\n */\n render: function() {\n var title = this;\n title.firstRender = false;\n title.gElem = title.chart.gElem\n .append('g')\n .attr('class', title.chart.cssPrefix + 'Title');\n title.gElem\n .append('text')\n .attr('x', title.chart.width / 2)\n .text(title.config.text);\n title.gElem.attr(\n 'transform',\n 'translate(0,' + title.gElem.node().getBBox().height + ')'\n );\n title.height = title.gElem.node().getBBox().height + title.config.padding;\n },\n /**\n * Function to resize chart title\n */\n resize: function() {\n var title = this;\n title.gElem.selectAll('text').attr('x', title.chart.width / 2);\n },\n /**\n * Function to create and append css classes to style tag for the chart title\n */\n setCSS: function() {\n var title = this;\n var cssString = '',\n i;\n\n cssString = cssString + ' .' + title.chart.cssPrefix + 'Title {';\n for (i in title.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n title.config.style[i] +\n ';';\n }\n cssString = cssString + '}';\n title.chart.style.node().appendChild(document.createTextNode(cssString));\n }\n };\n\n /**\n * A constructor for creating chartPlus instances\n * @constructor\n */\n\n function Hierarchy() {\n this.init.apply(this, arguments);\n }\n\n Hierarchy.prototype = {\n remove: function() {\n var hierarchy = this;\n d3.select(hierarchy.container)\n .select('.' + NAMESPACE + 'container')\n .remove();\n if (isObject(hierarchy.tooltip)) {\n hierarchy.tooltip.remove();\n }\n drop(charts, hierarchy);\n\n for (var key in hierarchy) {\n if (key !== 'dataSet') {\n delete hierarchy[key];\n } else {\n hierarchy[key] = null;\n }\n }\n },\n defaultConfig: {\n color: 'steelblue',\n rectHeight: 25,\n rectPadding: 10\n },\n idCount: 0,\n addPath: function(pathArray) {\n var hierarchy = this;\n if (!isArray(pathArray)) return;\n hierarchy.dataSet.path.push.apply(hierarchy.dataSet.path, pathArray);\n hierarchy.resize();\n },\n drill: function(data, direction) {\n var hierarchy = this;\n hierarchy.d3Layout(hierarchy.dataSet.data).forEach(function(node) {\n if (!isNumber(node.id)) {\n node.id = hierarchy.idCount;\n hierarchy.idCount++;\n }\n });\n // hierarchy.d3Layout.sort(null);\n if (direction === 'up' && isObject(data.parent)) {\n hierarchy.d3ScaleY\n .domain([\n 0,\n d3Max(\n data.parent.children.map(function(d) {\n return isNumber(d.value) ? d.value : 1;\n })\n )\n ])\n .nice();\n } else if (direction === 'down' && isArray(data.children)) {\n hierarchy.d3ScaleY\n .domain([\n 0,\n d3Max(\n data.children.map(function(d) {\n return isNumber(d.value) ? d.value : 1;\n })\n )\n ])\n .nice();\n }\n\n hierarchy.components.forEach(function(component) {\n switch (component.type) {\n case 'drillPath':\n component.display =\n isArray(hierarchy.dataSet.path) &&\n hierarchy.dataSet.path.length > 0;\n if (!!component.display) {\n hierarchy.updateDrillPath();\n }\n break;\n case 'bar':\n component.display =\n isObject(data) &&\n isArray(data.children) &&\n data.children.length > 0;\n if (!!component.display) {\n hierarchy.updateBar(data, direction);\n }\n break;\n }\n });\n },\n drillDown: function(data) {\n var hierarchy = this;\n hierarchy.ddInProgress = false;\n if (isArray(data.children) && data.children.length > 0) {\n merge(\n true,\n hierarchy.dataSet.path[hierarchy.eventMeta.length - 1].dataRef,\n data\n );\n hierarchy.drill(\n hierarchy.dataSet.path[hierarchy.eventMeta.length - 1].dataRef,\n 'down'\n );\n } else {\n console.log('return');\n return;\n }\n },\n /**\n * Function to initialize hierarchy hierarchy and required sub components\n * @param {object} userConfig user configuration\n * @param {boolean} rendered svg is for exporting or not\n */\n init: function(data, config) {\n var hierarchy = this;\n\n // Set index and push this to the charts array\n this.index = idCounter;\n this.cssPrefix = NAMESPACE + this.index + '-';\n idCounter++;\n charts.push(this);\n\n hierarchy.dataSet = data;\n hierarchy.config = {};\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 1 - merge userConfig with defaultConfig\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // merge(true, hierarchy.defaultConfig.tooltip, defaultConfig.tooltip);\n hierarchy.config.style = merge(\n hierarchy.defaultConfig.style,\n defaultConfig.style\n );\n hierarchy.config = merge(\n hierarchy.config,\n hierarchy.defaultConfig,\n config\n );\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 3 - Set Color Scale\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n hierarchy.color = d3\n .scaleOrdinal()\n .domain([true, false])\n .range([hierarchy.config.color, '#cccccc']);\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 4 - Set Drilldown path if not given, derive from data\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 5 - Init required d3 component\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n hierarchy.d3ScaleY = d3.scaleLinear();\n\n // d3.format(\"s\")\n hierarchy.d3Layout = d3\n .hierarchy()\n .sort(null)\n .value(null); // summing up is not required\n\n hierarchy.symbol = d3.symbol().size(50);\n hierarchy.components = [\n {\n type: 'drillPath',\n offsetHeight: 0\n },\n {\n type: 'bar',\n offsetHeight: 20\n // maxHeight: 300\n }\n ];\n\n hierarchy.pageConfig = {\n pageHeight: 0,\n currentPage: 0,\n totalPage: 0\n };\n\n hierarchy.render();\n },\n /**\n * Function to initialise containers for svg components\n */\n initContainer: function() {\n var hierarchy = this;\n\n if (!hierarchy.config.container) {\n error('invalid Container reference', true);\n }\n if (isString(hierarchy.config.container)) {\n hierarchy.container = DOCUMENT.getElementById(\n hierarchy.config.container\n );\n }\n if (isElement(hierarchy.config.container)) {\n hierarchy.container = hierarchy.config.container;\n }\n if (!isElement(hierarchy.container)) {\n error('No Valid Container available', true);\n }\n hierarchy.SVGContainer = d3\n .select(hierarchy.container)\n .append('div')\n .attr('class', NAMESPACE + 'container')\n .attr('id', NAMESPACE + hierarchy.index)\n .styles({\n width: '100%',\n height: '100%',\n position: 'relative',\n 'vertical-align': 'top',\n overflow: 'hidden'\n });\n\n hierarchy.width = getWidth(hierarchy.container);\n hierarchy.height = getHeight(hierarchy.container);\n\n hierarchy.d3ScaleY.range([0, hierarchy.width]);\n\n hierarchy.svg = hierarchy.SVGContainer.append('svg')\n .styles({\n position: 'absolute',\n top: '0',\n left: '0'\n })\n .attr('id', 'svg-' + hierarchy.index)\n .attr('width', '100%')\n .attr('height', '100%');\n if (!chartPlus.isIE) {\n hierarchy.svg\n .attr('viewBox', '0 0 ' + hierarchy.width + ' ' + hierarchy.height)\n .attr('preserveAspectRatio', 'xMinYMin meet');\n }\n hierarchy.style = hierarchy.svg.append('style').attr('type', 'text/css');\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 2 - Set CSS\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n hierarchy.svg\n .append('rect')\n .attr('class', hierarchy.cssPrefix + 'bg')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', '100%')\n .attr('height', '100%'); ////// FROM Config ?? bg - color\n\n hierarchy.gElem = hierarchy.svg\n .append('g')\n .classed(hierarchy.cssPrefix + 'componentGroup', true);\n\n hierarchy.setCSS();\n },\n /**\n * Function to render hierarchy\n */\n render: function() {\n var hierarchy = this;\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 6 - Init containers\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n hierarchy.initContainer();\n hierarchy.tooltip = new Tooltip(hierarchy, hierarchy.config.tooltip);\n hierarchy.clippath = hierarchy.svg\n .append('defs')\n .append('clipPath')\n .attr('id', 'hierarchyClip-' + hierarchy.index);\n hierarchy.clippath\n .append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', '100%')\n .attr('height', 0);\n\n if (!isObject(hierarchy.dataSet.data)) return;\n\n hierarchy.d3Layout(hierarchy.dataSet.data).forEach(function(node) {\n if (!isNumber(node.id)) {\n node.id = hierarchy.idCount;\n hierarchy.idCount++;\n }\n });\n // hierarchy.d3Layout.sort(null);\n\n hierarchy.d3ScaleY\n .domain([\n 0,\n d3Max(\n hierarchy.dataSet.data.children.map(function(d) {\n return isNumber(d.value) ? d.value : 1;\n })\n )\n ])\n .nice();\n\n hierarchy.components.forEach(function(component) {\n switch (component.type) {\n case 'drillPath':\n component.elem = hierarchy.gElem.append('g');\n component.display =\n isArray(hierarchy.dataSet.path) &&\n hierarchy.dataSet.path.length > 0;\n if (!!component.display) {\n hierarchy.dataSet.path[0].active = true;\n hierarchy.updateDrillPath();\n }\n break;\n case 'bar':\n component.elem = hierarchy.gElem\n .append('g')\n .attr('clip-path', 'url(#hierarchyClip-' + hierarchy.index + ')');\n component.display =\n isObject(hierarchy.dataSet.data) &&\n isArray(hierarchy.dataSet.data.children) &&\n hierarchy.dataSet.data.children.length > 0;\n if (!!component.display) {\n hierarchy.updateBar(hierarchy.dataSet.data, 'down');\n }\n break;\n }\n });\n },\n resize: function() {\n var hierarchy = this;\n var x0 = hierarchy.d3ScaleY.range()[0];\n var x1 = hierarchy.width - hierarchy.d3ScaleY.range()[1];\n\n hierarchy.width = getWidth(hierarchy.container);\n hierarchy.height = getHeight(hierarchy.container);\n\n hierarchy.d3ScaleY.range([x0, hierarchy.width - x1]);\n\n if (!chartPlus.isIE) {\n hierarchy.svg.attr(\n 'viewBox',\n '0 0 ' + hierarchy.width + ' ' + hierarchy.height\n );\n }\n hierarchy.components.forEach(function(component) {\n switch (component.type) {\n case 'drillPath':\n if (!!component.display) {\n hierarchy.updateDrillPath();\n }\n break;\n case 'bar':\n if (!!component.display) {\n hierarchy.resizeBar();\n }\n break;\n }\n });\n },\n resizeBar: function() {\n var hierarchy = this;\n var offsetHeight = 0,\n maxHeight = 0;\n\n for (var i = 0; i < hierarchy.components.length; i++) {\n if (hierarchy.components[i].type === 'bar') {\n offsetHeight = offsetHeight + hierarchy.components[i].offsetHeight;\n break;\n }\n offsetHeight =\n offsetHeight +\n hierarchy.components[i].offsetHeight +\n hierarchy.components[i].elem.node().getBBox().height;\n }\n\n var component = hierarchy.components.filter(function(component) {\n return component.type === 'bar';\n })[0];\n\n component.elem.attr('transform', 'translate(0,' + offsetHeight + ')');\n\n var dataLength = component.elem.select('.enter').selectAll('g')[0].length;\n\n if (\n !component.maxHeight ||\n component.maxHeight > hierarchy.height - offsetHeight\n ) {\n maxHeight = hierarchy.height - offsetHeight;\n }\n if (\n maxHeight / dataLength <\n hierarchy.config.rectHeight + hierarchy.config.rectPadding\n ) {\n hierarchy.rectHeight = (maxHeight * 0.7) / dataLength;\n hierarchy.rectPadding = (maxHeight * 0.3) / dataLength;\n } else {\n hierarchy.rectHeight = hierarchy.config.rectHeight;\n hierarchy.rectPadding = hierarchy.config.rectPadding;\n }\n var minHeight =\n component.elem\n .select('.enter')\n .select('.key')\n .node()\n .getBBox().height >\n component.elem\n .select('.enter')\n .select('.value')\n .node()\n .getBBox().height\n ? component.elem\n .select('.enter')\n .select('.key')\n .node()\n .getBBox().height\n : component.elem\n .select('.enter')\n .select('.value')\n .node()\n .getBBox().height;\n\n if (minHeight > hierarchy.rectHeight) {\n hierarchy.rectHeight = minHeight;\n hierarchy.rectPadding = (minHeight * 30) / 70;\n }\n var tempHeight = hierarchy.pageConfig.pageHeight;\n hierarchy.pageConfig.pageHeight =\n (hierarchy.rectHeight + hierarchy.rectPadding) *\n Math.floor(maxHeight / (hierarchy.rectHeight + hierarchy.rectPadding));\n if (tempHeight !== hierarchy.pageConfig.pageHeight) {\n hierarchy.pageConfig.totalPage = Math.ceil(\n ((hierarchy.rectHeight + hierarchy.rectPadding) * dataLength) /\n maxHeight\n );\n if (hierarchy.pageConfig.currentPage > hierarchy.pageConfig.totalPage) {\n hierarchy.pageConfig.currentPage = 1;\n }\n hierarchy.pageConfig.offsetHeight =\n -1 *\n (hierarchy.pageConfig.currentPage - 1) *\n hierarchy.pageConfig.pageHeight;\n hierarchy.updatePage();\n component.elem\n .select('.enter')\n .attr(\n 'transform',\n 'translate(0,' + hierarchy.pageConfig.offsetHeight + ')'\n );\n }\n\n component.elem\n .select('.enter')\n .selectAll('g')\n .each(function(d, i) {\n d3.select(this)\n .attr('transform', function() {\n return (\n 'translate(0,' +\n (hierarchy.rectHeight + hierarchy.rectPadding) * i +\n ')'\n );\n })\n .classed('drillDown', function(d) {\n return (\n isArray(hierarchy.dataSet.path) &&\n d.depth < hierarchy.dataSet.path.length\n );\n });\n d3.select(this)\n .select('rect')\n .attr('width', function() {\n if (hierarchy.scaleY(d.value) - hierarchy.scaleY(0) <= 1) {\n return 1;\n } else {\n return hierarchy.scaleY(d.value) - hierarchy.scaleY(0);\n }\n })\n .attr('height', hierarchy.rectHeight)\n .style('fill', function(d) {\n return hierarchy.color(\n isArray(hierarchy.dataSet.path) &&\n d.depth < hierarchy.dataSet.path.length\n );\n });\n d3.select(this)\n .select('.value')\n .attr('y', hierarchy.rectHeight / 2)\n .attr('x', function() {\n return hierarchy.scaleY(d.value);\n });\n d3.select(this)\n .select('.key')\n .attr('y', hierarchy.rectHeight / 2)\n .attr('x', hierarchy.scaleY(0));\n });\n hierarchy.clippath\n .select('rect')\n .attr(\n 'height',\n hierarchy.pageConfig.pageHeight - hierarchy.rectPadding / 2\n );\n },\n scaleY: function(number) {\n var hierarchy = this;\n if (isNumber(number)) {\n return hierarchy.d3ScaleY(number);\n } else {\n return hierarchy.d3ScaleY(0);\n }\n },\n scrollBars: function(direction) {\n var hierarchy = this;\n\n var component = hierarchy.components.filter(function(component) {\n return component.type === 'bar';\n })[0];\n if (direction === 'up') {\n hierarchy.pageConfig.offsetHeight =\n -1 *\n (hierarchy.pageConfig.currentPage - 2) *\n hierarchy.pageConfig.pageHeight;\n if (hierarchy.pageConfig.offsetHeight > 0) {\n return;\n }\n hierarchy.pageConfig.currentPage = hierarchy.pageConfig.currentPage - 1;\n } else if (direction === 'down') {\n hierarchy.pageConfig.offsetHeight =\n -1 *\n hierarchy.pageConfig.currentPage *\n hierarchy.pageConfig.pageHeight;\n if (\n Math.abs(hierarchy.pageConfig.offsetHeight) >\n component.elem\n .select('.enter')\n .node()\n .getBBox().height\n ) {\n return;\n }\n hierarchy.pageConfig.currentPage = hierarchy.pageConfig.currentPage + 1;\n }\n\n hierarchy.updatePage();\n component.elem\n .select('.enter')\n .transition()\n .duration(1000)\n .attr(\n 'transform',\n 'translate(0,' + hierarchy.pageConfig.offsetHeight + ')'\n );\n },\n setCSS: function() {\n var hierarchy = this;\n var cssString = '',\n component,\n key,\n classStart = ' .',\n classOpen = ' {',\n classClose = '} ',\n i;\n\n // set background class\n cssString =\n cssString +\n classStart +\n hierarchy.cssPrefix +\n 'bg' +\n classOpen +\n 'fill:' +\n themeConfig.backgroundColor +\n ';' +\n classClose;\n\n if (getContrastYIQ(themeConfig.backgroundColor) === 'dark') {\n cssString =\n cssString +\n '#svg-' +\n hierarchy.index +\n ' text' +\n classOpen +\n 'fill:' +\n themeConfig.text.contrastDarkColor +\n ';';\n } else {\n cssString =\n cssString +\n '#svg-' +\n hierarchy.index +\n ' text' +\n classOpen +\n 'fill:' +\n themeConfig.text.contrastLightColor +\n ';';\n }\n\n for (i in hierarchy.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n hierarchy.config.style[i] +\n ';';\n }\n cssString = cssString + classClose;\n\n hierarchy.style.node().appendChild(document.createTextNode(cssString));\n },\n updateBar: function(data, direction) {\n var hierarchy = this;\n\n var offsetHeight = 0,\n dataLength = 1,\n maxHeight = 0;\n\n if (!isArray(data.children)) return;\n\n for (var i = 0; i < hierarchy.components.length; i++) {\n if (hierarchy.components[i].type === 'bar') {\n offsetHeight = offsetHeight + hierarchy.components[i].offsetHeight;\n break;\n }\n offsetHeight =\n offsetHeight +\n hierarchy.components[i].offsetHeight +\n hierarchy.components[i].elem.node().getBBox().height;\n }\n\n var component = hierarchy.components.filter(function(component) {\n return component.type === 'bar';\n })[0];\n\n component.elem.attr('transform', 'translate(0,' + offsetHeight + ')');\n if (direction === 'up') {\n dataLength = data.parent.children.length;\n } else {\n dataLength = data.children.length;\n }\n\n if (\n !component.maxHeight ||\n component.maxHeight > hierarchy.height - offsetHeight\n ) {\n maxHeight = hierarchy.height - offsetHeight;\n }\n if (\n maxHeight / dataLength <\n hierarchy.config.rectHeight + hierarchy.config.rectPadding\n ) {\n hierarchy.rectHeight = (maxHeight * 0.7) / dataLength;\n hierarchy.rectPadding = (maxHeight * 0.3) / dataLength;\n } else {\n hierarchy.rectHeight = hierarchy.config.rectHeight;\n hierarchy.rectPadding = hierarchy.config.rectPadding;\n }\n\n if (direction === 'up') {\n hierarchy.events.displayMatrix.data = data.parent;\n hierarchy.container.dispatchEvent(hierarchy.events.displayMatrix);\n up(hierarchy, component.elem, data);\n\n hierarchy.pageConfig.pageHeight =\n (hierarchy.rectHeight + hierarchy.rectPadding) *\n Math.floor(\n maxHeight / (hierarchy.rectHeight + hierarchy.rectPadding)\n );\n hierarchy.clippath\n .select('rect')\n .attr('y', 0)\n .attr(\n 'height',\n hierarchy.pageConfig.pageHeight - hierarchy.rectPadding / 2\n );\n\n hierarchy.pageConfig.currentPage = 1;\n hierarchy.pageConfig.totalPage = Math.ceil(\n ((hierarchy.rectHeight + hierarchy.rectPadding) * dataLength) /\n maxHeight\n );\n hierarchy.updatePage();\n } else {\n hierarchy.events.displayMatrix.data = data;\n hierarchy.container.dispatchEvent(hierarchy.events.displayMatrix);\n down(hierarchy, component.elem, data);\n hierarchy.pageConfig.pageHeight =\n (hierarchy.rectHeight + hierarchy.rectPadding) *\n Math.floor(\n maxHeight / (hierarchy.rectHeight + hierarchy.rectPadding)\n );\n hierarchy.clippath\n .select('rect')\n .attr('y', 0)\n .attr(\n 'height',\n hierarchy.pageConfig.pageHeight - hierarchy.rectPadding / 2\n );\n\n hierarchy.pageConfig.currentPage = 1;\n hierarchy.pageConfig.totalPage = Math.ceil(\n ((hierarchy.rectHeight + hierarchy.rectPadding) * dataLength) /\n maxHeight\n );\n hierarchy.updatePage();\n }\n },\n updateDrillPath: function() {\n var hierarchy = this;\n var tempWidth = 0,\n tempHeight = 0,\n offsetHeight = 0,\n i;\n var pathElem, pageElem;\n\n for (i = 0; i < hierarchy.components.length; i++) {\n if (hierarchy.components[i].type === 'drillPath') {\n offsetHeight = offsetHeight + hierarchy.components[i].offsetHeight;\n break;\n }\n offsetHeight =\n offsetHeight +\n hierarchy.components[i].offsetHeight +\n hierarchy.components[i].elem.node().getBBox().height;\n }\n\n var component = hierarchy.components.filter(function(component) {\n return component.type === 'drillPath';\n })[0];\n\n component.elem.attr('transform', 'translate(0,' + offsetHeight + ')');\n\n pathElem = component.elem.select('.pathElem');\n\n if (!pathElem.node()) {\n pathElem = component.elem.append('g').attr('class', 'pathElem');\n }\n\n var drillPath = pathElem\n .on('click', function() {\n var d = d3.event.target.__data__;\n if (!d.drillUp) return;\n\n if (isObject(d.dataRef)) {\n if (isArray(hierarchy.dataSet.path)) {\n hierarchy.dataSet.path.forEach(function(path, idx) {\n path.active = idx < d.dataRef.depth;\n path.drillUp = idx < d.dataRef.depth - 1;\n });\n }\n hierarchy.drill(d.dataRef, 'up');\n }\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // Functions to drill up\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n })\n .selectAll('.drillPath')\n .data(hierarchy.dataSet.path);\n\n drillPath\n .enter()\n .append('g')\n .attr('class', 'drillPath')\n .append('text');\n\n pathElem\n .selectAll('text')\n .append('tspan')\n .attr('class', 'name')\n .style({ 'font-weight': 'bold' });\n pathElem\n .selectAll('text')\n .append('tspan')\n .attr('class', 'icon');\n\n pathElem.selectAll('text').each(function(d, i) {\n d3.select(this)\n .select('.name')\n .text(d.name);\n if (i < hierarchy.dataSet.path.length - 1) {\n d3.select(this)\n .select('.icon')\n .text('\\u2004\\u2771\\u2004');\n }\n //❱\n // return ((hierarchy.dataSet.path.indexOf(d) > 0) ? ' › ' : '') + d.name;\n });\n\n tempHeight = pathElem\n .select('g')\n .node()\n .getBBox().height;\n\n pathElem\n .selectAll('g')\n .attr('transform', function(d, i) {\n var translate = 'translate(' + tempWidth + ',' + tempHeight + ')';\n tempWidth =\n tempWidth +\n d3\n .select(this)\n .node()\n .getBBox().width;\n return translate;\n })\n .classed('active', function(d, i) {\n d3.select(this)\n .select('.name')\n .classed('drillUp', !!d.drillUp);\n return !!d.active;\n });\n\n drillPath.exit().remove();\n\n pageElem = component.elem.select('.pageElem');\n\n if (!pageElem.node()) {\n pageElem = component.elem\n .append('g')\n .style('opacity', 1e-6)\n .attr('class', 'pageElem');\n hierarchy.symbol.type('triangle-up');\n pageElem\n .append('path')\n .attr('class', 'pageUp')\n .attr('d', hierarchy.symbol)\n // .html(' ▲ ')\n .on('click', function() {\n hierarchy.scrollBars('up');\n });\n pageElem\n .append('text')\n .attr('class', 'pageCount')\n .text(\n hierarchy.pageConfig.currentPage +\n '/' +\n hierarchy.pageConfig.totalPage\n );\n\n hierarchy.symbol.type('triangle-down');\n pageElem\n .append('path')\n .attr('class', 'pageDown')\n .attr('d', hierarchy.symbol)\n // .html(' ▼ ')\n .on('click', function() {\n hierarchy.scrollBars('down');\n });\n }\n\n pageElem.attr(\n 'transform',\n 'translate(' + pathElem.node().getBBox().width + ',0)'\n );\n tempWidth = 0;\n\n var navHeight = pageElem.node().getBBox().height;\n\n tempWidth =\n tempWidth +\n pageElem\n .select('.pageUp')\n .node()\n .getBBox().width;\n pageElem\n .select('.pageUp')\n .attr('transform', 'translate(' + tempWidth + ',' + navHeight + ')');\n tempWidth =\n tempWidth +\n pageElem\n .select('.pageUp')\n .node()\n .getBBox().width;\n pageElem\n .select('.pageCount')\n .attr('transform', 'translate(' + tempWidth + ',' + navHeight + ')');\n tempWidth =\n tempWidth +\n pageElem\n .select('.pageCount')\n .node()\n .getBBox().width;\n tempWidth =\n tempWidth +\n pageElem\n .select('.pageDown')\n .node()\n .getBBox().width;\n pageElem\n .select('.pageDown')\n .attr('transform', 'translate(' + tempWidth + ',' + navHeight + ')');\n\n // pageElem.selectAll('*').each(function() {\n\n // tempWidth = tempWidth + d3.select(this).node().getBBox().width;\n // console.log(tempWidth, d3.select(this).node().getBBox().width);\n // d3.select(this).attr('transform', 'translate(' + tempWidth + ',' + (navHeight) + ')');\n // // tempWidth = tempWidth + d3.select(this).node().getBBox().width;\n // });\n },\n //update text and color of page\n updatePage: function() {\n var hierarchy = this;\n var pathElem,\n pageElem,\n tempWidth = 0;\n\n var component = hierarchy.components.filter(function(component) {\n return component.type === 'drillPath';\n })[0];\n\n pageElem = component.elem.select('.pageElem');\n if (hierarchy.pageConfig.totalPage > 1) {\n hierarchy.pageConfig.display = true;\n pageElem.style('opacity', 1);\n } else {\n hierarchy.pageConfig.display = false;\n pageElem.style('opacity', 1e-6);\n }\n pageElem\n .select('.pageUp')\n .classed('pageDisabled', hierarchy.pageConfig.currentPage === 1);\n pageElem\n .select('.pageDown')\n .classed(\n 'pageDisabled',\n hierarchy.pageConfig.currentPage === hierarchy.pageConfig.totalPage\n );\n pageElem\n .select('.pageCount')\n .text(\n hierarchy.pageConfig.currentPage +\n '/' +\n hierarchy.pageConfig.totalPage\n );\n var navHeight = pageElem.node().getBBox().height;\n tempWidth = 0;\n tempWidth =\n tempWidth +\n pageElem\n .select('.pageUp')\n .node()\n .getBBox().width;\n pageElem\n .select('.pageUp')\n .attr('transform', 'translate(' + tempWidth + ',' + navHeight + ')');\n tempWidth =\n tempWidth +\n pageElem\n .select('.pageUp')\n .node()\n .getBBox().width;\n pageElem\n .select('.pageCount')\n .attr('transform', 'translate(' + tempWidth + ',' + navHeight + ')');\n tempWidth =\n tempWidth +\n pageElem\n .select('.pageCount')\n .node()\n .getBBox().width;\n tempWidth =\n tempWidth +\n pageElem\n .select('.pageDown')\n .node()\n .getBBox().width;\n pageElem\n .select('.pageDown')\n .attr('transform', 'translate(' + tempWidth + ',' + navHeight + ')');\n\n // pageElem.selectAll('*').each(function() {\n // // tempWidth = tempWidth + d3.select(this).node().getBBox().width;\n // console.log(tempWidth, d3.select(this).node().getBBox().width);\n // d3.select(this).attr('transform', 'translate(' + tempWidth + ',' + (navHeight) + ')');\n // tempWidth = tempWidth + d3.select(this).node().getBBox().width;\n // });\n }\n };\n\n function down(context, elem, data) {\n var hierarchy = context,\n index = 0,\n i = 0;\n if (!isArray(data.children)) return;\n\n var duration = d3.event && d3.event.altKey ? 7500 : 750,\n delay = duration / data.children.length;\n\n if (isObject(data.parent)) {\n for (i = 0; i < data.parent.children.length; i++) {\n if (data.id === data.parent.children[i].id) {\n index = i;\n break;\n }\n }\n }\n\n // Mark any currently-displayed bars as exiting.\n var exit = elem.selectAll('.enter').attr('class', 'exit');\n\n // Entering nodes immediately obscure the clicked-on bar, so hide it.\n exit\n .selectAll('rect')\n .filter(function(p) {\n return p === data;\n })\n .style('opacity', 1e-6);\n\n hierarchy.d3ScaleY\n .domain([\n 0,\n d3.sum(\n data.children.map(function(d) {\n return isNumber(d.value) ? d.value : 1;\n })\n )\n ])\n .nice();\n\n var tempX = 0,\n translate;\n\n var enter = drawBars(hierarchy, elem, data)\n .attr('transform', function(d) {\n translate =\n 'translate(' +\n tempX +\n ',' +\n (hierarchy.rectHeight + hierarchy.rectPadding) * index +\n ')';\n tempX =\n tempX +\n (hierarchy.scaleY(d.value) - hierarchy.scaleY(0) <= 1\n ? 1\n : hierarchy.scaleY(d.value) - hierarchy.scaleY(0));\n return translate;\n })\n .style('opacity', 1);\n\n enter.selectAll('text').style('opacity', 1e-6);\n\n enter.select('rect').style('fill', function(d) {\n return hierarchy.color(\n isArray(hierarchy.dataSet.path) &&\n d.depth < hierarchy.dataSet.path.length\n );\n });\n\n hierarchy.d3ScaleY\n .domain([\n 0,\n d3Max(\n data.children.map(function(d) {\n return isNumber(d.value) ? d.value : 1;\n })\n )\n ])\n .nice();\n\n var enterTransition = enter\n .transition()\n .duration(duration)\n .delay(function(d, i) {\n return i * delay;\n })\n .attr('transform', function(d, i) {\n return (\n 'translate(0,' +\n (hierarchy.rectHeight + hierarchy.rectPadding) * i +\n ')'\n );\n });\n enterTransition\n .selectAll('.value')\n .attr('x', function(d) {\n return hierarchy.scaleY(d.value);\n })\n .style('opacity', 1);\n\n enterTransition\n .select('.key')\n .attr('x', hierarchy.scaleY(0))\n .style('opacity', 1);\n\n // Transition entering rects to the new x-scale.\n enterTransition\n .select('rect')\n .attr('x', hierarchy.scaleY(0))\n .attr('width', function(d) {\n if (hierarchy.scaleY(d.value) - hierarchy.scaleY(0) <= 1) {\n return 1;\n } else {\n return hierarchy.scaleY(d.value) - hierarchy.scaleY(0);\n }\n })\n .style('fill', function(d) {\n return hierarchy.color(\n isArray(hierarchy.dataSet.path) &&\n d.depth < hierarchy.dataSet.path.length\n );\n });\n\n // Transition exiting bars to fade out.\n var exitTransition = exit\n .transition()\n .duration(duration)\n .style('opacity', 1e-6)\n .remove();\n\n // Transition exiting bars to the new x-scale.\n exitTransition\n .selectAll('rect')\n .attr('x', hierarchy.scaleY(0))\n .attr('width', function(d) {\n if (hierarchy.scaleY(d.value) - hierarchy.scaleY(0) <= 1) {\n return 1;\n } else {\n return hierarchy.scaleY(d.value) - hierarchy.scaleY(0);\n }\n });\n }\n\n function up(context, elem, data) {\n var hierarchy = context,\n index = 0,\n i = 0;\n\n if (!isObject(data.parent)) return;\n\n var duration = d3.event && d3.event.altKey ? 7500 : 750,\n delay = duration / data.children.length;\n var end = duration + data.children.length * delay;\n\n for (i = 0; i < data.parent.children.length; i++) {\n if (data.id === data.parent.children[i].id) {\n index = i;\n break;\n }\n }\n\n var tempX = 0,\n translate;\n\n // Mark any currently-displayed bars as exiting.\n var exit = elem.selectAll('.enter').attr('class', 'exit');\n\n hierarchy.d3ScaleY\n .domain([\n 0,\n d3.sum(\n data.children.map(function(d) {\n return isNumber(d.value) ? d.value : 1;\n })\n )\n ])\n .nice();\n\n // Transition exiting bars to the parent's position.\n var exitTransition = exit\n .selectAll('g')\n .transition()\n .duration(duration)\n .delay(function(d, i) {\n return i * delay;\n })\n .attr('transform', function(d) {\n translate =\n 'translate(' +\n tempX +\n ',' +\n (hierarchy.rectHeight + hierarchy.rectPadding) * index +\n ')';\n tempX =\n tempX +\n (hierarchy.scaleY(d.value) - hierarchy.scaleY(0) <= 1\n ? 1\n : hierarchy.scaleY(d.value) - hierarchy.scaleY(0));\n return translate;\n });\n\n // Transition exiting text to fade out.\n exitTransition.selectAll('text').style('opacity', 1e-6);\n\n // Transition exiting bars to the new x-scale.\n exitTransition\n .selectAll('rect')\n .attr('width', function(d) {\n if (hierarchy.scaleY(d.value) - hierarchy.scaleY(0) <= 1) {\n return 1;\n } else {\n return hierarchy.scaleY(d.value) - hierarchy.scaleY(0);\n }\n })\n .style('fill', hierarchy.color(true))\n .style('opacity', 1e-6);\n\n // Remove exiting nodes when the last child has finished transitioning.\n exit\n .transition()\n .duration(end)\n .remove();\n\n hierarchy.d3ScaleY\n .domain([\n 0,\n d3Max(\n data.parent.children.map(function(d) {\n return isNumber(d.value) ? d.value : 1;\n })\n )\n ])\n .nice();\n\n var enter = drawBars(hierarchy, elem, data.parent)\n .attr('transform', function(d, i) {\n return (\n 'translate(0,' +\n (hierarchy.rectHeight + hierarchy.rectPadding) * i +\n ')'\n );\n })\n .style('opacity', 1e-6);\n\n enter.select('rect').style('fill', function(d) {\n return hierarchy.color(\n isArray(hierarchy.dataSet.path) &&\n d.depth < hierarchy.dataSet.path.length\n );\n });\n\n // Transition entering bars to fade in over the full duration.\n var enterTransition = enter\n .transition()\n .duration(end)\n .style('opacity', 1);\n\n // Transition entering rects to the new x-scale.\n // When the entering parent rect is done, make it visible!\n enterTransition.select('rect').attr('width', function(d) {\n if (hierarchy.scaleY(d.value) - hierarchy.scaleY(0) <= 1) {\n return 1;\n } else {\n return hierarchy.scaleY(d.value) - hierarchy.scaleY(0);\n }\n });\n\n enterTransition.selectAll('.value').attr('x', function(d) {\n return hierarchy.scaleY(d.value);\n });\n }\n\n function drawBars(context, elem, data) {\n var hierarchy = context;\n var bar = elem\n .append('g')\n .attr('class', 'enter')\n .on('click', function() {\n if (!!hierarchy.ddInProgress) return;\n // check if user has clicked on bar value\n if (\n d3.event.target.tagName == 'rect' ||\n d3.event.target.attributes.class.value !== 'value'\n ) {\n var d = d3.event.target.__data__;\n hierarchy.eventMeta = [];\n if (isArray(hierarchy.dataSet.path)) {\n hierarchy.dataSet.path.forEach(function(path, idx) {\n if (d.depth - 1 === idx) {\n path.dataRef = d;\n }\n path.active = idx <= d.depth;\n path.drillUp = idx < d.depth;\n if (!!path.drillUp) {\n hierarchy.eventMeta.push(path.dataRef.key);\n }\n });\n }\n if (isArray(d.children) && d.children.length > 0) {\n hierarchy.drill(d, 'down');\n } else if (d.depth < hierarchy.dataSet.path.length) {\n console.log('fetch data');\n hierarchy.ddInProgress = true;\n hierarchy.events.getDrillDownData.data = hierarchy.eventMeta;\n hierarchy.container.dispatchEvent(\n hierarchy.events.getDrillDownData\n );\n }\n } else {\n return;\n }\n })\n .on('mouseover', function() {\n var d = d3.event.target.__data__;\n var details = [];\n\n if (d3.event.target.tagName == 'rect') {\n hierarchy.tooltip.show({ x: d.key, y: d.value }, 'Value');\n } else if (\n d3.event.target.attributes.class.value === 'value' &&\n isObject(d.meta)\n ) {\n Object.keys(d.meta)\n .reverse()\n .forEach(function(key) {\n details.push({ key: key, value: d.meta[key] });\n });\n hierarchy.tooltip.show(details);\n }\n })\n .on('mouseout', function() {\n hierarchy.tooltip.hide();\n })\n .selectAll('g')\n .data(data.children)\n .enter()\n .append('g')\n .classed('drillDown', function(d) {\n return (\n isArray(hierarchy.dataSet.path) &&\n d.depth < hierarchy.dataSet.path.length\n );\n });\n\n bar\n .append('text')\n .attr('class', 'key')\n .attr('dy', '.35em')\n .style('text-anchor', 'start')\n .text(function(d) {\n return d.key + '\\u2000';\n });\n var x0 = elem\n .select('.enter')\n .node()\n .getBBox().width;\n bar.append('rect');\n bar\n .append('text')\n .attr('class', 'value')\n .attr('x', x0)\n .attr('dy', '.35em')\n .style('text-anchor', 'start')\n .text(function(d) {\n if (isNumber(d.value)) {\n return '\\u2000' + d.value + '\\u2004';\n } else {\n return '\\u2000' + NaNString + '\\u2004';\n }\n });\n var x1 = elem\n .select('.enter')\n .node()\n .getBBox().width;\n\n hierarchy.d3ScaleY.range([x0, hierarchy.width - (x1 - x0)]);\n\n var minHeight =\n bar\n .select('.key')\n .node()\n .getBBox().height >\n bar\n .select('.value')\n .node()\n .getBBox().height\n ? bar\n .select('.key')\n .node()\n .getBBox().height\n : bar\n .select('.value')\n .node()\n .getBBox().height;\n if (minHeight > hierarchy.config.rectHeight) {\n hierarchy.config.rectHeight = minHeight;\n hierarchy.config.rectPadding = (minHeight * 30) / 70;\n }\n if (minHeight > hierarchy.rectHeight) {\n hierarchy.rectHeight = minHeight;\n hierarchy.rectPadding = (minHeight * 30) / 70;\n }\n\n bar\n .select('.key')\n .attr('x', hierarchy.scaleY(0))\n .attr('y', hierarchy.rectHeight / 2)\n .style('text-anchor', 'end');\n\n bar\n .select('rect')\n .attr('x', hierarchy.scaleY(0))\n .attr('width', function(d) {\n if (hierarchy.scaleY(d.value) - hierarchy.scaleY(0) <= 1) {\n return 1;\n } else {\n return hierarchy.scaleY(d.value) - hierarchy.scaleY(0);\n }\n })\n .attr('height', hierarchy.rectHeight);\n\n bar\n .select('.value')\n .attr('y', hierarchy.rectHeight / 2)\n .attr('x', function(d) {\n return hierarchy.scaleY(d.value);\n });\n\n //hierarchy.config.rectHeight + hierarchy.config.rectPadding\n // if (bar.select('.key').node().getBBox().height > (hierarchy.rectHeight + hierarchy.rectPadding)) {\n // bar.select('.key').style('font-size', (hierarchy.rectHeight + hierarchy.rectPadding) + 'px');\n // }\n // if (bar.select('.value').node().getBBox().height > (hierarchy.rectHeight + hierarchy.rectPadding)) {\n // bar.select('.value').style('font-size', (hierarchy.rectHeight + hierarchy.rectPadding) + 'px');\n // }\n\n return bar;\n }\n\n /**\n * A constructor for creating chartPlus instances\n * @constructor\n */\n\n function Sparkline() {\n this.init.apply(this, arguments);\n }\n\n Sparkline.prototype = {\n remove: function() {\n var chart = this;\n d3.select(chart.container)\n .select('.' + NAMESPACE + 'container')\n .remove();\n drop(charts, chart);\n\n for (var key in chart) {\n delete chart[key];\n }\n },\n defaultConfig: {\n color: '#b3b3b3',\n thickness: 4\n },\n /**\n * Function to initialize chart chart and required sub components\n * @param {object} userConfig user configuration\n * @param {boolean} rendered svg is for exporting or not\n */\n init: function(config) {\n var chart = this;\n\n // Set index and push this to the charts array\n this.index = idCounter;\n this.cssPrefix = NAMESPACE + this.index + '-';\n idCounter++;\n charts.push(this);\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 1 - merge userConfig with defaultConfig\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n chart.config = merge(chart.defaultConfig, config);\n chart.config.series[0].data.forEach(function(data) {\n data.x = parseDate(data.x);\n data.y = !!data.y ? data.y : 0;\n });\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 5 - Init required d3 component\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n chart.d3ScaleY = d3.scaleLinear();\n chart.d3ScaleX = d3.scaleTime();\n\n chart.d3Line = d3\n .line()\n .x(function(d, i) {\n return chart.d3ScaleX(d.x);\n })\n .y(function(d) {\n return chart.d3ScaleY(d.y);\n });\n chart.components = [\n {\n type: 'line',\n offsetHeight: 0\n }\n ];\n\n chart.render();\n },\n /**\n * Function to initialise containers for svg components\n */\n initContainer: function() {\n var chart = this;\n\n if (!chart.config.container) {\n error('invalid Container reference', true);\n }\n if (isString(chart.config.container)) {\n chart.container = DOCUMENT.getElementById(chart.config.container);\n }\n if (isElement(chart.config.container)) {\n chart.container = chart.config.container;\n }\n if (!isElement(chart.container)) {\n error('No Valid Container available', true);\n }\n\n composeDOM(chart.container, DIV, {\n className: NAMESPACE + 'container',\n id: NAMESPACE + chart.index\n });\n\n chart.width = getWidth(chart.container);\n chart.height = getHeight(chart.container);\n\n chart.d3ScaleY.range([\n chart.height - chart.config.thickness,\n chart.config.thickness\n ]);\n chart.d3ScaleX.range([0, chart.width]);\n\n chart.svg = d3\n .select(accessDOM(NAMESPACE + chart.index, 'id'))\n .append('svg')\n .styles({\n position: 'absolute',\n top: '0',\n left: '0'\n })\n .attr('id', 'svg-' + chart.index)\n .attr('width', '100%')\n .attr('height', '100%');\n\n if (!chartPlus.isIE) {\n chart.svg\n .attr('viewBox', '0 0 ' + chart.width + ' ' + chart.height)\n .attr('preserveAspectRatio', 'xMinYMin meet');\n }\n chart.style = chart.svg.append('style').attr('type', 'text/css');\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 2 - Set CSS\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n chart.svg\n .append('rect')\n .attr('class', chart.cssPrefix + 'bg')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', '100%')\n .attr('height', '100%'); ////// FROM Config ?? bg - color\n\n chart.gElem = chart.svg\n .append('g')\n .classed(chart.cssPrefix + 'componentGroup', true);\n\n chart.setCSS();\n },\n /**\n * Function to render chart\n */\n render: function() {\n var chart = this;\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n // 6 - Init containers\n ////////////////////////////////////////////////////////////////////////////////////////////////////\n chart.initContainer();\n chart.tooltip = new Tooltip(chart, chart.config.tooltip);\n\n // if (!isObject(chart.dataSet.data)) return;\n\n chart.d3ScaleY\n .domain([\n d3Min(\n chart.config.series[0].data.map(function(d) {\n return d.y;\n })\n ),\n d3Max(\n chart.config.series[0].data.map(function(d) {\n return d.y;\n })\n )\n ])\n .nice();\n\n chart.d3ScaleX.domain([\n d3.timeDay.offset(parseDate(chart.config.xAxis.startDate), -1),\n d3.timeDay.offset(parseDate(chart.config.xAxis.endDate), +1)\n ]);\n\n chart.components.forEach(function(component) {\n switch (component.type) {\n case 'line':\n component.elem = chart.gElem.append('g');\n component.display = isArray(chart.config.series[0].data);\n if (!!component.display) {\n chart.updateLine(chart.config.series[0].data);\n }\n\n break;\n }\n });\n },\n resize: function() {\n var chart = this;\n chart.width = getWidth(chart.container);\n chart.height = getHeight(chart.container);\n\n chart.d3ScaleY.range([\n chart.height - chart.config.thickness,\n chart.config.thickness\n ]);\n chart.d3ScaleX.range([0, chart.width]);\n\n if (!chartPlus.isIE) {\n chart.svg.attr('viewBox', '0 0 ' + chart.width + ' ' + chart.height);\n }\n chart.components.forEach(function(component) {\n switch (component.type) {\n case 'line':\n if (!!component.display) {\n chart.resizeLine();\n }\n\n break;\n }\n });\n },\n resizeLine: function() {\n var chart = this;\n var offsetHeight = 0;\n\n for (var i = 0; i < chart.components.length; i++) {\n if (chart.components[i].type === 'line') {\n offsetHeight = offsetHeight + chart.components[i].offsetHeight;\n break;\n }\n offsetHeight =\n offsetHeight +\n chart.components[i].offsetHeight +\n chart.components[i].elem.node().getBBox().height;\n }\n\n var component = chart.components.filter(function(component) {\n return component.type === 'line';\n })[0];\n\n component.elem.attr('transform', 'translate(0,' + offsetHeight + ')');\n\n component.elem.select('path').attr('d', function(d) {\n return chart.d3Line(d);\n });\n },\n setCSS: function() {\n var chart = this;\n var cssString = '',\n component,\n key,\n classStart = ' .',\n classOpen = ' {',\n classClose = '} ',\n i;\n\n // set background class\n cssString =\n cssString +\n classStart +\n chart.cssPrefix +\n 'bg' +\n classOpen +\n 'fill:' +\n themeConfig.backgroundColor +\n ';' +\n classClose;\n\n if (getContrastYIQ(themeConfig.backgroundColor) === 'dark') {\n cssString =\n cssString +\n '#svg-' +\n chart.index +\n ' text' +\n classOpen +\n 'fill:' +\n themeConfig.text.contrastDarkColor +\n ';';\n } else {\n cssString =\n cssString +\n '#svg-' +\n chart.index +\n ' text' +\n classOpen +\n 'fill:' +\n themeConfig.text.contrastLightColor +\n ';';\n }\n\n for (i in chart.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n chart.config.style[i] +\n ';';\n }\n cssString = cssString + classClose;\n\n chart.style.node().appendChild(document.createTextNode(cssString));\n },\n updateLine: function() {\n var chart = this;\n var offsetHeight = 0;\n\n for (var i = 0; i < chart.components.length; i++) {\n if (chart.components[i].type === 'line') {\n offsetHeight = offsetHeight + chart.components[i].offsetHeight;\n break;\n }\n offsetHeight =\n offsetHeight +\n chart.components[i].offsetHeight +\n chart.components[i].elem.node().getBBox().height;\n }\n\n var component = chart.components.filter(function(component) {\n return component.type === 'line';\n })[0];\n\n component.elem.attr('transform', 'translate(0,' + offsetHeight + ')');\n\n component.elem\n .append('path')\n .attr('class', 'sparkline')\n .style('stroke', chart.config.color)\n .style('stroke-width', chart.config.thickness)\n .datum(chart.config.series[0].data)\n .attr('d', function(d) {\n return chart.d3Line(d);\n });\n }\n };\n\n /**\n * A constructor for creating data multiStack using chartPlus\n * @constructor\n */\n\n function MultiStack() {\n this.init.apply(this, arguments);\n }\n MultiStack.prototype = {\n defaultConfig: {\n type: 'bar',\n color: '#1f77b4',\n wrap: true,\n maxRows: 5,\n padding: 15,\n legendSpacing: 20, // space between each sparkline items\n textSpacing: 10, // space between legend text sparkline\n sparklineWidth: 30, // space between legend text sparkline\n breakpoint: 350,\n navigation: {\n padding: 3,\n duration: 800,\n style: {\n fontSize: '11px'\n }\n },\n style: {\n fontFamily: 'arial',\n fontSize: '14px',\n fontWeight: '400',\n fill: '#091e42'\n },\n export: {\n width: 700,\n height: 400\n }\n },\n /**\n * Function to initialize data multiStack and required sub components\n * @param {object} userConfig user configuration\n * @param {boolean} rendered svg is for exporting or not\n */\n init: function(userConfig, forExport) {\n var multiStack = this;\n var config;\n\n // Set index and push this to the charts array\n multiStack.index = idCounter;\n multiStack.cssPrefix = NAMESPACE + multiStack.index + '-';\n idCounter++;\n this.forExport = forExport;\n if (this.forExport !== true) {\n charts.push(multiStack);\n }\n\n config = merge(this.defaultConfig, userConfig);\n this.config = config;\n this.userConfig = userConfig;\n\n if (!!config.xAxis && config.xAxis.type === 'date') {\n multiStack.config.type = 'line';\n multiStack.xScale = d3.scaleTime();\n\n multiStack.timeline = true;\n multiStack.setDomain();\n } else {\n multiStack.xScale = d3.scaleOrdinal();\n multiStack.setDomain();\n }\n\n multiStack.yScale = d3.scaleLinear();\n\n multiStack.d3Line = d3\n .line()\n .x(function(d, i) {\n return multiStack.xScale(d.x);\n })\n .y(function(d) {\n return multiStack.yScale(d.y);\n });\n\n multiStack.getData();\n\n // set rect width\n multiStack.render();\n },\n /**\n * Function to initialise containers for multiStack components\n */\n initContainer: function() {\n var multiStack = this;\n if (!multiStack.config.container) {\n error('invalid Container reference', true);\n }\n if (isString(multiStack.config.container)) {\n multiStack.container = DOCUMENT.getElementById(\n multiStack.config.container\n );\n }\n if (isElement(multiStack.config.container)) {\n multiStack.container = multiStack.config.container;\n }\n if (!isElement(multiStack.container)) {\n error('No Valid Container available', true);\n }\n\n composeDOM(multiStack.container, DIV, {\n className: NAMESPACE + 'container',\n id: NAMESPACE + multiStack.index\n });\n\n multiStack.width = getWidth(multiStack.container);\n multiStack.height = getHeight(multiStack.container);\n console.log(\n 'initContainer' +\n 'chart.width:' +\n multiStack.width +\n 'chart.height:' +\n multiStack.height\n );\n\n if (multiStack.forExport !== true) {\n multiStack.svg = d3\n .select(accessDOM(NAMESPACE + multiStack.index, 'id'))\n .append('svg')\n .attr('id', 'svg-' + multiStack.index)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('class', NAMESPACE + 'svgComponents');\n } else {\n // firefox export fix\n\n multiStack.svg = d3\n .select(accessDOM(NAMESPACE + multiStack.index, 'id'))\n .append('svg')\n .attr('id', 'svg-' + multiStack.index)\n .attr('width', multiStack.width + 'px')\n .attr('height', multiStack.height + 'px')\n .attr('class', NAMESPACE + 'svgComponents');\n }\n\n multiStack.style = multiStack.svg\n .append('style')\n .attr('type', 'text/css');\n\n multiStack.setCSS();\n\n multiStack.gElemRoot = multiStack.svg\n .append('g')\n .style('pointer-events', 'all');\n multiStack.gElemRoot.classed(\n multiStack.cssPrefix + 'componentGroup',\n true\n );\n },\n /**\n * Function to remove multiStack\n */\n remove: function() {\n var multiStack = this;\n\n multiStack.destroy();\n },\n /**\n * Function to destroy multiStack\n */\n destroy: function() {\n var multiStack = this,\n key;\n\n if (multiStack.navigation === true) {\n multiStack.nav.selectAll('*').remove();\n multiStack.nav.node().parentNode.removeChild(multiStack.nav.node());\n }\n\n multiStack.items.selectAll('*').remove();\n multiStack.items.node().parentNode.removeChild(multiStack.items.node());\n multiStack.content.selectAll('*').remove();\n multiStack.content\n .node()\n .parentNode.removeChild(multiStack.content.node());\n multiStack.gElem.selectAll('*').remove();\n multiStack.gElem.node().parentNode.removeChild(multiStack.gElem.node());\n multiStack.clippath.selectAll('*').remove();\n multiStack.clippath\n .node()\n .parentNode.removeChild(multiStack.clippath.node());\n\n drop(charts, multiStack);\n\n d3.select(multiStack.container)\n .select('.' + NAMESPACE + 'container')\n .remove();\n\n for (key in multiStack) {\n delete multiStack[key];\n }\n },\n /**\n * Function to render multiStack\n */\n render: function() {\n var multiStack = this;\n multiStack.initContainer();\n var legendName;\n\n multiStack.clippath = multiStack.svg\n .append('defs')\n .append('clipPath')\n .attr('id', 'legendClip-' + multiStack.index);\n multiStack.clippath\n .append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', 0)\n .attr('height', 0);\n\n multiStack.gElem = multiStack.gElemRoot\n .append('g')\n .attr('class', multiStack.cssPrefix + 'legend');\n\n multiStack.content = multiStack.gElem.append('g');\n\n multiStack.itemList = multiStack.content.append('g');\n\n multiStack.items = multiStack.itemList\n .selectAll('.sparkLineItem')\n .data(multiStack.data)\n .enter()\n .append('g');\n\n multiStack.items\n .append('text')\n .attr('x', multiStack.config.padding) //15\n .attr('y', multiStack.config.sparklineWidth)\n .text(function(d, i) {\n if (!!multiStack.config.legendMap) {\n legendName = multiStack.config.legendMap[d.name];\n legendName = setDefaultVal(legendName, 'unknown');\n } else {\n legendName = d.name;\n }\n\n return legendName;\n });\n\n var maxItemWidth = 0;\n\n multiStack.items.each(function(item) {\n if (maxItemWidth < this.getBBox().width) {\n maxItemWidth = this.getBBox().width;\n }\n });\n\n multiStack.items\n .append('path')\n .attr('d', function(d, i) {\n var range = d3.extent(multiStack.config.series[i].data, function(a) {\n if (multiStack.timeline === true && !isDate(a.x)) {\n a.x = parseDate(a.x);\n }\n return a.y;\n });\n\n multiStack.yScale\n .domain(range)\n .range([multiStack.config.sparklineWidth, 0]);\n multiStack.xScale.range([maxItemWidth + 20, 100 + maxItemWidth + 20]);\n return multiStack.d3Line(multiStack.config.series[i].data);\n })\n .attr('stroke-width', 2)\n .attr('stroke', multiStack.config.color)\n .attr('fill', 'none');\n\n if (this.forExport !== true) {\n multiStack.config.layout = 'vertical';\n multiStack.alignVertically();\n } else {\n multiStack.config.layout = 'horizontal';\n multiStack.alignHorizontally();\n }\n\n if (multiStack.config.layout === 'vertical') {\n // legend.maxListHeight = (isNumber(legend.config.maxHeight) && (legend.config.maxHeight < legend.chart.height)) ? (legend.config.maxHeight - legend.config.legendSpacing) : (legend.chart.height - legend.config.legendSpacing);\n if (multiStack.gElem.node().getBBox().height > multiStack.height) {\n multiStack.setNavigation();\n }\n } else {\n if (\n multiStack.itemList.node().getBBox().height > multiStack.maxListHeight\n ) {\n multiStack.setNavigation();\n }\n }\n },\n resize: function() {\n var multiStack = this;\n multiStack.width = getWidth(multiStack.container);\n multiStack.height = getHeight(multiStack.container);\n\n multiStack.items.attr('transform', 'translate(0,0)');\n\n if (multiStack.width > multiStack.config.breakpoint) {\n multiStack.config.layout = 'horizontal';\n } else {\n multiStack.config.layout = 'vertical';\n }\n\n if (multiStack.config.layout === 'vertical') {\n multiStack.alignVertically();\n if (multiStack.gElem.node().getBBox().height > multiStack.height) {\n multiStack.setNavigation();\n } else if (multiStack.navigation === true) {\n multiStack.nav.selectAll('*').remove();\n multiStack.nav.node().parentNode.removeChild(multiStack.nav.node());\n multiStack.navigation = false;\n multiStack.content.classed(\n multiStack.cssPrefix + 'clipLegend',\n false\n );\n }\n } else {\n multiStack.alignHorizontally();\n if (\n multiStack.itemList.node().getBBox().height > multiStack.maxListHeight\n ) {\n multiStack.setNavigation();\n } else if (multiStack.navigation === true) {\n multiStack.nav.selectAll('*').remove();\n multiStack.nav.node().parentNode.removeChild(multiStack.nav.node());\n multiStack.navigation = false;\n multiStack.content.classed(\n multiStack.cssPrefix + 'clipLegend',\n false\n );\n }\n }\n },\n setDomain: function() {\n var multiStack = this;\n if (multiStack.timeline === true) {\n multiStack.xScale.domain([\n parseDate(multiStack.config.xAxis.startDate),\n parseDate(multiStack.config.xAxis.endDate)\n ]);\n } else {\n multiStack.xScale.domain(multiStack.config.xAxis.categories || []);\n }\n },\n /**\n * Function to align legend items horizontally\n */\n alignHorizontally: function() {\n var multiStack = this,\n x = 0,\n y = 0,\n row = 1,\n maxWidth = multiStack.width - multiStack.config.padding,\n translate;\n\n multiStack.items.attr('transform', function(d, i) {\n if (\n i > 0 &&\n multiStack.config.wrap === true &&\n maxWidth < x + this.getBBox().width\n ) {\n row = row + 1;\n x = 0;\n y =\n multiStack.itemList.node().getBBox().height +\n multiStack.config.legendSpacing;\n if (\n !!multiStack.config.maxRows &&\n row === multiStack.config.maxRows + 1\n ) {\n multiStack.maxListHeight = y;\n }\n }\n translate = 'translate(' + x + ',' + y + ')';\n x = x + (this.getBBox().width || 0) + multiStack.config.legendSpacing;\n return translate;\n });\n },\n /**\n * Function to align legend items vertically\n */\n alignVertically: function() {\n var multiStack = this,\n y = 0,\n x = 0,\n maxX = 0,\n translate;\n multiStack.items.attr('transform', function(d, i) {\n if (\n i > 0 &&\n multiStack.config.wrap === true &&\n multiStack.maxListHeight <\n y + this.getBBox().height + multiStack.config.sparklineSpacing\n ) {\n x = x + maxX + multiStack.config.legendSpacing;\n y = multiStack.config.legendSpacing;\n }\n translate = 'translate(' + x + ',' + y + ')';\n\n y = y + (this.getBBox().height || 0) + multiStack.config.legendSpacing;\n maxX = maxX < this.getBBox().width ? this.getBBox().width : maxX;\n\n return translate;\n });\n },\n /**\n * Function to set navigation arrows for overflowing legends\n */\n setNavigation: function() {\n var multiStack = this,\n x = 0,\n size = multiStack.config.navigation.size;\n if (!multiStack.navigation) {\n multiStack.navConfig = { currentPage: 1, maxPage: 0 };\n\n multiStack.nav = multiStack.gElem\n .append('g')\n .attr('class', multiStack.cssPrefix + 'legendNav');\n\n multiStack.nav\n .append('g')\n .attr('class', 'navTop')\n .on('click', function() {\n multiStack.showTopPage();\n d3.select(this)\n .select('path')\n .classed(\n multiStack.cssPrefix + 'greyed',\n multiStack.navConfig.currentPage === 1\n )\n .classed(\n multiStack.cssPrefix + 'cursorPointer',\n multiStack.navConfig.currentPage !== 1\n );\n\n multiStack.nav\n .select('.navBottom')\n .select('path')\n .classed(\n multiStack.cssPrefix + 'greyed',\n multiStack.navConfig.currentPage ===\n multiStack.navConfig.maxPage\n )\n .classed(\n multiStack.cssPrefix + 'cursorPointer',\n multiStack.navConfig.currentPage !==\n multiStack.navConfig.maxPage\n );\n });\n\n multiStack.nav\n .select('.navTop')\n .append('path')\n // .attr('transform', 'translate(' + (10 / 2) + ',' + (10 / 2) + ')')\n .attr(\n 'd',\n 'M6.582,12.141c-0.271,0.268-0.709,0.268-0.978,0c-0.269-0.268-0.272-0.701,0-0.969l3.908-3.83 c0.27-0.268,0.707-0.268,0.979,0l3.908,3.83c0.27,0.267,0.27,0.701,0,0.969c-0.271,0.268-0.709,0.268-0.979,0L10,9L6.582,12.141z'\n )\n .attr('class', multiStack.cssPrefix + 'greyed');\n\n multiStack.nav\n .append('text')\n .text(\n multiStack.navConfig.currentPage +\n '/' +\n multiStack.navConfig.maxPage\n );\n\n multiStack.nav\n .append('g')\n .attr('class', 'navBottom')\n .on('click', function() {\n multiStack.showBottomPage();\n d3.select(this)\n .select('path')\n .classed(\n multiStack.cssPrefix + 'greyed',\n multiStack.navConfig.currentPage ===\n multiStack.navConfig.maxPage\n )\n .classed(\n multiStack.cssPrefix + 'cursorPointer',\n multiStack.navConfig.currentPage !==\n multiStack.navConfig.maxPage\n );\n\n multiStack.nav\n .select('.navTop')\n .select('path')\n .classed(\n multiStack.cssPrefix + 'greyed',\n multiStack.navConfig.currentPage === 1\n )\n .classed(\n multiStack.cssPrefix + 'cursorPointer',\n multiStack.navConfig.currentPage !== 1\n );\n });\n\n multiStack.nav\n .select('.navBottom')\n .append('path')\n // .attr('transform', 'translate(' + (10 / 2) + ',' + (10 / 2) + ')')\n .attr(\n 'd',\n 'M13.418,7.859c0.271-0.268,0.709-0.268,0.978,0c0.27,0.268,0.272,0.701,0,0.969l-3.908,3.83 c-0.27,0.268-0.707,0.268-0.979,0l-3.908-3.83c-0.27-0.267-0.27-0.701,0-0.969c0.271-0.268,0.709-0.268,0.978,0L10,11L13.418,7.859z'\n )\n .attr('class', multiStack.cssPrefix + 'cursorPointer');\n\n multiStack.navigation = true;\n }\n\n multiStack.nav\n .select('.navTop')\n .attr(\n 'transform',\n 'translate(' + (x + multiStack.config.navigation.padding) + ',0)'\n );\n\n x =\n multiStack.nav\n .select('.navTop')\n .node()\n .getBBox().width +\n multiStack.config.navigation.padding +\n 20;\n\n multiStack.nav.select('text').attr(\n 'transform',\n 'translate(' +\n (x + multiStack.config.navigation.padding) +\n ',' +\n multiStack.nav\n .select('.navTop')\n .select('path')\n .node()\n .getBBox().height +\n ')'\n );\n if (multiStack.config.layout === 'horizontal') {\n multiStack.clipHeight = multiStack.maxListHeight;\n } else {\n multiStack.clipHeight =\n multiStack.height -\n multiStack.nav.node().getBBox().height -\n 2 * multiStack.config.navigation.padding;\n multiStack.clipHeight =\n Math.floor(\n multiStack.clipHeight /\n (multiStack.items.node().getBBox().height +\n multiStack.config.legendSpacing)\n ) *\n (multiStack.items.node().getBBox().height +\n multiStack.config.legendSpacing);\n }\n multiStack.navConfig.maxPage = Math.ceil(\n multiStack.gElem.node().getBBox().height / multiStack.clipHeight\n );\n\n multiStack.nav\n .select('text')\n .text(\n multiStack.navConfig.currentPage + '/' + multiStack.navConfig.maxPage\n );\n\n x =\n x +\n multiStack.nav\n .select('text')\n .node()\n .getBBox().width +\n multiStack.config.navigation.padding;\n\n multiStack.nav\n .select('.navBottom')\n .attr(\n 'transform',\n 'translate(' + (x + multiStack.config.navigation.padding) + ',0)'\n );\n\n multiStack.nav.attr(\n 'transform',\n 'translate(' +\n (multiStack.width - 55) +\n ',' +\n multiStack.clipHeight +\n ')'\n );\n\n multiStack.clippath\n .select('rect')\n .attr('x', multiStack.config.padding)\n .attr('y', 0)\n .attr('width', multiStack.itemList.node().getBBox().width)\n .attr('height', multiStack.clipHeight);\n\n multiStack.content.classed(multiStack.cssPrefix + 'clipLegend', true);\n },\n /**\n * Function to show bottom multiStacks for navigation\n */\n showBottomPage: function() {\n var multiStack = this;\n\n if (multiStack.navConfig.currentPage < multiStack.navConfig.maxPage) {\n multiStack.navConfig.currentPage = multiStack.navConfig.currentPage + 1;\n multiStack.nav\n .select('text')\n .text(\n multiStack.navConfig.currentPage +\n '/' +\n multiStack.navConfig.maxPage\n );\n multiStack.itemList\n .transition()\n .duration(multiStack.config.navigation.duration)\n .attr(\n 'transform',\n 'translate(0,' +\n multiStack.clipHeight * (1 - multiStack.navConfig.currentPage) +\n ')'\n );\n }\n },\n /**\n * Function to show top multiStacks for navigation\n */\n showTopPage: function() {\n var multiStack = this;\n if (multiStack.navConfig.currentPage > 1) {\n multiStack.navConfig.currentPage = multiStack.navConfig.currentPage - 1;\n multiStack.nav\n .select('text')\n .text(\n multiStack.navConfig.currentPage +\n '/' +\n multiStack.navConfig.maxPage\n );\n multiStack.itemList\n .transition()\n .duration(multiStack.config.navigation.duration)\n .attr(\n 'transform',\n 'translate(0,' +\n multiStack.clipHeight * (1 - multiStack.navConfig.currentPage) +\n ')'\n );\n }\n },\n /**\n * Function to create and append css classes to style tag for the axis\n */\n setCSS: function() {\n var multiStack = this;\n var cssString = '',\n classStart = ' .',\n classOpen = ' {',\n classClose = '} ',\n i;\n\n cssString =\n cssString +\n classStart +\n multiStack.cssPrefix +\n 'componentGroup' +\n classOpen;\n for (i in multiStack.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n multiStack.config.style[i] +\n ';';\n }\n cssString = cssString + classClose;\n\n cssString = cssString + classStart + multiStack.cssPrefix + 'legendNav {';\n for (i in multiStack.config.navigation.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n multiStack.config.navigation.style[i] +\n ';';\n }\n\n cssString = cssString + classClose;\n\n cssString =\n cssString + classStart + multiStack.cssPrefix + 'clipLegend {';\n cssString =\n cssString + 'clip-path:url(#legendClip-' + multiStack.index + ');';\n cssString = cssString + classClose;\n\n multiStack.style.node().appendChild(document.createTextNode(cssString));\n },\n /**\n * Function to prepare data for legends\n */\n getData: function() {\n var multiStack = this;\n\n multiStack.data = multiStack.config.series.map(function(series, idx) {\n return { name: series.name || 'Series ' + idx };\n });\n },\n\n /**\n * Function to get export xlm string\n * @param {string} name Name for the chart\n */\n getExportString: function(name) {\n var multiStack = this,\n source;\n var element = DOCUMENT.createElement('div');\n element.style.width = multiStack.config.export.width + 'px';\n element.style.height = multiStack.config.export.height + 'px';\n element.id = 'exportChart';\n document.body.appendChild(element);\n\n if (isObject(multiStack.ExportableChart)) {\n delete multiStack.ExportableChart;\n }\n\n multiStack.ExportableChart = new chartPlus.multiStack(\n merge(multiStack.userConfig, {\n container: element\n }),\n true\n );\n\n source = new XMLSerializer().serializeToString(\n multiStack.ExportableChart.svg.node()\n );\n multiStack.config.export.imageWidth = multiStack.ExportableChart.width;\n multiStack.config.export.imageHeight = multiStack.ExportableChart.height;\n // }\n\n if (\n !source.match(/^]+xmlns=\"http\\:\\/\\/www\\.w3\\.org\\/2000\\/svg\"/)\n ) {\n source = source.replace(\n /^]+\"http\\:\\/\\/www\\.w3\\.org\\/1999\\/xlink\"/)) {\n source = source.replace(\n /^ TABLE HEAD <============================== \\\\\n\n // table.setBreakpoints();\n var headData = [],\n total = 0,\n elem,\n rowElem;\n\n headData.splice(0, headData.length);\n headData.push(\n table.dataSet.categoryName ? table.dataSet.categoryName : 'Categories'\n );\n if (!!table.dataSet.legendName) {\n headData.push(\n table.dataSet.legendName ? table.dataSet.legendName : 'Legends'\n );\n }\n if (table.config.percent === true) {\n headData.push('Percentage');\n } else {\n headData.push('Count');\n }\n table.updateHead(headData);\n\n table.elem\n .select('tbody')\n .selectAll('tr')\n .remove();\n table.dataSet.data.forEach(function(data) {\n total = 0;\n elem = table.elem\n .select('tbody')\n .append('tr')\n .classed('mainRow', true);\n elem\n .append('td')\n .append('div')\n .text(data.key);\n if (!!table.dataSet.legendName) {\n elem.append('td').append('div');\n }\n elem\n .append('td')\n .append('div')\n .attr('class', 'total')\n .style('text-align', 'center');\n Object.keys(data.values).forEach(function(key) {\n total = total + +data.values[key];\n if (!!table.dataSet.legendName) {\n rowElem = table.elem\n .select('tbody')\n .append('tr')\n .classed('subRow', true);\n rowElem.append('td').append('div');\n rowElem\n .append('td')\n .append('div')\n .text(key);\n rowElem\n .append('td')\n .append('div')\n .text(getRound(data.values[key], 2))\n .style('text-align', 'center');\n }\n });\n elem.select('.total').text(getRound(total, 2));\n });\n table.resize();\n },\n resize: function() {\n var table = this;\n var widthArray = [];\n\n table.elem.select('.scrollContainer').style(\n 'padding-top',\n getHeight(\n table.elem\n .select('thead')\n .select('tr')\n .node()\n ) + 'px'\n );\n table.elem.select('.scrollArea').style(\n 'height',\n getHeight(table.elem.node()) -\n getHeight(\n table.elem\n .select('thead')\n .select('tr')\n .node()\n ) +\n 'px'\n );\n\n table.elem\n .select('thead')\n .selectAll('tr')\n .styles({ left: 0, top: 0, position: 'absolute' });\n\n widthArray.splice(0, widthArray.length);\n\n table.elem\n .select('tbody')\n .select('tr')\n .selectAll('td')\n .each(function(d, i) {\n widthArray.push(\n getWidth(\n d3\n .select(this)\n .select('div')\n .node()\n )\n );\n });\n\n // table.elem.select('tbody').selectAll('tr').each(function() {\n // d3.select(this).selectAll('div').each(function(d, i) {\n // d3.select(this).style('width', widthArray[i] + 'px');\n // });\n // });\n\n table.elem\n .select('thead')\n .selectAll('th')\n .each(function(d, i) {\n d3.select(this)\n .select('div')\n .style('width', widthArray[i] + 'px');\n });\n },\n updateHead: function(data) {\n var table = this;\n table.elem\n .select('thead')\n .select('tr')\n .selectAll('th')\n .remove();\n\n table.elem\n .select('thead')\n .select('tr')\n .selectAll('th')\n .data(data)\n .enter()\n .append('th')\n .append('div')\n .text(function(d, i) {\n if (i === data.length - 1) {\n d3.select(this).style('text-align', 'center');\n }\n return d;\n });\n }\n };\n\n /**\n * A constructor for creating chartPlus instances\n * @constructor\n */\n\n function Chart() {\n this.init.apply(this, arguments);\n }\n\n Chart.prototype = {\n /**\n * The additional classes to be appended as part of css\n * @type {object}\n */\n addClasses: {\n // additional classes\n hidden: {\n opacity: 0,\n pointerEvents: 'none',\n visibility: 'hidden'\n },\n cursorPointer: {\n cursor: 'pointer'\n },\n disabled: {\n fill: '#cccccc !important'\n }\n },\n /**\n * Function to destroy chart\n */\n destroy: function() {\n var chart = this,\n key;\n clearTimeout(chart.timer);\n\n if (isObject(chart.ExportableChart)) {\n chart.ExportableChart.remove();\n console.log('removing export after');\n }\n\n if (isArray(chart.series)) {\n chart.series.forEach(function(series, idx) {\n series.remove();\n });\n }\n if (isArray(chart.indicators)) {\n chart.indicators.forEach(function(indicator, idx) {\n indicator.remove();\n });\n }\n if (isObject(chart.brush)) {\n chart.brush.remove();\n }\n\n if (isObject(chart.xAxis)) {\n chart.xAxis.remove();\n }\n if (isObject(chart.yAxis)) {\n chart.yAxis.remove();\n }\n if (isObject(chart.legend)) {\n chart.legend.remove();\n }\n if (isObject(chart.tooltip)) {\n chart.tooltip.remove();\n }\n if (isObject(chart.WFLine)) {\n chart.WFLine.remove();\n }\n if (isObject(chart.totalBars)) {\n chart.totalBars.remove();\n }\n drop(charts, chart);\n\n d3.select(chart.container)\n .select('.' + NAMESPACE + 'container')\n .remove();\n\n for (key in chart) {\n delete chart[key];\n }\n },\n /**\n * Export chart to PNG or JPEG using HTML5 canvas methods\n * @param {string} name Name for the exported file\n * @param {string} type Export type\n */\n export: function(name, type) {\n var chart = this,\n source = chart.getExportString(name);\n\n var image = new Image();\n image.src =\n 'data:image/svg+xml;base64,' +\n window.btoa(unescape(encodeURIComponent(source)));\n var canvas = document.createElement('canvas');\n\n canvas.width = chart.config.export.imageWidth || chart.width;\n canvas.height = chart.config.export.imageHeight || chart.height;\n var context = canvas.getContext('2d');\n\n image.onload = function() {\n var context = canvas.getContext('2d');\n try {\n context.drawImage(image, 0, 0);\n } catch (err) {\n setTimeout(function() {\n context.drawImage(image, 0, 0);\n }, 1);\n }\n if (!(chartPlus.isIE || chartPlus.isSafari)) {\n var a = document.createElement('a');\n a.target = '_self';\n a.download = (name || 'image') + '.' + (type || 'png');\n a.href = canvas.toDataURL('image/' + (type || 'png'));\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n };\n },\n /**\n * Function to get export xlm string\n * @param {string} name Name for the chart\n */\n getExportString: function(name) {\n var chart = this,\n source;\n var element = DOCUMENT.createElement('div');\n element.style.width = chart.config.export.width + 'px';\n element.style.height = chart.config.export.height + 'px';\n element.id = 'exportChart';\n document.body.appendChild(element);\n\n if (isObject(chart.ExportableChart)) {\n delete chart.ExportableChart;\n }\n\n chart.ExportableChart = new chartPlus.chart(\n merge(chart.userConfig, {\n container: element,\n legend: {\n align: 'bottom-left',\n layout: 'horizontal',\n padding: 45,\n legendSpacing: 15,\n maxTextLength: 150, // avoid clipping\n textSpacing: 10,\n wrap: true,\n size: 5,\n maxRows: 7,\n style: {\n fontSize: '12px'\n }\n },\n title: {\n display: false,\n text: name\n },\n xAxis: {\n offset: 15\n }\n }),\n true\n );\n\n // if (mathAbs(chart.ExportableChart.vRange[0] - chart.ExportableChart.vRange[1]) < chart.config.export.height) {\n // element.style.height = ((2 * chart.config.export.height) - mathAbs(chart.ExportableChart.vRange[0] - chart.ExportableChart.vRange[1])) + 'px';\n // chart.ExportableChart.resize();\n // source = new XMLSerializer().serializeToString(chart.ExportableChart.svg.node());\n // chart.config.export.imageWidth = chart.ExportableChart.width;\n // chart.config.export.imageHeight = chart.ExportableChart.height;\n //\n // } else {\n source = new XMLSerializer().serializeToString(\n chart.ExportableChart.svg.node()\n );\n chart.config.export.imageWidth = chart.ExportableChart.width;\n chart.config.export.imageHeight = chart.ExportableChart.height;\n // }\n\n if (\n !source.match(/^]+xmlns=\"http\\:\\/\\/www\\.w3\\.org\\/2000\\/svg\"/)\n ) {\n source = source.replace(\n /^]+\"http\\:\\/\\/www\\.w3\\.org\\/1999\\/xlink\"/)) {\n source = source.replace(\n /^\n mathAbs(chart.vRange[0] - chart.vRange[1])\n ) {\n chart.brush.resize(\n chart.hRange[0],\n chart.vRange[1] + chart.xAxis.gElem.node().getBBox().height\n );\n } else {\n chart.brush.resize(\n chart.hRange[0],\n chart.vRange[0] + chart.xAxis.gElem.node().getBBox().height\n );\n }\n } else {\n chart.brush.resize(chart.hRange[0], chart.vRange[0]);\n }\n }\n }\n\n if (isObject(chart.xAxis) && chart.xAxis.firstRender === false) {\n chart.xAxis.resize();\n }\n if (isObject(chart.yAxis) && chart.yAxis.firstRender === false) {\n chart.yAxis.resize();\n }\n /* ----------------------------------------------------------------------------\n render indicators which should go behind\n ...............................................................................*/\n if (isArray(chart.config.indicators)) {\n if (!chart.indicators) {\n chart.indicators = [];\n }\n chart.config.indicators.forEach(function(indicator, idx) {\n if (indicator.overlay === false) {\n indicator.index = idx;\n chart.indicators[idx] = new Indicator(chart, indicator);\n }\n });\n }\n /* ----------------------------------------------------------------------------\n render indicators which should go behind\n ...............................................................................*/\n if (chart.hasWFChart) {\n chart.WFLine = new Series(chart, {\n type: 'line',\n data: chart.wfLineData,\n index: -1,\n name: 'overlay',\n marker: {\n display: false\n },\n interpolation: 'step-after',\n color: '#cccccc',\n style: {\n strokeWidth: '1px',\n shapeRendering: 'crispEdges'\n }\n });\n }\n if (chart.config.percent === true) {\n var config = {\n type: 'bar',\n index: -1,\n color: '#f1f1f1',\n name: 'Max percent',\n tooltip: false\n };\n if (chart.config.xAxis.type === 'date') {\n config.data = chart.innerLegends.map(function(d) {\n return { x: d, y: 100 };\n });\n } else {\n config.data = chart.config.xAxis.categories.map(function(d) {\n return { x: d, y: 100 };\n });\n }\n\n chart.totalBars = new Series(chart, config);\n }\n chart.series = [];\n chart.config.series.forEach(function(series, idx) {\n series.index = idx;\n chart.series[idx] = new Series(chart, series);\n });\n\n /* ----------------------------------------------------------------------------\n render indicators which should come in front\n ...............................................................................*/\n if (isArray(chart.config.indicators)) {\n if (!chart.indicators) {\n chart.indicators = [];\n }\n chart.config.indicators.forEach(function(indicator, idx) {\n if (indicator.overlay !== false) {\n indicator.index = idx;\n chart.indicators[idx] = new Indicator(chart, indicator);\n }\n });\n }\n /* ----------------------------------------------------------------------------\n render indicators which should come in front\n ...............................................................................*/\n\n if (\n chart.config.legend.display !== false &&\n chart.legend.config.float === true\n ) {\n chart.legend.render();\n }\n // resizing chart to accomodate size changes due to css of app\n chart.timer = setTimeout(function() {\n if (chart.forExport !== true) {\n chart.resize();\n }\n }, 50);\n },\n /**\n * Function to reset data - used for stack charts to reset dy\n */\n resetData: function() {\n var chart = this;\n chart.config.series.forEach(function(series, idx) {\n if (\n series.type === 'bar' ||\n series.type === 'waterfall' ||\n series.type === 'area'\n ) {\n series.data.forEach(function(d, i) {\n delete d.dy;\n });\n }\n });\n },\n /**\n * Function to resize chart\n */\n resize: function() {\n var chart = this;\n chart.width = getWidth(chart.container);\n chart.height = getHeight(chart.container);\n\n if (!chartPlus.isIE) {\n chart.svg.attr('viewBox', '0 0 ' + chart.width + ' ' + chart.height);\n }\n if (isObject(chart.tooltip)) {\n chart.tooltip.reposition();\n }\n if (\n !!chart.config.title &&\n chart.config.title.display !== false &&\n chart.legend.firstRender === false\n ) {\n chart.title.resize();\n }\n if (\n chart.config.legend.display !== false &&\n chart.legend.firstRender === false\n ) {\n chart.legend.resize();\n }\n chart.setAxisRange();\n\n if (isObject(chart.xAxis) && chart.xAxis.firstRender === false) {\n chart.xAxis.resize();\n }\n if (isObject(chart.yAxis) && chart.yAxis.firstRender === false) {\n chart.yAxis.resize();\n }\n\n if (isObject(chart.brush)) {\n if (chart.config.invert === true) {\n if (isObject(chart.yAxis) && chart.yAxis.firstRender === false) {\n if (chart.yAxis.config.grid === true) {\n chart.brush.resize(\n chart.hRange[0],\n chart.yAxis.gElem.node().getBBox().height > 0\n ? chart.yAxis.gElem.node().getBBox().height\n : chart.vRange[0]\n );\n } else {\n chart.brush.resize(\n chart.hRange[0],\n chart.yAxis.gElem.node().getBBox().height + chart.vRange[0]\n );\n }\n } else {\n chart.brush.resize(chart.hRange[0], chart.vRange[0]);\n }\n } else {\n if (isObject(chart.xAxis) && chart.xAxis.firstRender === false) {\n if (\n chart.xAxis.gElem.node().getBBox().height >\n mathAbs(chart.vRange[0] - chart.vRange[1])\n ) {\n chart.brush.resize(\n chart.hRange[0],\n chart.vRange[1] + chart.xAxis.gElem.node().getBBox().height\n );\n } else {\n chart.brush.resize(\n chart.hRange[0],\n chart.vRange[0] + chart.xAxis.gElem.node().getBBox().height\n );\n }\n } else {\n chart.brush.resize(chart.hRange[0], chart.vRange[0]);\n }\n }\n }\n if (chart.hasWFChart) {\n chart.WFLine.resize();\n }\n if (chart.config.percent === true) {\n chart.totalBars.resize();\n }\n chart.series.forEach(function(series, idx) {\n series.resize();\n });\n if (isArray(chart.config.indicators)) {\n chart.config.indicators.forEach(function(indicator, idx) {\n chart.indicators[idx].resize();\n });\n }\n },\n /**\n * Function to set X and Y axes range based on other components\n */\n setAxisRange: function() {\n var chart = this,\n hRange = [0, chart.width], // (axis in SVG is inverted)\n vRange = [chart.height, 0],\n i;\n if (isObject(chart.title) && chart.title.firstRender === false) {\n vRange = [chart.height, chart.title.height];\n }\n if (\n isObject(chart.legend) &&\n chart.legend.config.float !== true &&\n chart.legend.firstRender === false\n ) {\n if (chart.legend.config.layout === 'horizontal') {\n var legHeight =\n chart.height -\n getTransformation(chart.legend.gElem.attr('transform')).translateY;\n //chart.legend.config.padding\n if (chart.legend.config.align.indexOf('bottom') !== -1) {\n vRange = [\n chart.height - legHeight - chart.legend.config.padding,\n vRange[1]\n ];\n } else {\n vRange = [\n chart.height,\n legHeight + chart.legend.config.padding + vRange[1]\n ];\n }\n hRange = [0, chart.width];\n } else {\n if (chart.legend.config.align.indexOf('left') !== -1) {\n hRange = [\n chart.legend.gElem.node().getBBox().width +\n chart.legend.config.padding,\n chart.width\n ];\n } else {\n hRange = [\n 0,\n chart.width -\n chart.legend.gElem.node().getBBox().width -\n chart.legend.config.padding\n ];\n }\n vRange = [chart.height, vRange[1]];\n }\n }\n if (isObject(chart.brush)) {\n vRange[0] = vRange[0] - chart.brush.gElem.node().getBBox().height;\n }\n\n if (isObject(chart.yAxis) && chart.yAxis.firstRender === false) {\n if (chart.config.invert === true) {\n if (chart.yAxis.config.orient === 'bottom') {\n vRange[1] = vRange[1] + chart.yAxis.gElem.node().getBBox().height;\n } else {\n vRange[0] = vRange[0] - chart.yAxis.gElem.node().getBBox().height;\n }\n } else {\n if (chart.yAxis.config.orient === 'right') {\n hRange[1] = hRange[1] - chart.yAxis.gElem.node().getBBox().width;\n } else {\n hRange[0] = hRange[0] + chart.yAxis.gElem.node().getBBox().width;\n if (chart.yAxis.config.grid === true) {\n hRange[0] =\n hRange[0] +\n (chart.yAxis.gElem.node().getBBox().height > 0\n ? chart.yAxis.d3Axis.tickSizeInner()\n : 0);\n }\n }\n // if (!isNumber(chart.yAxis.offset)) {\n // chart.yAxis.offset = mathAbs(vRange[0] - vRange[1] - chart.yAxis.gElem.node().getBBox().height);\n // }\n // need to check use of offset\n // vRange[0] = vRange[0] - (chart.yAxis.offset || 0);\n }\n }\n if (isObject(chart.xAxis) && chart.xAxis.firstRender === false) {\n if (chart.config.invert === true) {\n if (chart.xAxis.config.orient === 'right') {\n hRange[1] = hRange[1] - chart.xAxis.gElem.node().getBBox().width;\n } else {\n hRange[0] = hRange[0] + chart.xAxis.gElem.node().getBBox().width;\n }\n } else {\n if (chart.xAxis.config.orient === 'top') {\n vRange[1] = vRange[1] + chart.xAxis.gElem.node().getBBox().height;\n } else {\n vRange[0] = vRange[0] - chart.xAxis.gElem.node().getBBox().height;\n if (chart.xAxis.config.grid === true) {\n vRange[0] =\n vRange[0] -\n (chart.xAxis.gElem.node().getBBox().height > 0\n ? chart.xAxis.d3Axis.tickSizeInner()\n : 0);\n }\n }\n // if (!isNumber(chart.xAxis.offset)) {\n // chart.xAxis.offset = mathAbs(hRange[1] - chart.xAxis.gElem.node().getBBox().width);\n // }\n hRange[1] =\n hRange[1] -\n (chart.xAxis.config.offset || 0) -\n (chart.xAxis.offset || 0);\n }\n }\n\n // if(chart.forExport) {\n // vRange = [300, 0];\n // }\n\n chart.hRange = hRange;\n chart.vRange = vRange;\n if (chart.config.invert === true) {\n chart.xRange = vRange;\n chart.yRange = hRange;\n } else {\n chart.xRange = hRange;\n chart.yRange = vRange;\n }\n if (isFunction(chart.xScale.bandwidth)) {\n chart.xScale\n .range(chart.xRange)\n .paddingInner([0.1])\n .paddingOuter([0.2])\n .align([0.5]);\n } else {\n chart.xScale.range(chart.xRange);\n chart.brushScale.range(chart.xRange);\n }\n chart.yScale.range(chart.yRange);\n for (i = 0; i < chart.config.series.length; i++) {\n if (\n chart.config.series[i].type !== 'pie' &&\n chart.config.series[i].type !== 'sunburst'\n ) {\n chart.setRectWidth();\n break;\n }\n }\n\n // update clippath size\n chart.clippath\n .select('rect')\n .attr('x', d3Min(chart.hRange) + 1)\n .attr('y', d3Min(chart.vRange))\n .attr('width', mathAbs(chart.hRange[0] - chart.hRange[1]) - 1)\n .attr('height', mathAbs(chart.vRange[0] - chart.vRange[1]));\n },\n /**\n * Function to set color scale based on each series\n */\n setColorScale: function() {\n var chart = this;\n chart.innerLegends = [];\n chart.config.series.forEach(function(series, idx) {\n if (isArray(series.data)) {\n series.data.forEach(function(d, i) {\n if (chart.innerLegends.indexOf(d.x) === -1) {\n chart.innerLegends.push(d.x);\n }\n });\n } else if (series.type === 'sunburst') {\n if (series.data.children) {\n series.data.children.forEach(function(d, i) {\n if (chart.innerLegends.indexOf(d.name) === -1) {\n chart.innerLegends.push(d.name);\n }\n });\n }\n }\n });\n if (isArray(chart.config.xAxis.categories)) {\n chart.innerLegends.forEach(function(d, i) {\n if (chart.config.xAxis.categories.indexOf(d) === -1) {\n chart.config.xAxis.categories.push(d);\n }\n });\n chart.innerLegends.splice(0, chart.innerLegends.length);\n chart.innerLegends = chart.config.xAxis.categories.slice(\n 0,\n chart.config.xAxis.categories.length\n );\n }\n if (!!chart.config.xAxis && chart.config.xAxis.type === 'date') {\n chart.innerLegends.sort();\n }\n\n chart.colorScale = d3\n .scaleOrdinal()\n .range(\n isArray(this.userConfig.colors)\n ? this.userConfig.colors\n : themeConfig.colors\n );\n\n if (chart.config.colorByPoint === true) {\n chart.colorScale.domain(chart.innerLegends);\n } else {\n chart.colorScale.domain(\n chart.config.series.map(function(d, idx) {\n return d.name;\n })\n );\n }\n },\n /**\n * Function to create and append css classes to style tag for the chart\n */\n setCSS: function() {\n var chart = this;\n\n var cssString = '',\n component,\n key,\n classStart = ' .',\n classOpen = ' {',\n classClose = '} ',\n i,\n className;\n\n // set background class\n cssString =\n cssString +\n classStart +\n chart.cssPrefix +\n 'bg' +\n classOpen +\n 'fill:' +\n themeConfig.backgroundColor +\n ';' +\n classClose;\n\n // Special handling for pdf export\n if (chart.forExport) {\n themeConfig.text.contrastDarkColor = '#091e42';\n themeConfig.axis.contrastDarkColor = '#c1c7d0';\n } else {\n // reset back\n themeConfig.text.contrastDarkColor = '#707070';\n themeConfig.axis.contrastDarkColor = '#e9e9e9';\n }\n\n if (getContrastYIQ(themeConfig.backgroundColor) === 'dark') {\n cssString =\n cssString +\n '#svg-' +\n chart.index +\n ' text' +\n classOpen +\n 'fill:' +\n themeConfig.text.contrastDarkColor +\n ';' +\n classClose;\n cssString =\n cssString +\n '#svg-' +\n chart.index +\n ' .axis line, .axis path' +\n classOpen +\n 'stroke:' +\n themeConfig.axis.contrastDarkColor +\n ';' +\n classClose;\n } else {\n cssString =\n cssString +\n '#svg-' +\n chart.index +\n ' text' +\n classOpen +\n 'fill:' +\n themeConfig.text.contrastLightColor +\n ';' +\n classClose;\n cssString =\n cssString +\n '#svg-' +\n chart.index +\n ' .axis line, .axis path' +\n classOpen +\n 'stroke:' +\n themeConfig.axis.contrastLightColor +\n ';' +\n classClose;\n }\n\n // additional classes\n for (className in chart.addClasses) {\n if (isObject(chart.addClasses[className])) {\n cssString =\n cssString + classStart + chart.cssPrefix + className + classOpen;\n for (i in chart.addClasses[className]) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n chart.addClasses[className][i] +\n ';';\n }\n cssString = cssString + classClose;\n }\n }\n\n cssString =\n cssString + classStart + chart.cssPrefix + 'componentGroup' + classOpen;\n for (i in chart.config.style) {\n cssString =\n cssString +\n i.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() +\n ':' +\n chart.config.style[i] +\n ';';\n }\n cssString = cssString + classClose;\n\n cssString =\n cssString + classStart + chart.cssPrefix + 'clipChart' + classOpen;\n cssString = cssString + 'clip-path:url(#chartClip-' + chart.index + ');';\n cssString = cssString + classClose;\n\n chart.style.node().appendChild(document.createTextNode(cssString));\n },\n /**\n * Function to set date domain of x axis for timeseries chart\n */\n setDateDomain: function(startDate, endDate) {\n var chart = this;\n if (chart.config.granularity === 'month') {\n chart.xScale.domain([\n d3.timeDay.offset(parseDate(startDate), -45),\n d3.timeDay.offset(parseDate(endDate), +45)\n ]);\n } else if (chart.config.granularity === 'week') {\n chart.xScale.domain([\n d3.timeDay.offset(parseDate(startDate), -10),\n d3.timeDay.offset(parseDate(endDate), +10)\n ]);\n } else {\n chart.xScale.domain([\n d3.timeDay.offset(parseDate(startDate), -1),\n d3.timeDay.offset(parseDate(endDate), +1)\n ]);\n }\n\n chart.brushScale.domain(chart.xScale.domain());\n chart.brushDomain = [parseDate(startDate), parseDate(endDate)];\n },\n /**\n * Function to calculate position of stack and group bars\n */\n setGroupProps: function() {\n var chart = this;\n var groups = 0,\n stackIDs = [],\n groupIDs = [],\n stackNames = [];\n\n if (!!chart.config.stack) {\n stackNames.push(chart.config.stack);\n stackIDs[0] = [];\n }\n\n chart.config.series.forEach(function(config, idx) {\n if (config.type === 'waterfall') {\n chart.hasWFChart = true;\n }\n if (\n config.isHidden !== true &&\n (config.type === 'bar' ||\n config.type === 'waterfall' ||\n config.type === 'area')\n ) {\n if (!!config.stack) {\n if (stackNames.indexOf(config.stack) === -1) {\n stackNames.push(config.stack);\n stackIDs.push([idx]);\n config.group = stackIDs.length - 1;\n } else {\n stackIDs[stackNames.indexOf(config.stack)].push(idx);\n config.group = stackNames.indexOf(config.stack);\n }\n } else if (!!chart.config.stack) {\n stackIDs[stackNames.indexOf(chart.config.stack)].push(idx);\n config.group = stackNames.indexOf(chart.config.stack);\n } else {\n config.group = groups;\n groups = groups + 1;\n groupIDs.push(idx);\n }\n }\n });\n\n groups = groups + stackNames.length;\n chart.groups = groups;\n chart.groupIDs = groupIDs;\n chart.stackNames = stackNames;\n chart.stackIDs = stackIDs;\n if (isArray(chart.stackNames) && chart.stackNames.length > 0) {\n chart.setStackData();\n }\n chart.updateYDomain();\n },\n /**\n * Function to set date domain of x axis for summary chart\n */\n setOrdinalDomain: function() {\n var chart = this;\n if (!isArray(chart.config.xAxis.categories)) {\n chart.config.xAxis.categories = [];\n }\n chart.innerLegends.forEach(function(legend, i) {\n if (chart.config.xAxis.categories.indexOf(legend) === -1) {\n chart.config.xAxis.categories.push(legend);\n }\n });\n\n chart.xScale.domain(chart.config.xAxis.categories);\n },\n /**\n * Function to calculate rect width for bar chart\n */\n\n setRectWidth: function() {\n var chart = this,\n rectWidth,\n startDate,\n endDate,\n count;\n if (chart.config.xAxis.type === 'date') {\n if (\n chart.xScale.domain()[0].getTime() > 0 &&\n chart.xScale.domain()[1].getTime() > 1\n ) {\n startDate = chart.xScale.domain()[0];\n endDate = chart.xScale.domain()[1];\n } else {\n // if no domain is set in d3 brush\n startDate = parseDate(chart.config.xAxis.startDate);\n endDate = parseDate(chart.config.xAxis.endDate);\n }\n\n if (chart.config.granularity === 'month') {\n count =\n (endDate.getTime() - startDate.getTime()) /\n (24 * 60 * 60 * 1000 * 30);\n chart.months = count;\n } else if (chart.config.granularity === 'week') {\n count =\n (endDate.getTime() - startDate.getTime()) /\n (24 * 60 * 60 * 1000 * 7);\n chart.weeks = count;\n } else {\n count =\n (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000);\n }\n\n count = count + 3;\n rectWidth = mathAbs(chart.xRange[0] - chart.xRange[1]) / count;\n } else {\n rectWidth =\n mathAbs(chart.xRange[0] - chart.xRange[1]) /\n chart.config.xAxis.categories.length;\n }\n chart.bandwidth = rectWidth;\n if (chart.groups === 0) {\n chart.rectWidth = rectWidth - rectPadding;\n } else {\n chart.rectWidth = rectWidth / (chart.groups || 1) - rectPadding;\n }\n chart.rectWidth =\n chart.rectWidth > maxRectWidth ? maxRectWidth : chart.rectWidth;\n chart.rectWidth = chart.rectWidth <= 1 ? 1 : chart.rectWidth;\n },\n /**\n * Function to calculate dy for stack chart based on associated group and stacks in each group\n */\n setStackData: function() {\n var chart = this;\n var keys = [],\n index,\n ids,\n i,\n j,\n k,\n innerLegendTotals = {},\n total = 0,\n tempData = {};\n chart.wfLineData = [];\n\n for (ids in chart.stackIDs) {\n innerLegendTotals = {};\n for (i = 0; i < chart.stackIDs[ids].length; i++) {\n for (\n j = 0;\n j < chart.config.series[chart.stackIDs[ids][i]].data.length;\n j++\n ) {\n index = chart.innerLegends.indexOf(\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n );\n chart.config.series[chart.stackIDs[ids][i]].data[j].dy =\n innerLegendTotals[\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n ] || 0;\n innerLegendTotals[\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n ] =\n (innerLegendTotals[\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n ] || 0) + chart.config.series[chart.stackIDs[ids][i]].data[j].y;\n }\n }\n //Set WATERFALL data\n if (chart.hasWFChart === true) {\n for (i = 0; i < chart.stackIDs[ids].length; i++) {\n if (\n chart.config.series[chart.stackIDs[ids][i]].type === 'waterfall'\n ) {\n for (\n j = 0;\n j < chart.config.series[chart.stackIDs[ids][i]].data.length;\n j++\n ) {\n index = chart.innerLegends.indexOf(\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n );\n if (index > 0) {\n for (k = index - 1; k >= 0; k--) {\n chart.config.series[chart.stackIDs[ids][i]].data[j].dy =\n (chart.config.series[chart.stackIDs[ids][i]].data[j].dy ||\n 0) + (innerLegendTotals[chart.innerLegends[k]] || 0);\n }\n }\n if (\n !!tempData[\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n ]\n ) {\n tempData[\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n ] =\n tempData[\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n ] + chart.config.series[chart.stackIDs[ids][i]].data[j].y;\n } else {\n tempData[\n chart.config.series[chart.stackIDs[ids][i]].data[j].x\n ] = chart.config.series[chart.stackIDs[ids][i]].data[j].y;\n }\n }\n }\n }\n }\n }\n if (chart.hasWFChart === true) {\n chart.innerLegends.forEach(function(key, i) {\n if (isNumber(tempData[key])) {\n total = total + tempData[key];\n }\n chart.wfLineData.push({ x: key, y: total });\n });\n }\n },\n /**\n * Function to update chart\n */\n\n updateChart: function() {\n var chart = this;\n if (chart.dirtySeries === true) {\n chart.resetData();\n chart.setGroupProps();\n chart.setRectWidth();\n chart.series.forEach(function(series, idx) {\n series.prepareData(series.config.data);\n if (!series.config.isHidden) {\n series.config.dirty = true;\n }\n });\n chart.yAxis.dirty = true;\n chart.dirtySeries = false;\n }\n if (chart.dirtyData === true) {\n chart.resetData();\n chart.setGroupProps();\n chart.setRectWidth();\n chart.series.forEach(function(series, idx) {\n series.prepareData(series.config.data);\n if (!series.config.isHidden) {\n series.config.dirty = true;\n }\n });\n chart.dirtyData = false;\n }\n if (chart.yAxis.dirty === true) {\n chart.updateYDomain();\n chart.yAxis.resize();\n chart.updateSeries();\n chart.yAxis.dirty = false;\n }\n },\n /**\n * Function to update series alone\n */\n updateSeries: function() {\n var chart = this;\n if (chart.hasWFChart) {\n chart.WFLine.remove();\n chart.WFLine = new Series(chart, {\n type: 'line',\n data: chart.wfLineData,\n index: -1,\n name: 'overlay',\n marker: {\n display: false\n },\n interpolation: 'step-after',\n color: '#cccccc',\n style: {\n strokeWidth: '1px',\n shapeRendering: 'crispEdges'\n }\n });\n }\n chart.series.forEach(function(series, idx) {\n if (series.config.dirty === true) {\n series.redraw();\n series.config.dirty = false;\n } else if (!series.config.isHidden) {\n series.resize();\n }\n });\n if (isArray(chart.config.indicators)) {\n chart.config.indicators.forEach(function(indicator, idx) {\n chart.indicators[idx].resize();\n });\n }\n },\n /**\n * Function to update the domain for y scale\n */\n updateYDomain: function() {\n var chart = this,\n dataMin = 0,\n dataMax = 0;\n chart.yDomain = [0, 1];\n\n chart.config.series.forEach(function(series, idx) {\n if (\n series.type !== 'pie' &&\n series.type !== 'sunburst' &&\n !series.isHidden\n ) {\n dataMin = d3Min(\n series.data.map(function(d) {\n return d.y;\n })\n );\n dataMax = d3Max(\n series.data.map(function(d) {\n return d.y + (d.dy || 0);\n })\n );\n chart.yDomain[0] = mathMin(0, dataMin || 0, chart.yDomain[0]);\n chart.yDomain[1] = mathMax(dataMax || 0, chart.yDomain[1]);\n }\n });\n if (isArray(chart.config.indicators)) {\n chart.config.indicators.forEach(function(indicator, idx) {\n if (indicator.type === 'yLine' || indicator.type === 'yBand') {\n indicator.data.forEach(function(data, id) {\n if (data > chart.yDomain[1]) {\n chart.yDomain[1] = data;\n }\n if (data < chart.yDomain[0]) {\n chart.yDomain[0] = data;\n }\n });\n } else if (indicator.type === 'line') {\n dataMin = d3Min(\n indicator.data.map(function(d) {\n return d.y;\n })\n );\n dataMax = d3Max(\n indicator.data.map(function(d) {\n return d.y;\n })\n );\n chart.yDomain[0] = mathMin(0, dataMin || 0, chart.yDomain[0]);\n chart.yDomain[1] = mathMax(dataMax || 0, chart.yDomain[1]);\n } else if (indicator.type === 'point') {\n if (indicator.data[0].y > chart.yDomain[1]) {\n chart.yDomain[1] = indicator.data[0].y;\n }\n if (indicator.data[0].y < chart.yDomain[0]) {\n chart.yDomain[0] = indicator.data[0].y;\n }\n }\n });\n }\n if (chart.config.percent === true && chart.yDomain[1] <= 100) {\n chart.yDomain[1] = 100;\n } else {\n chart.yDomain[1] = chart.yDomain[1] * 1.1;\n }\n chart.yScale.domain(chart.yDomain);\n },\n\n /**\n * Function to zoom timeline chart\n */\n updateOnBrush: function() {\n var chart = this;\n if (isObject(chart.tooltip)) {\n chart.tooltip.hide(true);\n }\n if (d3.event.selection === null) {\n chart.brushDomain = chart.brushScale.domain();\n } else {\n chart.brushDomain = d3.event.selection.map(chart.brushScale.invert);\n }\n chart.xScale.domain([chart.brushDomain[0], chart.brushDomain[1]]);\n chart.setRectWidth();\n if (isObject(chart.xAxis) && chart.xAxis.firstRender === false) {\n chart.xAxis.resize();\n }\n\n if (chart.hasWFChart) {\n chart.WFLine.resize();\n }\n if (chart.config.percent === true) {\n chart.totalBars.resize();\n }\n if (chart.series) {\n chart.series.forEach(function(series, idx) {\n series.resize();\n });\n }\n if (isArray(chart.config.indicators)) {\n chart.config.indicators.forEach(function(indicator, idx) {\n chart.indicators[idx].resize();\n });\n }\n }\n };\n chartPlus.version = '1.0.0';\n\n console.log('chartplus whole', chartPlus);\n sampledata.container = divelement;\n var object = new chartPlus.chart(sampledata);\n console.log('object', object);\n return object;\n};\nexport default chartPlusFunction;\n","import React from 'react';\nimport { Spotlight } from '@atlaskit/onboarding';\n\nexport const renderActiveSpotlight = (onclick, Onboarding) => {\n //contains 2,3,4,5 cards for onboarding view\n const variants = [\n [],\n [],\n onclick(3),\n text: 'Next'\n },\n {\n onClick: () => onclick(0),\n text: 'Skip'\n }\n ]}\n dialogPlacement=\"bottom left\"\n target=\"green\"\n key=\"green\"\n >\n Get a high level overview with just a glance\n ,\n onclick(4),\n text: 'Next'\n },\n {\n onClick: () => onclick(0),\n text: 'Skip'\n }\n ]}\n dialogPlacement=\"bottom center\"\n target=\"yellow\"\n key=\"yellow\"\n >\n Quickly identify useful and stale content\n ,\n onclick(5),\n text: 'Next'\n },\n {\n onClick: () => onclick(0),\n text: 'Skip'\n }\n ]}\n dialogPlacement=\"bottom right\"\n target=\"red\"\n key=\"red\"\n >\n Know your audience and check out who is really engaged with your content\n ,\n {\n onclick('drawer');\n onclick(6);\n },\n text: 'Open Drawer'\n },\n {\n onClick: () => onclick(0),\n text: 'Finish'\n }\n ]}\n dialogPlacement=\"bottom right\"\n target=\"Help\"\n key=\"Help\"\n >\n Open's up help Drawer\n \n ];\n return variants[Onboarding];\n};\n","import React from 'react';\nimport Button from '@atlaskit/button';\n\nclass ErrorBoundary extends React.Component {\n //this component catches all the error when component catches.\n constructor(props) {\n super(props);\n this.state = { error: null, errorInfo: null };\n }\n\n componentDidCatch(error, errorInfo) {\n // Catch errors in any components below and re-render with error message\n this.setState({\n error: error,\n errorInfo: errorInfo\n });\n console.log(`App crashed with error: ${error} ${errorInfo}`);\n // You can also log error messages to an error reporting service here\n }\n\n render() {\n if (this.state.errorInfo) {\n // Error path\n return (\n
\n \n
\n

Something went wrong.

\n \n
\n \n
\n
\n
\n {this.state.error && this.state.error.toString()}\n
\n {this.state.errorInfo.componentStack}\n
\n
\n );\n }\n // Normally, just render children\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import { atom } from 'recoil';\n\nexport const initialUserDetails = {};\n\nconst UserDetailsAtom = atom({\n default: initialUserDetails,\n key: 'USER_DETAILS_ATOM'\n});\n\nexport default UserDetailsAtom;\n","import React, { useState } from 'react';\nimport DynamicTable from '@atlaskit/dynamic-table';\nimport Avatar from '@atlaskit/avatar';\nimport styled from 'styled-components';\nimport { useRecoilState } from 'recoil';\nimport UserDetailsAtom from '../../Recoil/Atoms/UserDetailsAtom';\nimport { token } from '@atlaskit/tokens';\n\nexport const MostReaderTable = props => {\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n // console.log('props', props);\n let rowarray = [];\n //creation of table syntax\n props.table_data.data.map((item, index) => {\n let id = item[props.table_data.userHeaderId];\n let cells = [\n {\n key: 'name',\n content: (\n
\n \n \n {userDetails[id]?.displayName}\n \n
\n ),\n isSortable: true\n }\n ];\n rowarray.push({ cells: cells, key: index });\n return 0;\n });\n //-------------------\n\n //head properties\n const head = {\n cells: [\n {\n key: 'asd',\n content: 'Name',\n isSortable: true\n }\n ]\n };\n\n return (\n
\n
\n Most Active readers\n
\n \n No matching records found\n \n }\n />\n
\n );\n};\n","import React from 'react';\nimport DynamicTable from '@atlaskit/dynamic-table';\nimport { token } from '@atlaskit/tokens';\n\nexport const MostPopularContent = props => {\n // console.log('props', props);\n let rowarray = [];\n //creation of table syntax\n props.table_data.data.map((item, index) => {\n let cells = [\n {\n key: item['0'],\n content:
{item['0']}
,\n isSortable: true,\n shouldTruncate: true\n },\n { key: item['1'], content: item['1'] }\n ];\n rowarray.push({ cells: cells, isSortable: true, key: index });\n return 0;\n });\n //-------------------\n\n //head properties\n const head = {\n cells: [\n {\n key: 'Name',\n content: 'Name',\n isSortable: true\n },\n {\n key: 'Views',\n content: 'Views',\n isSortable: true\n }\n ]\n };\n\n return (\n
\n
\n Most Popular Contents\n
\n \n No matching records found\n \n }\n />\n
\n );\n};\n","import React from 'react';\nimport DynamicTable from '@atlaskit/dynamic-table';\nimport Avatar from '@atlaskit/avatar';\nimport AvatarItem from '@atlaskit/avatar';\nimport { useRecoilState } from 'recoil';\nimport UserDetailsAtom from '../../Recoil/Atoms/UserDetailsAtom';\nimport { token } from '@atlaskit/tokens';\n\nexport const MostActiveContibutor = props => {\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n // console.log('props', props);\n let rowarray = [];\n //creation of table syntax\n props.table_data.data.map((item, index) => {\n let id = item[props.table_data.userHeaderId];\n let cells = [\n {\n key: item['1'],\n content: (\n
\n \n \n {userDetails[id]?.displayName}\n \n
\n ),\n isSortable: true\n }\n ];\n rowarray.push({ cells: cells, key: index });\n return 0;\n });\n\n //head properties\n const head = {\n cells: [\n {\n key: 'Name',\n content: 'Name',\n isSortable: true\n }\n ]\n };\n\n return (\n
\n
\n Most Active Contributors\n
\n \n No matching records found\n \n }\n />\n
\n );\n};\n","//Pageview\nexport const ID = '0';\nexport const NAME = '1';\nexport const CREATOR = '2';\nexport const CREATED = '3';\nexport const LASTMODIFIED = '4';\nexport const LASTVIEWED = '5';\nexport const USERVIEWED = '6';\nexport const TOTALVIEWS = '7';\nexport const JSMUSERTNAME = '6';\nexport const USERTPORTALID = '7';\nexport const USERTPORTALNAME = '8';\nexport const REQUESTS = '8';\nexport const USERTREQUESTTYPEID = '9';\nexport const USERTREQUESTTYPENAME = '10';\nexport const DaterangeCode = '-2';\nexport const ContentCode = '-26';\nexport const GroupbyCode = '-3';\nexport const DisplayCode = '-28';\nexport const PAGEVIEWTABLEHEADING = {\n head: {\n cells: [\n {\n key: 'Title',\n content: 'Title',\n isSortable: true\n },\n {\n key: 'Creator',\n content: 'Creator',\n isSortable: true\n },\n {\n key: 'Created',\n content: 'Created',\n isSortable: true\n },\n {\n key: 'Last Modified',\n content: 'Last Modified',\n isSortable: true\n },\n {\n key: 'Last Viewed',\n content: 'Last Viewed',\n isSortable: true\n },\n {\n key: 'Users Viewed',\n content: 'Users Viewed',\n isSortable: true\n },\n {\n key: 'Total Views',\n content: 'Total Views',\n isSortable: true\n }\n ]\n }\n};\n\nexport const PAGEVIEWJSMTABLEHEADING = {\n head: {\n cells: [\n {\n key: 'Title',\n content: 'Title',\n isSortable: true\n },\n {\n key: 'Creator',\n content: 'Creator',\n isSortable: true\n },\n\n {\n key: 'Last Viewed',\n content: 'Last Viewed',\n isSortable: true\n },\n {\n key: 'Requests',\n content: 'Requests',\n isSortable: true\n },\n {\n key: 'Users Viewed',\n content: 'Users Viewed',\n isSortable: true\n },\n {\n key: 'Total Views',\n content: 'Total Views',\n isSortable: true\n }\n ]\n }\n};\n\n//dialog\nexport const DIALOGID = '0';\nexport const DIALOGUSER = '1';\nexport const DIALOGVIEWED = '2';\n\nexport const USERAVATAR = '1';\nexport const USERT = '2';\nexport const USERTCREATED = '3';\nexport const USERTUPDATED = '4';\nexport const USERTVIEWED = '5';\nexport const USERTDIALOGPAGE = '0';\nexport const USERTDIALOGLAST = '1';\nexport const USERNAME = '3';\nexport const USERTREQTYPEID = '4';\nexport const USERTREQTYPENAME = '5';\nexport const USERTREQKEY = '6';\nexport const USERREQUESTS = '7';\nexport const USERDIALOGREQID = '2';\nexport const USERDIALOGREQTYPE = '3';\nexport const USERDIALOGREQKEY = '4';\nexport const USERREQID = '1';\nexport const USERREQTYPE = '2';\nexport const USERREQKEY = '3';\n\nexport const GroupbyList = ['Day', 'Week', 'Month'];\nexport const DisplayList = ['Total', 'Unique'];\nexport const ContentList = ['All', 'Pages'];\nexport const SourceList = ['JSM Customer Portal', 'Confluence'];\n","import {\n ContentCode,\n GroupbyCode,\n DisplayCode,\n DaterangeCode\n} from '../Functional/Strings';\n// export const DashboardTransform = res => {\n// let widgetdata = res.widgetData;\n// console.log('dashboardresponse', res);\n// let ChartContent = widgetdata[1].viewPointData.data;\n// let PopularContent = widgetdata[2].viewPointData.data;\n// let ActiveReader = widgetdata[3].viewPointData.data;\n// let ActiveContri = widgetdata[4].viewPointData.data;\n// //let PageViews=widgetdata[5].viewPointData.data\n// //let User=widgetdata[6].viewPointData.data\n\n// return { ChartContent, PopularContent, ActiveContri, ActiveReader };\n// };\n\n// let fakechartdata = {\n// viewPointData: {\n// keys: ['2019-09-18', '2019-10-03'],\n// legends: ['created', 'viewed'],\n// data: [\n// { key: '2019-09-18', values: { viewed: '10.00666' } },\n// { key: '2019-09-20', values: { viewed: '5.00' } },\n// { key: '2019-09-23', values: { viewed: '1.00' } },\n// { key: '2019-09-24', values: { created: '1.00', viewed: '5.00' } },\n// { key: '2019-09-25', values: { viewed: '2.00' } },\n// { key: '2019-09-26', values: { viewed: '1.00' } },\n// { key: '2019-09-27', values: { viewed: '1.00' } },\n// { key: '2019-09-30', values: { viewed: '1.00' } },\n// { key: '2019-10-01', values: { viewed: '1.00' } }\n// ],\n// type: '',\n// yMagnitude: 'Issue Count'\n// }\n// };\n\n// const ChartplusConvert = data => {\n// console.log('alldata', data);\n// let Series = data.legends.map(legend => {\n// console.log('alllegends', legend);\n// let filtereddata = data.data.filter(filteritem => {\n// if (legend in filteritem.values) return filteritem;\n// });\n// let formatteddata = filtereddata.map(item => {\n// return { x: item.key, y: Math.trunc(item.values[legend]) };\n// });\n// console.log('allformatted', formatteddata);\n// console.log('allseriesdata', {\n// name: legend,\n// color: 'green',\n// data: formatteddata\n// });\n// return { name: legend, color: 'green', data: formatteddata };\n// });\n// console.log('allseries', { series: Series });\n\n// const syntax = {\n// container: 'container',\n// type: 'line',\n// percentage: true,\n// stack: true,\n// xAxis: {\n// type: 'date',\n// startDate: data.keys[0],\n// endDate: data.keys[1]\n// },\n// yAxis: {},\n// legend: {\n// align: 'right-top',\n// layout: 'horizontal'\n// },\n// series: Series\n// };\n\n// console.log('allSyntax', syntax);\n// };\n\n// export const OverviewTransform = res => {\n// let ChartContent = ChartplusConvert(fakechartdata);\n// let PopularContent = res[2].viewPointData.data;\n// let ActiveReader = res[3].viewPointData.data;\n// let ActiveContri = res[4].viewPointData.data;\n\n// return { ChartContent, PopularContent, ActiveContri, ActiveReader };\n// };\n\n// export const PageviewTransform = res => {\n// let PageviewTable = res[5].viewPointData.data;\n// return PageviewTable;\n// };\n// export const UserTransform = res => {\n// let UserTable = res[6].viewPointData.data;\n// return UserTable;\n// };\n// const ChartplusConvert = data => {\n// console.log('alldata', data);\n// let Series = data.legends.map(legend => {\n// console.log('alllegends', legend);\n// let filtereddata = data.data.filter(filteritem => {\n// if (legend in filteritem.values) return filteritem;\n// });\n// let formatteddata = filtereddata.map(item => {\n// return { x: item.key, y: item.values[legend] };\n// });\n// console.log('allformatted', formatteddata);\n// console.log('allseriesdata', {\n// name: legend,\n// color: 'green',\n// data: formatteddata\n// });\n// return { name: legend, color: 'green', data: formatteddata };\n// });\n// console.log('allseries', { series: Series });\n\n// const syntax = {\n// container: 'container',\n// type: 'line',\n// percentage: true,\n// stack: true,\n// xAxis: {\n// type: 'date',\n// startDate: data.keys[0],\n// endDate: data.keys[1]\n// },\n// yAxis: {},\n// legend: {\n// align: 'right-top',\n// layout: 'horizontal'\n// },\n// series: Series\n// };\n\n// console.log('allSyntax', syntax);\n// };\n\n// export const OverviewTransform = res => {\n// let ChartContent = ChartplusConvert(fakechartdata);\n// let PopularContent = res[2].viewPointData.data;\n// let ActiveReader = res[3].viewPointData.data;\n// let ActiveContri = res[4].viewPointData.data;\n\n// return { ChartContent, PopularContent, ActiveContri, ActiveReader };\n// // };\n// export const PageviewTransform = res => {\n// let PageviewTable = res[5].viewPointData.data;\n// return PageviewTable;\n// };\n// export const UserTransform = res => {\n// let UserTable = res[6].viewPointData.data;\n// return UserTable;\n// };\n\nexport const FilterTransform = (res, value) => {\n if (value === 0) {\n let Chart = res[1].viewPointData;\n // console.log('chartdata', Chart);\n let PopularContent = { data: res[2].viewPointData.data, loading: false };\n\n let ActiveReaderId = '';\n res[3].viewPointData.header.forEach(val => {\n if (val.type === 'user') {\n ActiveReaderId = val.id;\n }\n });\n let ActiveReader = {\n data: res[3].viewPointData.data,\n userHeaderId: ActiveReaderId,\n loading: false\n };\n\n let ActiveContriId = '';\n res[4].viewPointData.header.forEach(val => {\n if (val.type === 'user') {\n ActiveContriId = val.id;\n }\n });\n let ActiveContri = {\n data: res[4].viewPointData.data,\n userHeaderId: ActiveContriId,\n loading: false\n };\n return { Chart, PopularContent, ActiveReader, ActiveContri };\n } else if (value === 1) {\n let pageviewTableId = '';\n res[5].viewPointData.header.forEach(val => {\n if (val.type === 'user') {\n pageviewTableId = val.id;\n }\n });\n let Table = res[5].viewPointData.data;\n return { Table, pageviewTableId };\n } else if (value === 2) {\n let UserTableId = '';\n res[6].viewPointData.header.forEach(val => {\n if (val.type === 'user') {\n UserTableId = val.id;\n }\n });\n let UserTable = res[6].viewPointData.data;\n return { UserTable, UserTableId };\n }\n};\nexport const Filtervalues = data => {\n let startdate = data.selected[DaterangeCode].value[0];\n let enddate = data.selected[DaterangeCode].value[1];\n let GroupBy = data.selected[GroupbyCode].value[0];\n let Content = data.selected[ContentCode].value[0];\n let Display = data.selected[DisplayCode].value[0];\n // console.log('date', startdate);\n // console.log('date', enddate);\n // console.log('Groupby', GroupBy);\n // console.log('display', Display);\n // console.log('content', Content);\n return { startdate, enddate, Content, GroupBy, Display };\n};\n\nexport const PageviewDialogtransform = res => {\n let PageDialogTable = res.data;\n // console.log(PageDialogTable);\n return PageDialogTable;\n};\nexport const UserDialogtransform = res => {\n let UserDialogTable = res.data;\n // console.log(UserDialogTable);\n return UserDialogTable;\n};\n","import Axios from 'axios';\n\nconst axiosInstance = Axios.create({});\n\nexport default axiosInstance;\n","import axiosInstance from './axiosInstance';\n\nexport async function applyViewFilter(viewId, reqBody, JWT) {\n try {\n if (process.env.NODE_ENV === 'development') {\n const response = await axiosInstance.get(\n `app/mock/applyfiltermock${viewId}.json`\n );\n return response;\n }\n const response = await axiosInstance.post(\n `/dashboard/pagefilter?viewID=${viewId}`,\n reqBody,\n {\n headers: {\n authorization: JWT\n }\n }\n );\n // const response2 = await axiosInstance.get(\n // `/dashboard/pagefilter?viewID=${viewId}`,\n // {\n // headers: {\n // authorization: JWT\n // }\n // }\n // );\n // console.log(\"response of get\", response2)\n return response;\n } catch (err) {\n console.error(`Error while applying filters viewID:${viewId}`, err);\n return {\n data: {},\n headers: {}\n };\n }\n}\nexport async function getViewFilter(viewId, JWT) {\n try {\n if (process.env.NODE_ENV === 'development') {\n const response = await axiosInstance.get(\n `/mock/applyfiltermock${viewId}.json`\n );\n return response;\n }\n const response = await axiosInstance.get(\n `/dashboard/pagefilter?viewID=${viewId}`,\n {\n headers: {\n authorization: JWT\n }\n }\n );\n // console.log('response of get', response);\n return response;\n } catch (err) {\n console.error(`Error while applying filters viewID:${viewId}`, err);\n return {\n data: {},\n headers: {}\n };\n }\n}\nexport async function saveViewFilter(filters, JWT) {\n try {\n if (process.env.NODE_ENV === 'development') {\n console.log('fill the mock for later');\n }\n const response = await axiosInstance.post(\n `/dashboard/pagefilter/save`,\n { ...filters },\n {\n headers: {\n authorization: JWT\n }\n }\n );\n // console.log('response of get', response);\n return response;\n } catch (err) {\n console.error(`Error while saving filters`, err);\n return {\n data: {},\n headers: {}\n };\n }\n}\n","import moment from 'moment-timezone';\nimport {\n GroupbyList,\n DisplayList,\n ContentList,\n SourceList\n} from '../../Functional/Strings';\nimport { atom } from 'recoil';\n\nexport const initalFilterState = {\n start_date: moment()\n .subtract(14, 'days')\n .startOf('day')\n .tz('UTC')\n .format(),\n end_date: moment()\n .endOf('day')\n .tz('UTC')\n .format(),\n display_array: DisplayList,\n groupby_array: GroupbyList,\n content_array: ContentList,\n source_array: SourceList,\n display_value: DisplayList[0],\n group_by_value: GroupbyList[0],\n content_value: ContentList[0],\n space_value: [],\n source_value: SourceList[0],\n save_flag: false\n};\n\nconst FilterAtom = atom({\n default: initalFilterState,\n key: 'FILTER_ATOM'\n});\n\nexport default FilterAtom;\n","import { atom } from 'recoil';\n\nconst AccountAtom = atom({\n key: 'Account',\n default: {\n JWT: '',\n is_authenticated: false\n }\n});\n\nexport default AccountAtom;\n","import { atom } from 'recoil';\n\nexport const initialViewDataState = {\n tab_index: 0,\n chart_flag: 0,\n onboarding: 0,\n drawer: false,\n page_view_table: { data: [], loading: true },\n user_view_table: { data: [], loading: true },\n user_dialog: [],\n page_dialog: [],\n active_contributores: { data: [], loading: true },\n active_reader: { data: [], loading: true },\n popular_content: { data: [], loading: true },\n timeline_chart: { data: [], loading: true },\n overview_loading: false,\n is_dialog_loading: true,\n space_setting: false,\n spaces_list: []\n};\n\nconst ViewDataAtom = atom({\n default: initialViewDataState,\n key: 'VIEW_DATA_ATOM'\n});\n\nexport default ViewDataAtom;\n","import moment from 'moment';\n\n//use only dev instance\n\n// export const sampledata1 = {\n// keys: ['2019-09-21', '2019-10-05'],\n// legends: ['created', 'viewed'],\n// data: [\n// { key: '2019-09-23', values: { viewed: '1.00' } },\n// { key: '2019-09-24', values: { created: '1.00', viewed: '5.00' } },\n// { key: '2019-09-25', values: { viewed: '2.00' } },\n// { key: '2019-09-26', values: { viewed: '1.00' } },\n// { key: '2019-09-27', values: { viewed: '1.00' } },\n// { key: '2019-09-30', values: { viewed: '1.00' } },\n// { key: '2019-10-01', values: { viewed: '1.00' } }\n// ],\n// type: '',\n// yMagnitude: 'Issue Count'\n// };\nexport const mockfilterresponse = {\n data: {\n '1': {\n viewPointData: {\n keys: ['09/13/2021', '09/27/2021'],\n legends: ['created', 'viewed'],\n data: [\n {\n key: '2021-09-27',\n values: {\n created: '2.00',\n viewed: '4.00'\n }\n },\n {\n key: '2021-09-25',\n values: {\n viewed: '2.00'\n }\n },\n {\n key: '2021-09-24',\n values: {\n created: '1.00',\n viewed: '1.00'\n }\n }\n ],\n type: '',\n yMagnitude: 'Issue Count'\n },\n indicatorData: null\n },\n '2': {\n viewPointData: {\n header: [\n {\n id: '0',\n label: 'Pages',\n type: 'string',\n hide: false,\n drillDown: false\n },\n {\n id: '1',\n label: 'Views',\n type: 'string',\n hide: false,\n drillDown: false\n }\n ],\n data: [\n {\n '0': 'testspace',\n '1': '2 views'\n },\n {\n '0': 'Page test',\n '1': '1 views'\n },\n {\n '0': 'Test',\n '1': '1 views'\n }\n ],\n jiralinks: null\n },\n indicatorData: null\n },\n '3': {\n viewPointData: {\n header: [\n {\n id: '0',\n label: 'User Image',\n type: 'avatar',\n hide: false,\n drillDown: false\n },\n {\n id: '1',\n label: 'Users',\n type: 'string',\n hide: false,\n drillDown: false\n }\n ],\n data: [\n {\n '0':\n 'https://rawtests.atlassian.net/wiki/aa-avatar/5f4f468332360700381c48fc',\n '1': 'Rawn Riju'\n },\n {\n '0': 'https://test.com',\n '1': 'Person2'\n },\n {\n '0': 'https://test2.com',\n '1': 'Person3'\n }\n ],\n jiralinks: null\n },\n indicatorData: null\n },\n '4': {\n viewPointData: {\n header: [\n {\n id: '0',\n label: 'User Image',\n type: 'avatar',\n hide: false,\n drillDown: false\n },\n {\n id: '1',\n label: 'Users',\n type: 'string',\n hide: false,\n drillDown: false\n }\n ],\n data: [\n {\n '0':\n 'https://rawtests.atlassian.net/wiki/aa-avatar/5f4f468332360700381c48fc',\n '1': 'Rawn Riju'\n },\n {\n '0': 'https://test.com',\n '1': 'Person 2'\n }\n ],\n jiralinks: null\n },\n indicatorData: null\n }\n },\n status: 200,\n statusText: '',\n headers: {\n 'access-control-allow-origin': '*',\n authorization:\n 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzI3NDQ4MzUsImlhdCI6MTYzMjczNzYzNSwiaXNzIjoiVklFVzI2IiwibmFtZSI6IiIsInJvbGUiOiIiLCJ1c2VyRW1haWwiOiIiLCJzdGF0dXMiOiIiLCJhZG1pbkVtYWlsIjoiIiwiZmlyc3RMb2dpbiI6ZmFsc2UsImlkIjoiIiwiYWNjSUQiOiIxIiwic3BhY2VLZXkiOiJURVNUU1BBQ0UifQ.cfYrwSghB5R4-ghO51dUgJ06LqupsqsMif2cmS3PzZY',\n 'content-length': '1208',\n 'content-type': 'application/json',\n date: 'Mon, 27 Sep 2021 10:13:55 GMT',\n vary: 'Accept-Encoding',\n 'x-content-type-options': 'nosniff',\n 'x-xss-protection': '1; mode=block'\n },\n request: {}\n};\nexport const mockfilterresponse2 = {\n data: {\n '5': {\n viewPointData: {\n header: [\n {\n id: '0',\n label: 'ID',\n type: 'string',\n hide: true,\n drillDown: false\n },\n {\n id: '1',\n label: 'Title',\n type: 'string',\n hide: false,\n drillDown: false\n },\n {\n id: '2',\n label: 'Creator',\n type: 'string',\n hide: false,\n drillDown: false\n },\n {\n id: '3',\n label: 'Created',\n type: 'Date',\n hide: false,\n drillDown: false\n },\n {\n id: '4',\n label: 'Last Modified',\n type: 'Date',\n hide: false,\n drillDown: false\n },\n {\n id: '5',\n label: 'Last Viewed',\n type: 'Date',\n hide: false,\n drillDown: false\n },\n {\n id: '6',\n label: 'Users Viewed',\n type: 'int',\n hide: false,\n drillDown: true\n },\n {\n id: '7',\n label: 'Total Views',\n type: 'int',\n hide: false,\n drillDown: true\n }\n ],\n data: [\n {\n '0': '33011',\n '1': 'testspace',\n '2': 'Anonymous',\n '3': '2020-09-22T06:36:29Z',\n '4': '',\n '5': '2021-09-27T05:10:57Z',\n '6': '1',\n '7': '2'\n },\n {\n '0': '362872853',\n '1': 'Page test',\n '2': 'Rawn Riju',\n '3': '2021-09-27T05:12:48Z',\n '4': '',\n '5': '2021-09-27T05:13:23Z',\n '6': '1',\n '7': '1'\n },\n {\n '0': '363003905',\n '1': 'Test',\n '2': 'Rawn Riju',\n '3': '2021-09-27T05:12:28Z',\n '4': '',\n '5': '2021-09-27T05:12:31Z',\n '6': '1',\n '7': '1'\n }\n ],\n jiralinks: null\n },\n indicatorData: null\n }\n },\n status: 200,\n statusText: '',\n headers: {\n 'access-control-allow-origin': '*',\n authorization:\n 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzI3NDc4OTAsImlhdCI6MTYzMjc0MDY5MCwiaXNzIjoiVklFVzI2IiwibmFtZSI6IiIsInJvbGUiOiIiLCJ1c2VyRW1haWwiOiIiLCJzdGF0dXMiOiIiLCJhZG1pbkVtYWlsIjoiIiwiZmlyc3RMb2dpbiI6ZmFsc2UsImlkIjoiIiwiYWNjSUQiOiIxIiwic3BhY2VLZXkiOiJURVNUU1BBQ0UifQ.WkNghmU1sNuseps05CASOxFbZKilJZLWoTQjTPrpzDY',\n 'content-length': '1061',\n 'content-type': 'application/json',\n date: 'Mon, 27 Sep 2021 11:04:50 GMT',\n vary: 'Accept-Encoding',\n 'x-content-type-options': 'nosniff',\n 'x-xss-protection': '1; mode=block'\n },\n config: {\n url: '/dashboard/pagefilter?viewID=2',\n method: 'post',\n data:\n '{\"selected\":{\"-2\":{\"label\":\"Date Range\",\"type\":\"range\",\"value\":[\"09/13/2021\",\"09/27/2021\",\"Custom\"]},\"-26\":{\"label\":\"Content\",\"type\":\"single\",\"value\":[\"All\"]}}}',\n headers: {\n Accept: 'application/json, text/plain, */*',\n 'Content-Type': 'application/json;charset=utf-8',\n authorization:\n 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzI3NDc4ODcsImlhdCI6MTYzMjc0MDY4NywiaXNzIjoiVklFVzI2IiwibmFtZSI6IiIsInJvbGUiOiIiLCJ1c2VyRW1haWwiOiIiLCJzdGF0dXMiOiIiLCJhZG1pbkVtYWlsIjoiIiwiZmlyc3RMb2dpbiI6ZmFsc2UsImlkIjoiIiwiYWNjSUQiOiIxIiwic3BhY2VLZXkiOiJURVNUU1BBQ0UifQ.1PddhDxen61Hy9SHgF9damTDHSJfyaCoYlz076H87og'\n },\n transformRequest: [null],\n transformResponse: [null],\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1\n },\n request: {}\n};\nexport const mockfilterresponse3 = {\n data: {\n '6': {\n viewPointData: {\n header: [\n {\n id: '0',\n label: 'ID',\n type: 'string',\n hide: true,\n drillDown: false\n },\n {\n id: '1',\n label: 'User Image',\n type: 'avatar',\n hide: false,\n drillDown: false\n },\n {\n id: '2',\n label: 'User',\n type: 'string',\n hide: false,\n drillDown: false\n },\n {\n id: '3',\n label: 'Created',\n type: 'int',\n hide: false,\n drillDown: true\n },\n {\n id: '4',\n label: 'Updated',\n type: 'int',\n hide: false,\n drillDown: true\n },\n {\n id: '5',\n label: 'Viewed',\n type: 'int',\n hide: false,\n drillDown: true\n }\n ],\n data: [\n {\n '0': '5f4f468332360700381c48fc',\n '1':\n 'https://rawtests.atlassian.net/wiki/aa-avatar/5f4f468332360700381c48fc',\n '2': 'Rawn Riju',\n '3': '2',\n '4': '0',\n '5': '3'\n }\n ],\n jiralinks: null\n },\n indicatorData: null\n }\n },\n status: 200,\n statusText: '',\n headers: {\n 'access-control-allow-origin': '*',\n authorization:\n 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzI3NDc5NTgsImlhdCI6MTYzMjc0MDc1OCwiaXNzIjoiVklFVzI2IiwibmFtZSI6IiIsInJvbGUiOiIiLCJ1c2VyRW1haWwiOiIiLCJzdGF0dXMiOiIiLCJhZG1pbkVtYWlsIjoiIiwiZmlyc3RMb2dpbiI6ZmFsc2UsImlkIjoiIiwiYWNjSUQiOiIxIiwic3BhY2VLZXkiOiJURVNUU1BBQ0UifQ.cqh2cdHtagUqkofTAHudXoAjSDF5nra0yCv92iWKGTY',\n 'content-length': '671',\n 'content-type': 'application/json',\n date: 'Mon, 27 Sep 2021 11:05:58 GMT',\n vary: 'Accept-Encoding',\n 'x-content-type-options': 'nosniff',\n 'x-xss-protection': '1; mode=block'\n },\n config: {\n url: '/dashboard/pagefilter?viewID=3',\n method: 'post',\n data:\n '{\"selected\":{\"-2\":{\"label\":\"Date Range\",\"type\":\"range\",\"value\":[\"09/13/2021\",\"09/27/2021\",\"Custom\"]},\"-26\":{\"label\":\"Content\",\"type\":\"single\",\"value\":[\"All\"]}}}',\n headers: {\n Accept: 'application/json, text/plain, */*',\n 'Content-Type': 'application/json;charset=utf-8',\n authorization:\n 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzI3NDc4OTAsImlhdCI6MTYzMjc0MDY5MCwiaXNzIjoiVklFVzI2IiwibmFtZSI6IiIsInJvbGUiOiIiLCJ1c2VyRW1haWwiOiIiLCJzdGF0dXMiOiIiLCJhZG1pbkVtYWlsIjoiIiwiZmlyc3RMb2dpbiI6ZmFsc2UsImlkIjoiIiwiYWNjSUQiOiIxIiwic3BhY2VLZXkiOiJURVNUU1BBQ0UifQ.WkNghmU1sNuseps05CASOxFbZKilJZLWoTQjTPrpzDY'\n },\n transformRequest: [null],\n transformResponse: [null],\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1\n },\n request: {}\n};\n\nexport const sampledata2 = {\n keys: ['2019-09-21', '2019-10-05'],\n legends: ['created', 'viewed'],\n data: [\n { key: '2019-09-23', values: { viewed: '1.00' } },\n { key: '2019-09-24', values: { created: '1.00', viewed: '5.00' } },\n { key: '2019-09-25', values: { viewed: '2.00' } },\n { key: '2019-09-26', values: { viewed: '1.00' } },\n { key: '2019-09-27', values: { viewed: '1.00' } },\n { key: '2019-09-30', values: { viewed: '1.00' } },\n { key: '2019-10-01', values: { viewed: '1.00' } }\n ],\n type: '',\n yMagnitude: 'Issue Count'\n};\n\nexport const mockGeneralgetdata = {\n data: {\n segments: [\n {\n label: 'OVERVIEW FILTER',\n config: ['-27', '-2', '-26', '-3', '-28']\n }\n ],\n config: {\n '-2': {\n label: 'Date Range',\n type: 'range',\n value: [\n {\n label: 'None',\n type: 'none',\n value: []\n },\n {\n label: 'Custom',\n type: 'custom',\n value: []\n },\n {\n label: 'Today',\n type: 'predefined',\n value: []\n },\n {\n label: 'Yesterday',\n type: 'predefined',\n value: []\n },\n {\n label: 'Last week',\n type: 'predefined',\n value: []\n },\n {\n label: 'Last 14 days',\n type: 'predefined',\n value: []\n },\n {\n label: 'Last 30 days',\n type: 'predefined',\n value: []\n },\n {\n label: 'Last 3 months',\n type: 'predefined',\n value: []\n },\n {\n label: 'Last 6 months',\n type: 'predefined',\n value: []\n }\n ]\n },\n '-26': {\n label: 'Content',\n type: 'single',\n value: ['Pages', 'All'],\n required: true\n },\n '-27': {\n label: 'Spaces',\n type: 'multilist',\n value: [\n 'All Spaces',\n 'P1',\n 'P2',\n 'SR2',\n 'SER',\n 'TES',\n 'TESTSPACE',\n 'TEST'\n ]\n },\n '-28': {\n label: 'Display',\n type: 'single',\n value: ['Total', 'Unique'],\n required: true\n },\n '-3': {\n label: 'Group By',\n type: 'single',\n value: ['Day', 'Week', 'Month'],\n required: true\n }\n },\n savedFilters: [],\n selected: {\n '-2': {\n label: 'Date Range',\n type: 'range',\n value: ['2021-10-05', '2021-10-18', '', '']\n },\n '-26': {\n label: 'Content',\n type: 'single',\n value: ['All']\n },\n '-27': {\n label: 'Spaces',\n type: 'multilist',\n value: ['All Spaces']\n },\n '-28': {\n label: 'Display',\n type: 'single',\n value: ['Total']\n },\n '-3': {\n label: 'Group By',\n type: 'single',\n value: ['Day']\n }\n }\n },\n status: 200,\n statusText: '',\n headers: {\n 'access-control-allow-origin': '*',\n authorization:\n 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzQ1NDYzNTcsImlhdCI6MTYzNDUzOTE1NywiaXNzIjoiVklFVzI2IiwibmFtZSI6IiIsInJvbGUiOiIiLCJ1c2VyRW1haWwiOiIiLCJzdGF0dXMiOiIiLCJhZG1pbkVtYWlsIjoiIiwiZmlyc3RMb2dpbiI6ZmFsc2UsImlkIjoiIiwiYWNjSUQiOiIxIiwic3BhY2VLZXkiOiIifQ.WH6DJ976WWDaOy015VkDlC8gc9rZckrmh_5cPJYRcFA',\n 'content-length': '1344',\n 'content-type': 'application/json',\n date: 'Mon, 18 Oct 2021 06:39:17 GMT',\n vary: 'Accept-Encoding',\n 'x-content-type-options': 'nosniff',\n 'x-xss-protection': '1; mode=block'\n },\n config: {\n url: '/dashboard/pagefilter?viewID=1',\n method: 'get',\n headers: {\n Accept: 'application/json, text/plain, */*',\n authorization:\n 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzQ1NDYzNTYsImlhdCI6MTYzNDUzOTE1NiwiaXNzIjoiVklFVzI2IiwibmFtZSI6IiIsInJvbGUiOiIiLCJ1c2VyRW1haWwiOiIiLCJzdGF0dXMiOiIiLCJhZG1pbkVtYWlsIjoiIiwiZmlyc3RMb2dpbiI6ZmFsc2UsImlkIjoiIiwiYWNjSUQiOiIxIiwic3BhY2VLZXkiOiIifQ.cJLRdQgG6vnETnpeCMrARecGEXnu-Ch5aYd2AT4Kx7w'\n },\n transformRequest: [null],\n transformResponse: [null],\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1\n },\n request: {}\n};\n\nexport const mockSpacegetdata = {};\n\n/*export const Fakepageview = [\n {\n '0': '488837',\n '1': 'Jenkins Plugin',\n '2': 'Ajay Emmanuel',\n '3': moment('2019-08-19T15:17:13Z').fromNow(),\n '4': 'sad',\n '5': 'as',\n '6': '1',\n '7': '1'\n },\n {\n '0': '14352385',\n '1': 'MultiSelect',\n '2': 'Ajay Emmanuel',\n '3': moment('2017-03-25T15:17:13Z').fromNow(),\n '4': 'erte',\n '5': 'ert',\n '6': '333',\n '7': '4442'\n },\n {\n '0': '14352385',\n '1': 'MultiSelect',\n '2': 'Ajay Emmanuel',\n '3': moment('2017-03-25T15:17:13Z').fromNow(),\n '4': 'ert',\n '5': 'ert',\n '6': '211',\n '7': '3343'\n },\n {\n '0': '14352385',\n '1': 'MultiSelect',\n '2': 'Ajay Emmanuel',\n '3': moment('2017-03-25T15:17:13Z').fromNow(),\n '4': 'ert',\n '5': 'ghj',\n '6': '1',\n '7': '23'\n },\n {\n '0': '14352385',\n '1': 'MultiSelect',\n '2': 'Ajay Emmanuel',\n '3': moment('2017-03-25T15:17:13Z').fromNow(),\n '4': 'ghjg',\n '5': 'sdf',\n '6': '123',\n '7': '23'\n },\n {\n '0': '14352385',\n '1': 'MultiSelect',\n '2': 'Ajay Emmanuel',\n '3': moment('2017-03-25T15:17:13Z').fromNow(),\n '4': 'fdf',\n '5': 'sadd',\n '6': '123',\n '7': '123'\n }\n];\n\nexport const Fakeuserview = [\n {\n '0': '123123',\n '1': 'Emmanuel',\n '2': 'GHOSH',\n '3': moment('2019-08-19T15:17:13Z').fromNow(),\n '4': '211'\n },\n {\n '0': '123123',\n '1': 'Ajay Ghosh',\n '2': 'GHOSH',\n '3': moment('2017-03-25T15:17:13Z').fromNow(),\n '4': '331'\n },\n {\n '0': '123123',\n '1': 'Akhil',\n '2': 'GHOSH',\n '3': moment('2017-03-25T15:17:13Z').fromNow(),\n '4': '1'\n },\n {\n '0': '123123',\n '1': 'Ajay Emmanuel',\n '2': 'GHOSH',\n '3': moment('2017-03-25T15:17:13Z').fromNow(),\n '4': '1'\n }\n];\n\n\n\n\nexport const fakeMostPopularContent = [\n { 0: 'ample pages', 1: '6 views' },\n { 0: 'Sample pages', 1: '9 views' },\n { 0: 'Sample pages', 1: '9 views' }\n];\n\nexport const fakeMostActiveContri = [\n {\n 0: 'https://actio-ajayghosh.atlassian.net/wiki/aa-avatar/5d36a5acc2db730c59b26ccb',\n 1: 'Ghosh'\n },\n {\n 0: 'https://actio-ajayghosh.atlassian.net/wiki/aa-avatar/5d36a5acc2db730c59b26ccb',\n 1: 'Ajay Ghosh'\n },\n {\n 0: 'https://actio-ajayghosh.atlassian.net/wiki/aa-avatar/5d36a5acc2db730c59b26ccb',\n 1: 'Ajay Ghosh'\n }\n];\n\nexport const fakeMostActiveReader = [\n {\n 0: 'https://actio-ajayghosh.atlassian.net/wiki/aa-avatar/5d36a5acc2db730c59b26ccb',\n 1: 'Ajay Ghosh'\n },\n {\n 0: 'https://actio-ajayghosh.atlassian.net/wiki/aa-avatar/5d36a5acc2db730c59b26ccb',\n 1: 'Ajay Ghosh'\n },\n {\n 0: 'https://actio-ajayghosh.atlassian.net/wiki/aa-avatar/5d36a5acc2db730c59b26ccb',\n 1: 'Ajay Ghosh'\n }\n];\n\n;*/\nexport const fakeChartData = [\n {\n id: 'Created',\n data: [\n { x: '2018-01-01', y: 7 },\n { x: '2018-01-09', y: 5 },\n { x: '2018-01-22', y: 11 },\n { x: '2018-02-04', y: 9 },\n { x: '2018-02-15', y: 19 },\n { x: '2018-03-06', y: 31 },\n { x: '2018-03-21', y: 13 },\n { x: '2018-03-31', y: 5 }\n ]\n },\n {\n id: 'Viewed',\n data: [\n { x: '2018-01-04', y: 14 },\n { x: '2018-01-14', y: 14 },\n { x: '2018-02-19', y: 23 },\n { x: '2018-02-28', y: 11 },\n { x: '2018-03-11', y: 10 },\n { x: '2018-03-15', y: 12 },\n { x: '2018-03-25', y: 9 },\n { x: '2018-04-11', y: 7 }\n ]\n }\n];\nexport const fakeUserDialog = [\n {\n '0': 'Sample pages',\n '1': moment('2017-03-25T15:17:13Z').fromNow()\n },\n {\n '0': 'Sample pages',\n '1': moment('2019-08-19T15:17:13Z').fromNow()\n }\n];\nexport const fakedatachart = [\n { key: '2019-07-24', values: { created: '1.00' } },\n { key: '2019-08-02', values: { viewed: '2.00' } },\n { key: '2019-08-05', values: { viewed: '4.00' } },\n { key: '2019-08-06', values: { viewed: '1.00' } },\n { key: '2019-08-21', values: { viewed: '4.00' } },\n { key: '2019-08-27', values: { viewed: '5.00' } },\n { key: '2019-08-28', values: { viewed: '1.00' } },\n { key: '2019-08-29', values: { viewed: '2.00' } },\n { key: '2019-08-30', values: { viewed: '1.00' } },\n { key: '2019-09-02', values: { viewed: '1.00' } }\n];\nexport const fakePageDialog = [\n {\n '1':\n 'https://actio-ajayghosh.atlassian.net/wiki/aa-avatar/5d36a5acc2db730c59b26ccb',\n '2': 'GHOSH',\n '3': moment('2017-03-25T15:17:13Z').fromNow()\n },\n {\n '1':\n 'https://actio-ajayghosh.atlassian.net/wiki/aa-avatar/5d36a5acc2db730c59b26ccb',\n '2': 'GHOSH',\n '3': moment('2019-08-19T15:17:13Z').fromNow()\n }\n];\n","export async function getIframeBaseUrl() {\n return new Promise(resolve => {\n try {\n window.AP?.getLocation(location => {\n if (location) {\n resolve(new URL(location));\n } else {\n resolve();\n }\n });\n } catch (err) {\n console.error('Error while checking base url', { err });\n resolve();\n }\n });\n}\n","import React, { useEffect, useState } from 'react';\nimport { DatePicker } from '@atlaskit/datetime-picker';\nimport Dropdown, {\n DropdownItem,\n DropdownItemGroup\n} from '@atlaskit/dropdown-menu';\n// import styles from './filter.module.css';\nimport { FilterWrapper, DropDownStyled } from '../../Styles/wrappers';\nimport { FilterTransform } from '../../Functional/Transfrom';\nimport {\n ContentCode,\n DisplayCode,\n DaterangeCode,\n GroupbyCode\n} from '../../Functional/Strings';\nimport {\n applyViewFilter,\n getViewFilter,\n saveViewFilter\n} from '../../API/filterApis';\nimport { useRecoilState } from 'recoil';\nimport FilterAtom from '../../Recoil/Atoms/FilterAtom';\nimport AccountAtom from '../../Recoil/Atoms/AccountAtom';\nimport axiosInstance from '../../API/axiosInstance';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\nimport { mockGeneralgetdata } from '../../Mock/FakeData';\nimport Select from '@view26/select';\nimport Button from '@atlaskit/button';\nimport { datadogRum } from '@datadog/browser-rum';\nimport jwtDecode from 'jwt-decode';\nimport { getIframeBaseUrl } from '../../Functional/authUtils';\nimport { token } from '@atlaskit/tokens';\n\nfunction Filterview(props) {\n const [filterData, setFilterData] = useRecoilState(FilterAtom);\n const [accountData, setAccountData] = useRecoilState(AccountAtom);\n const [viewData, setViewData] = useRecoilState(ViewDataAtom);\n\n const [validateDate, setValidateDate] = useState(false);\n // const StartDate = filterData.start_date;\n // const EndDate = filterData.end_date;\n const StartDate = new Date(filterData.start_date).toISOString();\n const EndDate = new Date(filterData.end_date).toISOString();\n const Contentvalue = filterData.content_value;\n const Displayvalue = filterData.display_value;\n const Groupbyvalue = filterData.group_by_value;\n const Sourcevalue = filterData.source_value;\n const Tab_index = viewData.tab_index;\n const General_page_flag = viewData.space_setting;\n const ContentArray = filterData.content_array;\n const SourceArray = filterData.source_array;\n const DisplayArray = filterData.display_array;\n const GroupbyArray = filterData.groupby_array;\n const isAuthenticated = accountData.is_authenticated;\n const Spacevalues = filterData.space_value;\n const SaveFlag = filterData.save_flag;\n const JWT = accountData.JWT;\n console.log('Checking filter state on renderre', filterData);\n //visiblity of the groupby and display\n let visiblestyle;\n if (Tab_index === 0) {\n visiblestyle = 'visible';\n } else {\n visiblestyle = 'invisible';\n }\n\n let sourceVisibleStyle;\n if (Tab_index !== 0) {\n sourceVisibleStyle = 'visible';\n } else {\n sourceVisibleStyle = 'invisible';\n }\n\n const theme = {\n background: token('color.background.accent.gray.subtlest'),\n color: token('color.text'),\n dropdownBackground: token('color.background.input.pressed'),\n loaderColor: token('color.background.accent.gray.subtlest')\n };\n\n //for addding jwt header\n const setJWT = async (jwt = '') => {\n setAccountData(prev => ({ ...prev, JWT: jwt, is_authenticated: !!jwt }));\n if (jwt) {\n const decoded = jwtDecode(jwt);\n datadogRum.setGlobalContext('accID', decoded.accID);\n const baseUrl = await getIframeBaseUrl();\n if (baseUrl) {\n datadogRum.setGlobalContext('baseURL', baseUrl.origin);\n }\n }\n };\n\n const applyFilters = async tab_index => {\n let reqpayload, transformed;\n let response = {\n data: {},\n headers: {}\n };\n\n const setToken = () =>\n setAccountData(prev => ({\n ...prev,\n JWT: response.headers['authorization']\n }));\n\n switch (tab_index) {\n case 0:\n reqpayload = General_page_flag\n ? {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n [DisplayCode]: {\n label: 'Display',\n type: 'single',\n value: [Displayvalue]\n },\n [GroupbyCode]: {\n label: 'Group By',\n type: 'single',\n value: [Groupbyvalue]\n },\n '-27': {\n label: 'Spaces',\n type: 'multilist',\n value: [...Spacevalues]\n }\n }\n }\n : {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n [DisplayCode]: {\n label: 'Display',\n type: 'single',\n value: [Displayvalue]\n },\n [GroupbyCode]: {\n label: 'Group By',\n type: 'single',\n value: [Groupbyvalue]\n }\n }\n };\n //Detect any change in filter values using hash compare\n setViewData(prev => ({\n ...prev,\n timeline_chart: { data: [], loading: true },\n active_contributores: { data: [], loading: true },\n active_reader: { data: [], loading: true },\n popular_content: { data: [], loading: true }\n }));\n\n response = await applyViewFilter(1, reqpayload, JWT);\n // console.log('checking responsei in filter view', response);\n transformed = FilterTransform(response.data, tab_index);\n\n setViewData(prev => ({\n ...prev,\n timeline_chart: {\n data: transformed.Chart,\n loading: false\n },\n active_contributores: transformed.ActiveContri,\n active_reader: transformed.ActiveReader,\n popular_content: transformed.PopularContent\n }));\n setToken();\n\n break;\n //pageview\n case 1:\n reqpayload = General_page_flag\n ? {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n '-27': {\n label: 'Spaces',\n type: 'multilist',\n value: [...Spacevalues]\n },\n '-29': {\n label: 'Source',\n type: 'single',\n value: [Sourcevalue]\n }\n }\n }\n : {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n '-29': {\n label: 'Source',\n type: 'single',\n value: [Sourcevalue]\n }\n }\n };\n //Detect any change in filter values using hash compare\n\n setViewData(prev => ({\n ...prev,\n page_view_table: { data: [], loading: true }\n }));\n\n response = await applyViewFilter(2, reqpayload, JWT);\n\n // console.log('checking responsei2 in filter view', response);\n\n props.setJsmAgentInstalled(\n response.data[5].viewPointData?.jsmAgentInstalled\n );\n\n // props.setJsmAgentInstalled(true)\n\n transformed = FilterTransform(response.data, tab_index);\n setViewData(prev => ({\n ...prev,\n page_view_table: {\n data: transformed.Table,\n userHeaderId: transformed.pageviewTableId,\n loading: false\n }\n }));\n setToken();\n\n break;\n case 2:\n //userview\n reqpayload = General_page_flag\n ? {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n '-27': {\n label: 'Spaces',\n type: 'multilist',\n value: [...Spacevalues]\n },\n '-29': {\n label: 'Source',\n type: 'single',\n value: [Sourcevalue]\n }\n }\n }\n : {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n '-29': {\n label: 'Source',\n type: 'single',\n value: [Sourcevalue]\n }\n }\n };\n //Detect any change in filter values using hash compare\n setViewData(prev => ({\n ...prev,\n user_view_table: { data: [], loading: true }\n }));\n\n response = await applyViewFilter(3, reqpayload, JWT);\n // console.log('checking responsei2 in filter view', response);\n\n props.setJsmAgentInstalled(\n response.data[6].viewPointData?.jsmAgentInstalled\n );\n\n // props.setJsmAgentInstalled(true)\n\n // Check the conditions and update showDataFlag\n\n transformed = FilterTransform(response.data, tab_index);\n\n setViewData(prev => ({\n ...prev,\n user_view_table: {\n data: transformed.UserTable,\n userHeaderId: transformed.UserTableId,\n loading: false\n }\n }));\n\n setToken();\n\n break;\n default:\n break;\n }\n };\n const getInitialSettings = async () => {\n let response;\n if (process.env.NODE_ENV === 'production') {\n response = await getViewFilter(1, JWT);\n } else {\n response = mockGeneralgetdata;\n }\n // console.log(\n // 'getInitialsettings in useeffect',\n // response,\n // response.data.selected?.['-29']?.value[0]\n // );\n setFilterData(prev => ({\n ...prev,\n display_value: response.data.selected?.['-28']?.value[0],\n content_value: response.data.selected?.['-26']?.value[0],\n space_value: response.data.selected['-27']\n ? [...response.data.selected?.['-27']?.value]\n : [],\n source_value: response.data.selected?.['-29']?.value[0],\n group_by_value: response.data.selected?.['-3']?.value[0]\n }));\n if (response.data.config['-27']) {\n setViewData(prev => ({\n ...prev,\n spaces_list: [...response.data.config?.['-27']?.value]\n }));\n }\n setAccountData(prev => ({\n ...prev,\n JWT: response.headers['authorization']\n }));\n };\n useEffect(() => {\n //immediate function for checking the enviorenment and checking the auth methodolgy used\n //check the enivonment\n console.log('inital useeffect for the filter view');\n if (process.env.NODE_ENV === 'production' && isAuthenticated === false) {\n let meta = document.getElementById('jwt');\n //if meta jwt is not present in the index.html\n if (!meta) {\n //AP call for gettig context space key\n window.AP.context.getContext(context => {\n //Ap call for geting jwt token\n window.AP.context.getToken(async token => {\n //API for auth\n if (context.confluence) {\n let res = await axiosInstance.post(\n `/authorize?jwt=${token}&spaceKey=${context.confluence.space.key}&lic=active`\n );\n // console.log('Successful token req', token, res, context);\n setJWT(res.headers.authorization);\n } else {\n // console.error('Failed Sending jwt got window api call', err, context);\n let res = await axiosInstance.post(\n `/authorize?jwt=${token}&spaceKey=&lic=active`\n );\n setJWT(res.headers.authorization);\n setViewData(prev => ({\n ...prev,\n space_setting: true\n }));\n }\n });\n });\n } //if meta jwt is present\n else {\n let jwt = meta.content;\n setJWT(jwt);\n }\n //dev instance\n }\n }, []);\n\n useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n console.log('getinitalview call');\n if (isAuthenticated && props.firstLoadFlag?.current) {\n getInitialSettings();\n props.firstLoadFlag.current = false;\n }\n } else {\n if (props.firstLoadFlag?.current) {\n getInitialSettings();\n props.firstLoadFlag.current = false;\n }\n }\n }, [isAuthenticated]);\n useEffect(() => {\n // if (isAuthenticated) {\n // applyFilters(Tab_index);\n // }\n if (process.env.NODE_ENV === 'production') {\n if (isAuthenticated) {\n applyFilters(Tab_index);\n }\n } else {\n applyFilters(Tab_index);\n }\n }, [\n Contentvalue,\n Displayvalue,\n Groupbyvalue,\n StartDate,\n EndDate,\n Spacevalues,\n Sourcevalue\n ]);\n\n //Change Functions for filter values\n const changeStartDate = value => {\n //compare the startdate and end date for validation\n\n let comparedate = new Date(EndDate);\n let currentdate = new Date(value);\n if (currentdate.getTime() < comparedate.getTime()) {\n setFilterData(prev => ({\n ...prev,\n start_date: value,\n save_flag: true\n }));\n setValidateDate(false);\n } else {\n setValidateDate(true);\n }\n };\n\n const changeEndDate = value => {\n //compare the startdate and end date for validation\n let comparedate = new Date(StartDate);\n let currentdate = new Date(value);\n if (currentdate.getTime() > comparedate.getTime()) {\n setFilterData(prev => ({\n ...prev,\n end_date: value,\n save_flag: true\n }));\n setValidateDate(false);\n } else {\n setValidateDate(true);\n }\n };\n\n const changeContent = value =>\n setFilterData(prev => ({\n ...prev,\n content_value: value,\n save_flag: true\n }));\n\n const changeSource = value =>\n setFilterData(prev => ({\n ...prev,\n source_value: value,\n save_flag: true\n }));\n\n const changeGroupBy = value =>\n setFilterData(prev => ({\n ...prev,\n group_by_value: value,\n save_flag: true\n }));\n\n const changeDisplay = value =>\n setFilterData(prev => ({\n ...prev,\n display_value: value,\n save_flag: true\n }));\n\n const optionsconverter = values => {\n let structuresvalues = values.map((item, i) => {\n return {\n id: i,\n value: item,\n label: item,\n group: ''\n };\n });\n return structuresvalues;\n };\n const onSpaceChange = values => {\n // console.log(\"slecet component values\", values)\n let selectedspaces = values.map(elem => {\n return elem.value;\n });\n setFilterData(prev => ({\n ...prev,\n space_value: [...selectedspaces],\n save_flag: true\n }));\n };\n const onSaveClick = async values => {\n console.log('filter data for saving is', filterData);\n let filtertopost = {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [filterData.content_value]\n },\n [DisplayCode]: {\n label: 'Display',\n type: 'single',\n value: [filterData.display_value]\n },\n [GroupbyCode]: {\n label: 'Group By',\n type: 'single',\n value: [filterData.group_by_value]\n },\n '-27': {\n label: 'Spaces',\n type: 'multilist',\n value: [...Spacevalues]\n },\n '-29': {\n label: 'Source',\n type: 'single',\n value: [filterData.source_value]\n }\n }\n };\n let res = saveViewFilter(filtertopost, JWT);\n // console.log(\"result from api\", res);\n setFilterData(prev => ({ ...prev, save_flag: false }));\n };\n\n return (\n \n
\n {General_page_flag && (\n \n
Spaces
\n
\n \n
\n
\n )}\n
DateRange
\n
\n changeStartDate(new_Date)}\n // appearance=\"subtle\"\n />\n
\n
-
\n
\n changeEndDate(new_Date)}\n />\n
\n\n
\n

Content

\n
\n \n \n {ContentArray.map(item => (\n changeContent(item)}\n >\n {item}\n \n ))}\n \n \n
\n
\n
\n

Source

\n
\n \n \n {SourceArray.map(item => (\n changeSource(item)}\n style={{ color: token('color.text') }}\n >\n {item}\n \n ))}\n \n \n
\n
\n
\n

Groupby

\n
\n \n \n {GroupbyArray.map(item => (\n changeGroupBy(item)}\n >\n {item}\n \n ))}\n \n \n
\n
\n
\n

Display

\n
\n \n \n {DisplayArray.map(item => (\n changeDisplay(item)}\n >\n {item}\n \n ))}\n \n \n
\n
\n {General_page_flag && SaveFlag && (\n
\n
\n \n
\n
\n )}\n \n
\n );\n}\n\nexport default Filterview;\n","import React from 'react';\nimport Avatar from '@atlaskit/avatar';\nimport Button from '@atlaskit/button';\nimport moment from 'moment';\nimport { timeFormat, timeParse } from 'd3-time-format';\nimport { token } from '@atlaskit/tokens';\n//table syntax creation for pageview table\nexport const createPagetableSyntax = (\n values,\n buttonClick,\n userDetails,\n userHeaderId,\n Sourcevalue\n) => {\n let tablearray = [];\n values.map(item => {\n let id = item[1];\n const displayName = userDetails[id]?.displayName;\n if (Sourcevalue === 'Confluence')\n tablearray.push({\n cells: [\n {\n key: item[0],\n content: item[0],\n isSortable: true\n },\n {\n key: item[1],\n content: displayName,\n isSortable: true\n },\n {\n key: item[2],\n content: item[2] ? moment(item[2]).fromNow() : null,\n isSortable: true\n },\n {\n key: item[3],\n content: item[3] ? moment(item[3]).fromNow() : null,\n isSortable: true\n },\n {\n key: item[4],\n content: item[4] ? moment(item[4]).fromNow() : null,\n isSortable: true\n },\n {\n key: item[5],\n content: (\n \n )\n },\n {\n key: item[6],\n content: (\n \n )\n }\n ],\n key: item[7]\n });\n else if (Sourcevalue === 'JSM Customer Portal')\n tablearray.push({\n cells: [\n {\n key: item[0],\n content: item[0],\n isSortable: true\n },\n {\n key: item[1],\n content: displayName,\n isSortable: true\n },\n {\n key: item[3],\n content: item[3] ? moment(item[3]).fromNow() : null,\n isSortable: true\n },\n {\n key: item[7],\n content: (\n \n )\n },\n {\n key: item[4],\n content: (\n \n )\n },\n {\n key: item[5],\n content: (\n \n )\n }\n ],\n key: item[6]\n });\n });\n return tablearray;\n};\n//table syntax creation for pageview dialog table\nexport const createPageDialogSyntax = (\n values,\n userDetails,\n userHeaderId,\n Sourcevalue,\n baseURL\n) => {\n let tablearray = [];\n values.map(item => {\n let id = item[userHeaderId];\n if (Sourcevalue === 'Confluence') {\n tablearray.push({\n cells: [\n {\n key: item[1],\n content: (\n
\n \n \n {userDetails[id]?.displayName}\n \n
\n ),\n isSortable: true\n },\n {\n key: item[2],\n content: item[2] ? (\n
\n
\n
\n {moment(item[2]).format('DD/MM/YYYY')}\n
\n {moment(item[2]).fromNow()}\n
\n ) : null\n }\n ],\n key: item[0]\n });\n }\n if (Sourcevalue === 'JSM Customer Portal') {\n tablearray.push({\n cells: [\n {\n key: item[1],\n content: (\n
\n \n {item[3]}\n
\n ),\n isSortable: true\n },\n {\n key: item[2],\n content: item[2] ? (\n
\n
\n
\n {moment(item[2]).format('DD/MM/YYYY')}\n
\n {moment(item[2]).fromNow()}\n
\n ) : null\n },\n {\n key: item[5],\n content:

{item[5]}

,\n isSortable: true\n },\n {\n key: item[6],\n content: (\n \n {item[6]}\n \n ),\n isSortable: true\n }\n ],\n key: item[0]\n });\n }\n });\n return tablearray;\n};\n//table syntax creation for user table\nexport const createUserTableSyntax = (\n values,\n buttonClick,\n userDetails,\n userHeaderId,\n Sourcevalue\n) => {\n let tablearray = [];\n values.map(item => {\n let id = item[userHeaderId];\n if (Sourcevalue === 'Confluence') {\n tablearray.push({\n cells: [\n {\n key: item[2],\n content: (\n
\n \n \n {userDetails[id]?.displayName}\n \n
\n ),\n isSortable: true\n },\n {\n key: item[3],\n content: (\n \n ),\n isSortable: true\n },\n {\n key: item[4],\n content: (\n \n ),\n isSortable: true\n },\n {\n key: item[5],\n content: (\n \n ),\n isSortable: true\n }\n ],\n\n key: item[0]\n });\n } else if (Sourcevalue === 'JSM Customer Portal') {\n tablearray.push({\n cells: [\n {\n key: item[2],\n content: (\n
\n \n {item[4]}\n
\n ),\n isSortable: true\n },\n {\n key: item[3],\n content: (\n \n ),\n isSortable: true\n },\n {\n key: item[5],\n content: (\n \n ),\n isSortable: true\n }\n ],\n\n key: item[0]\n });\n }\n });\n\n return tablearray;\n};\n//table synatsx creation foe user dialog table\n//
{moment(item[1]).format('DD/MM/YYYY')}
\nexport const createUserdialogSyntax = (values, Sourcevalue, baseURL, colId) => {\n let tablearray = [];\n values.map(item => {\n // console.log(\"tiem in dev\", item);\n if (Sourcevalue === 'Confluence') {\n tablearray.push({\n cells: [\n { key: item[0], content: item[0] },\n {\n key: item[1],\n content: item[1] ? (\n
\n
\n
\n {moment(item[1]).format('DD/MM/YYYY')}\n
\n {moment(item[1]).fromNow()}\n
\n ) : null\n }\n ],\n key: item[1]\n });\n }\n if (Sourcevalue === 'JSM Customer Portal' && colId === 5) {\n tablearray.push({\n cells: [\n { key: item[0], content: item[0] },\n {\n key: item[1],\n content: item[1] ? (\n
\n
\n
\n {moment(item[1]).format('DD/MM/YYYY')}\n
\n {moment(item[1]).fromNow()}\n
\n ) : null\n },\n {\n key: item[3],\n content:

{item[3]}

,\n isSortable: true\n },\n {\n key: item[4],\n content: (\n \n {item[4]}\n \n ),\n isSortable: true\n }\n ],\n key: item[0]\n });\n }\n if (\n Sourcevalue === 'JSM Customer Portal' &&\n colId === 7 &&\n item.length === 4\n ) {\n tablearray.push({\n cells: [\n { key: item[0], content: item[0] },\n {\n key: item[2],\n content:

{item[2]}

,\n isSortable: true\n },\n {\n key: item[3],\n content: (\n \n {item[3]}\n \n ),\n isSortable: true\n }\n ],\n key: item[0]\n });\n }\n });\n return tablearray;\n};\n\n//chartplus syntax creation\nexport const GeneralChartSyntax = (data, granularity) => {\n //transform the raw data into chartplus syntax\n // console.log('In General chart syntax raw data is', data);\n let monthFormat = timeFormat('%Y-%m');\n let weekFormat = timeFormat('%Y-%W');\n let dayFormat = timeFormat('%Y-%m-%d');\n let monthReformat = timeParse('%Y-%m');\n let weekReformat = timeParse('%Y-%W');\n let tmpFormat, tmpReformat;\n let tmpXaxis = {};\n\n if (granularity === 'Month') {\n tmpFormat = monthFormat;\n tmpReformat = monthReformat;\n } else if (granularity === 'Week') {\n tmpFormat = weekFormat;\n tmpReformat = weekReformat;\n }\n\n let Series = [];\n if (granularity === 'Day') {\n tmpXaxis = {\n type: 'date',\n startDate: data.keys[0],\n endDate: data.keys[1]\n };\n Series = data.legends.map(legend => {\n let filtereddata = data.data.filter(filteritem => {\n if (legend in filteritem.values) return filteritem;\n });\n let formatteddata = filtereddata.map(item => {\n return { x: item.key, y: Math.trunc(item.values[legend]) };\n });\n let color = 'black';\n if (legend === 'created') color = 'green';\n else if (legend === 'updated') color = 'orange';\n else if (legend === 'deleted') color = 'red';\n else if (legend === 'viewed') color = 'blue';\n return { name: legend, color: color, data: formatteddata };\n });\n } else {\n tmpXaxis = {\n type: 'date',\n startDate: dayFormat(tmpReformat(data.keys[0])),\n endDate: dayFormat(tmpReformat(data.keys[1]))\n };\n Series = data.legends.map(legend => {\n let filtereddata = data.data.filter(filteritem => {\n if (legend in filteritem.values) return filteritem;\n });\n let formatteddata = filtereddata.map(item => {\n // console.log(\n // 'Inside tablesyntax for week/month',\n // dayFormat(tmpReformat(item.key)),\n // item.key\n // );\n\n return {\n x: dayFormat(tmpReformat(item.key)),\n y: Math.trunc(item.values[legend])\n };\n });\n let color = 'black';\n if (legend === 'created') color = 'green';\n else if (legend === 'updated') color = 'orange';\n else if (legend === 'deleted') color = 'red';\n else if (legend === 'viewed') color = 'blue';\n return { name: legend, color: color, data: formatteddata };\n });\n }\n // console.log('series data in syntax', Series);\n const syntax = {\n container: 'container',\n type: 'line',\n granularity: granularity.toLowerCase(),\n percentage: true,\n stack: true,\n xAxis: { ...tmpXaxis },\n yAxis: {},\n legend: {\n align: 'right-top',\n layout: 'horizontal'\n },\n series: Series,\n tooltip: {\n actions: [\n {\n name: 'dataView',\n icon: 'table-icon',\n color: '#34a7df'\n }\n ]\n }\n };\n return syntax;\n};\nexport const ChartSyntax = data => {\n //tranfrom the raw data into chartplus syntax\n let Series = data.legends.map(legend => {\n let filtereddata = data.data.filter(filteritem => {\n if (legend in filteritem.values) return filteritem;\n });\n let formatteddata = filtereddata.map(item => {\n return { x: item.key, y: Math.trunc(item.values[legend]) };\n });\n let color = 'black';\n if (legend === 'created') color = 'green';\n else if (legend === 'updated') color = 'orange';\n else if (legend === 'deleted') color = 'red';\n else if (legend === 'viewed') color = 'blue';\n return { name: legend, color: color, data: formatteddata };\n });\n // console.log('series data in syntax', Series);\n const syntax = {\n container: 'container',\n type: 'line',\n percentage: true,\n stack: true,\n xAxis: {\n type: 'date',\n startDate: data.keys[0],\n endDate: data.keys[1]\n },\n yAxis: {},\n legend: {\n align: 'right-top',\n layout: 'horizontal'\n },\n series: Series,\n tooltip: {}\n };\n return syntax;\n};\n","import React, { useEffect, useRef } from 'react';\nimport chartPlus from '../Chartplus/chartPlus';\nimport { ChartSyntax, GeneralChartSyntax } from '../../Functional/TableSyntax';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\nimport FilterAtom from '../../Recoil/Atoms/FilterAtom';\nimport { useState } from 'react';\nimport { timeFormat, timeParse } from 'd3-time-format';\nimport { token } from '@atlaskit/tokens';\n\n//d3 blackbox component\nexport const Chartplusbox = ({ openDrilldownView }) => {\n const [viewData] = useRecoilState(ViewDataAtom);\n const [filterData] = useRecoilState(FilterAtom);\n const [chartInstance, setChart] = useState();\n const TimelineChart = viewData.timeline_chart;\n // console.log('in chartplusbox checking the viewatom', viewData);\n // const value = viewData.space_setting? GeneralChartSyntax(TimelineChart.data): ChartSyntax(TimelineChart.data);\n const Groupbyvalue = filterData.group_by_value;\n const value = GeneralChartSyntax(TimelineChart.data, Groupbyvalue);\n const chart_flag = viewData.chart_flag;\n const containerRef = useRef();\n let monthFormat = timeFormat('%Y-%m');\n let weekFormat = timeFormat('%Y-%W');\n\n useEffect(() => {\n let svg = document.getElementById('container');\n if (svg.childElementCount === 0) {\n let chart = chartPlus(value, svg);\n setChart(chart);\n } else {\n svg.innerHTML = '';\n chartPlus(value, svg);\n }\n }, [chart_flag]);\n\n useEffect(() => {\n const containerNode = containerRef.current;\n const handleTooltipClose = e => {\n openDrilldownView(prev => {\n return { ...prev, isactive: false };\n });\n };\n // Add event listener\n containerNode.addEventListener('tooltip-closed', handleTooltipClose);\n // Remove event listener on cleanup\n return () =>\n containerNode.removeEventListener('tooltip-closed', handleTooltipClose);\n }, []);\n useEffect(() => {\n const containerNode = containerRef.current;\n const handleDataView = e => {\n const dataViewArgs = {};\n const granularity = 'test';\n if (granularity) dataViewArgs['granularity'] = granularity;\n let intXValue = e.data.category;\n // console.log('in chartplus box event passing the date as', intXValue);\n let parts = intXValue.split('-');\n if (Groupbyvalue === 'Month') {\n // intXValue = monthFormat(new Date(parts[0], parts[1] - 1, parts[2]));\n intXValue = monthFormat(Date.parse(intXValue));\n }\n if (Groupbyvalue === 'Week') {\n // intXValue = weekFormat(new Date(parts[0], parts[1] - 1, parts[2]))\n intXValue = weekFormat(Date.parse(intXValue));\n }\n\n openDrilldownView(prev => {\n return {\n ...prev,\n granularity: granularity,\n xValue: intXValue,\n yValue: e.data.legend,\n isactive: true\n };\n });\n };\n\n // Add event listener\n containerNode.addEventListener('dataView', handleDataView);\n containerNode.addEventListener('Cell-Explorer', handleDataView);\n // Remove event listener on cleanup\n return () => {\n containerNode.removeEventListener('dataView', handleDataView);\n containerNode.removeEventListener('Cell-Explorer', handleDataView);\n };\n }, []);\n\n useEffect(() => {\n return () => {\n if (chartInstance) chartInstance.destroy();\n };\n }, [chartInstance]);\n\n return (\n \n );\n};\n","import { saveAs } from 'file-saver';\nimport moment from 'moment';\n\nexport async function FullDataviewExcelsheet(\n rows,\n header,\n widgetName,\n callback = () => {}\n) {\n //creating an Excel Workbook\n import('exceljs/dist/exceljs.bare.min.js' /*webpackPrefetch: true */).then(\n exceljs => {\n const workbook = new exceljs.Workbook();\n workbook.Creator = 'Insights';\n const worksheet = workbook.addWorksheet('Full Data view');\n\n let columns = header.map(item => {\n return { header: item.content, key: item.key, width: 30.52 };\n });\n\n //adding Excel columns\n worksheet.columns = columns;\n\n for (const item in rows) {\n let pass = rows[item].cells.map(inneritem => {\n return inneritem.content;\n });\n worksheet.addRow(pass); //adding rows to excel sheet\n }\n\n workbook.xlsx.writeBuffer().then(buf => {\n saveAs(\n new Blob([buf]),\n `${widgetName.replace(/ /g, '-')}_${moment().format(\n 'MMM-DD-YYYY_hh-mm-A'\n )}.xlsx`\n );\n }); //downloading the file\n callback();\n }\n );\n}\n","import axiosInstance from './axiosInstance';\n\nconst dataViewPath = '/widget/dataview/drillDown';\n\nexport async function fetchDataView(reqQuery, reqBody, JWT) {\n try {\n if (process.env.NODE_ENV === 'development') {\n let id = new URL(`http://test?${reqQuery}`).searchParams.get('id');\n const response = await axiosInstance.get(\n id === '1'\n ? '/app/mock/dataviewdialog.json'\n : '/app/mock/dataviewuserdialog.json'\n );\n return {\n success: true,\n ...response\n };\n }\n const response = await axiosInstance.post(\n `${dataViewPath}?${reqQuery}`,\n reqBody,\n {\n headers: {\n authorization: JWT\n }\n }\n );\n return {\n success: true,\n ...response\n };\n } catch (err) {\n console.error('Error while calling data view drilldown', err);\n return {\n success: false\n };\n }\n}\n\nexport async function fecthTheme() {\n try {\n window.AP.theming?.initializeTheming();\n } catch (err) {\n console.error('Error while fetching theme', err);\n }\n}\n","import userMocks from '../Mock/getUserDataMock.json';\n\n// GET AP call for user details\nexport async function getUserDetails(userId) {\n if (process.env.NODE_ENV === 'development') {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(userMocks.data[userId]);\n }, 1000);\n });\n } else {\n const resp = await window.AP.request(`/rest/api/user?accountId=${userId}`);\n const data = await JSON.parse(resp.body);\n return data;\n }\n}\n","import React, {\n Fragment,\n useEffect,\n Suspense,\n useState,\n useCallback\n} from 'react';\nimport {\n ContentCode,\n DisplayCode,\n DaterangeCode,\n GroupbyCode\n} from '../../Functional/Strings';\nimport DynamicTable from '@atlaskit/dynamic-table';\nimport AccountAtom from '../../Recoil/Atoms/AccountAtom';\nimport FilterAtom from '../../Recoil/Atoms/FilterAtom';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\nimport { useRecoilState } from 'recoil';\nimport ArrowDownIcon from '@atlaskit/icon/glyph/arrow-down';\nimport { FullDataviewExcelsheet } from '../../Functional/Excelsheetconverter';\nimport { fetchDataView } from '../../API/dataViewApis';\nimport Avatar from '@atlaskit/avatar';\n// import AvatarItem from \"@atlaskit/avatar/dist/cjs/components/AvatarItem\";\nimport moment from 'moment';\nimport CrossCircleIcon from '@atlaskit/icon/glyph/cross-circle';\nimport Textfield from '@atlaskit/textfield';\nimport SearchIcon from '@atlaskit/icon/glyph/editor/search';\nimport Button from '@atlaskit/button';\nimport UserDetailsAtom from '../../Recoil/Atoms/UserDetailsAtom';\nimport { getUserDetails } from '../ApCalls';\n\nfunction FullDataView({ data }) {\n const [accountData, setAccountData] = useRecoilState(AccountAtom);\n const [filterData, setFilterData] = useRecoilState(FilterAtom);\n const [viewData, setViewData] = useRecoilState(ViewDataAtom);\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n\n const [searchkeyword, setSearchKeyword] = useState('');\n const [tableData, setTableData] = useState({\n loading: true,\n headers: [],\n rows: [],\n userHeaderId: '',\n users: []\n });\n\n const JWT = accountData.JWT;\n const StartDate = filterData.start_date;\n const EndDate = filterData.end_date;\n const Contentvalue = filterData.content_value;\n const Displayvalue = filterData.display_value;\n const Groupbyvalue = filterData.group_by_value;\n const General_page_flag = viewData.space_setting;\n const Spacevalues = filterData.space_value;\n const Sourcevalue = filterData.source_value;\n async function chartDrillDownDataFetch() {\n let response;\n let reqQuery = `id=1&rowID=${data.xValue}&columnID=${data.yValue}`;\n let reqpayload = General_page_flag\n ? {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n [DisplayCode]: {\n label: 'Display',\n type: 'single',\n value: [Displayvalue]\n },\n [GroupbyCode]: {\n label: 'Group By',\n type: 'single',\n value: [Groupbyvalue]\n },\n ['-27']: {\n label: 'Spaces',\n type: 'multilist',\n value: [...Spacevalues]\n },\n\n '-29': {\n label: 'Source',\n type: 'single',\n value: [Sourcevalue]\n }\n }\n }\n : {\n selected: {\n [DaterangeCode]: {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n [ContentCode]: {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n [DisplayCode]: {\n label: 'Display',\n type: 'single',\n value: [Displayvalue]\n },\n [GroupbyCode]: {\n label: 'Group By',\n type: 'single',\n value: [Groupbyvalue]\n },\n\n '-29': {\n label: 'Source',\n type: 'single',\n value: [Sourcevalue]\n }\n }\n };\n response = await fetchDataView(reqQuery, reqpayload, JWT);\n // console.log('chartdrilldown fetch in fulldataview useeffect', response);\n let id = '';\n response.data.header.forEach(head => {\n if (head.type === 'user') {\n id = head.id;\n }\n });\n\n let array = [];\n response.data.data.forEach(data => {\n let flag = true;\n array.forEach(e => {\n if (e === data[id]) {\n flag = false;\n }\n });\n if (flag) {\n array.push(data[id]);\n }\n });\n\n setTableData(prev => {\n return {\n ...prev,\n headers: [...response.data.header],\n rows: [...response.data.data],\n loading: false,\n userHeaderId: id,\n users: [...array]\n };\n });\n\n setAccountData(prev => ({\n ...prev,\n JWT: response.headers['authorization']\n }));\n }\n useEffect(() => {\n chartDrillDownDataFetch();\n }, []);\n\n useEffect(() => {\n tableData.users.forEach(user => {\n if (user !== '0' && Sourcevalue !== 'JSM Customer Portal') {\n fetchUserDetails(user);\n } else if (user === '0') {\n setUserDetails(prev => ({\n [user]: {\n imageURL: '',\n displayName: 'Anonymous'\n },\n ...prev\n }));\n }\n });\n }, [tableData.loading]);\n\n async function fetchUserDetails(userId) {\n const resp = await getUserDetails(userId);\n const baseURL = resp?._links?.base.slice(0, -5);\n const pathURL = resp?.profilePicture?.path;\n const imageURL = baseURL + pathURL;\n const displayName = resp?.displayName;\n // userDetails[userId] = imageURL\n setUserDetails(prev => ({\n [userId]: {\n imageURL: imageURL,\n displayName: displayName\n },\n ...prev\n }));\n }\n\n const TableRowFormatting = (heads, rs) => {\n let theaders = [];\n heads.forEach((elem, i) => {\n if (elem.id !== '2') {\n theaders.push({\n key: elem.id,\n content: elem.label,\n isSortable: true,\n setColor: false,\n type: 'string'\n });\n }\n });\n let trows = [];\n trows = rs.map((elem, i) => {\n let id = elem[tableData.userHeaderId];\n let cell = theaders.map((item, j) => {\n if (item.key === '3') {\n return {\n key: elem[item.key],\n content: (\n
\n \n \n {userDetails[id]?.displayName}\n \n
\n )\n };\n }\n if (item.key === '4') {\n return {\n key: elem[item.key]\n ? // ? moment(elem[item.key]).format('DD/MM/YYYY, h:mm:ss a')\n moment(elem[item.key]).fromNow()\n : '',\n content: elem[item.key] ? (\n
\n
\n
\n {moment(item[4]).format('DD/MM/YYYY')}\n
\n {moment(item[4]).fromNow()}\n
\n ) : (\n ''\n )\n };\n }\n return {\n key: elem[item.key],\n content: elem[item.key]\n };\n });\n return { cells: cell };\n });\n return { header: theaders, rows: trows };\n };\n const TableRowFormattingforDownload = (heads, rs) => {\n let theaders = [];\n heads.forEach((elem, i) => {\n if (elem.id !== '2') {\n theaders.push({\n key: elem.id,\n content: elem.label,\n isSortable: false,\n setColor: false,\n type: 'string'\n });\n }\n });\n let trows = [];\n // console.log('theader is', theaders);\n trows = rs.map((elem, i) => {\n let id = elem[tableData.userHeaderId];\n let displayName = userDetails[id]?.displayName;\n let cell = theaders.map((item, j) => {\n if (item.key === '3') {\n return {\n key: displayName,\n content: (\n
\n \n \n {userDetails[id]?.displayName}\n \n
\n )\n };\n }\n if (item.key === '4') {\n return {\n key: elem[item.key]\n ? moment(elem[item.key]).format('DD/MM/YYYY, h:mm:ss a')\n : '',\n content: elem[item.key]\n ? moment(elem[item.key]).format('DD/MM/YYYY, h:mm:ss a')\n : ''\n };\n }\n return {\n key: elem[item.key],\n content: elem[item.key]\n };\n });\n return { cells: cell };\n });\n return { header: theaders, rows: trows };\n };\n const Filterfunction = (obj, filterValue) => {\n let raw_array = [];\n let regex = new RegExp(filterValue, 'i');\n raw_array = [];\n // console.log('object is', obj);\n obj.forEach((item, val) => {\n if (\n item['0']?.match(regex) ||\n item?.['1'].match(regex) ||\n item?.['3'].match(regex)\n ) {\n raw_array.push(item);\n }\n });\n return raw_array;\n };\n let FilteredTablerows = Filterfunction(tableData.rows, searchkeyword);\n let formatteddata = TableRowFormatting(tableData.headers, FilteredTablerows);\n const clearSearch = () => setSearchKeyword('');\n\n return (\n <>\n
\n \n \n {searchkeyword.trim() && (\n \n )}\n
\n }\n elemBeforeInput={\n
\n \n
\n }\n value={searchkeyword}\n onChange={e => setSearchKeyword(e.target.value)}\n />\n {\n let temp = TableRowFormattingforDownload(\n tableData.headers,\n FilteredTablerows\n );\n let formattedrows = temp.rows.map(elem => {\n let cell = elem.cells.map(item => {\n return {\n key: item.key,\n content: item.key\n };\n });\n return { cells: cell };\n });\n FullDataviewExcelsheet(\n formattedrows,\n formatteddata.header,\n 'TimeLine'\n );\n }}\n appearance=\"default\"\n iconBefore={}\n >\n \n No matching records found}\n />\n \n \n );\n}\n\nexport default FullDataView;\n","import React, { Suspense, useState, useCallback, useEffect } from 'react';\nimport { MostReaderTable } from './MostReaderTable';\nimport { MostPopularContent } from './MostPopularContent';\nimport { MostActiveContibutor } from './MostActiveContributor';\nimport FilterView from '../FilterComponent/FilterView';\nimport styles from './Overview.module.css';\nimport Spinner from '@atlaskit/spinner';\nimport ErrorBoundary from '../ErrorHandling/ErrorBoundary';\nimport { Chartplusbox } from '../Chartplus/Chartplusbox';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\nimport { FullDataviewExcelsheet } from '../../Functional/Excelsheetconverter';\nimport FullDataView from './FullDataView';\nimport Button from '@atlaskit/button';\nimport MoreIcon from '@atlaskit/icon/glyph/more';\nimport Modal, {\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalTitle,\n ModalTransition\n} from '@atlaskit/modal-dialog';\nimport DropdownMenu, {\n DropdownItem,\n DropdownItemGroup\n} from '@atlaskit/dropdown-menu';\nimport CrossIcon from '@atlaskit/icon/glyph/cross';\nimport { N500 } from '@atlaskit/theme/colors';\nimport MediaServicesPdfIcon from '@atlaskit/icon/glyph/media-services/pdf';\nimport { AnalyzeWidgetWrapper } from '../../Styles/wrappers';\nimport { getUserDetails } from '../ApCalls';\nimport UserDetailsAtom from '../../Recoil/Atoms/UserDetailsAtom';\nimport { token } from '@atlaskit/tokens';\n\n//const Line = React.lazy(() => import('./Chart/Line'));\n\nconst Overview = props => {\n const [viewData] = useRecoilState(ViewDataAtom);\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n const [drillDownData, setDrillDownData] = useState({\n xValue: '',\n yValue: '',\n granularity: '',\n isactive: false\n });\n\n const TimelineChart = viewData.timeline_chart;\n const PopularContent = viewData.popular_content;\n const ActiveContributores = viewData.active_contributores;\n const ActiveReader = viewData.active_reader;\n const isOpen = drillDownData.isactive;\n // const [users,setUsers] = useState([])\n let users = [];\n\n useEffect(() => {\n users.forEach(user => {\n if (user !== '0') {\n fetchUserDetails(user);\n } else if (user === '0') {\n setUserDetails(prev => ({\n [user]: {\n imageURL: '',\n displayName: 'Anonymous'\n },\n ...prev\n }));\n }\n });\n }, [ActiveReader.loading, ActiveContributores.loading]);\n\n ActiveReader.data.forEach(item => {\n users.push(item[ActiveReader.userHeaderId]);\n // setUsers(prev=>[...prev,item['0']])\n });\n\n ActiveContributores.data.forEach(item => {\n let flag = true;\n users.forEach(user => {\n if (user === item[ActiveContributores.userHeaderId]) {\n flag = false;\n }\n });\n if (flag) {\n users.push(item[ActiveContributores.userHeaderId]);\n // setUsers(prev=>[...prev,item['0']])\n }\n });\n async function fetchUserDetails(userId) {\n const resp = await getUserDetails(userId);\n const baseURL = resp?._links?.base.slice(0, -5);\n const pathURL = resp?.profilePicture?.path;\n const imageURL = baseURL + pathURL;\n const displayName = resp?.displayName;\n // userDetails[userId] = imageURL\n setUserDetails(prev => ({\n [userId]: {\n imageURL: imageURL,\n displayName: displayName\n },\n ...prev\n }));\n }\n\n function exceldownload() {\n let data = TimelineChart.data;\n let header = [];\n header.push({\n key: 'Datekey',\n content: 'Date',\n isSortable: true,\n setColor: false,\n width: 40\n });\n data.legends.forEach((elem, i) => {\n header.push({\n key: `key${i}`,\n content: elem,\n isSortable: true,\n setColor: false,\n width: 20\n });\n });\n let rows = data.data.map((item, i) => {\n let cell = header.map(elem => {\n if (elem.key === 'Datekey') {\n return {\n key: item.key,\n content: item.key\n };\n } else {\n return {\n key: item.values[elem.content]\n ? item.values[elem.content].split('.')[0]\n : '0' + i,\n content: item.values[elem.content]\n ? item.values[elem.content].split('.')[0]\n : '0'\n };\n }\n });\n return { cells: cell };\n });\n FullDataviewExcelsheet(rows, header, 'TimeLine');\n }\n function Modalclose() {\n setDrillDownData(prev => {\n return { ...prev, isactive: false };\n });\n }\n\n return (\n
\n \n
\n
\n \n Timeline Chart\n \n
\n }}\n triggerType=\"button\"\n >\n \n \n \n
\n \n
\n \n Report\n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n
\n }\n >\n
\n {TimelineChart.loading ? (\n \n \n
\n ) : TimelineChart.data.data.length ? (\n \n \n \n ) : (\n
Empty chart data
\n )}\n \n \n \n {/*
\n \n
*/}\n \n
\n \n {isOpen && (\n \n \n

Full Data View

\n \n
\n \n \n \n \n {/* */}\n {/* */}\n \n
\n )}\n
\n
\n\n
\n
\n
\n {}\n
\n
\n {}\n
\n
\n
\n \n
\n
\n \n );\n};\n\nexport default Overview;\n","import React from 'react';\nimport DynamicTable from '@atlaskit/dynamic-table';\nimport {\n PAGEVIEWTABLEHEADING,\n PAGEVIEWJSMTABLEHEADING\n} from '../../Functional/Strings';\nimport { useRecoilState } from 'recoil';\nimport FilterAtom from '../../Recoil/Atoms/FilterAtom';\nimport { token } from '@atlaskit/tokens';\n\nexport const PageViewTable = props => {\n const [filterData, setFilterData] = useRecoilState(FilterAtom);\n const Sourcevalue = filterData.source_value;\n return (\n
\n \n No matching records found\n \n ) : (\n
No page views registered with the specified filter.
\n )\n }\n />\n
\n );\n};\n","import React from 'react';\nimport Textfield from '@atlaskit/textfield';\nimport DynamicTable from '@atlaskit/dynamic-table';\nimport SearchIcon from '@atlaskit/icon/glyph/editor/search';\nimport Button from '@atlaskit/button';\nimport { dialog_xlsx_array_create } from '../Functional/Download';\nimport ArrowDownIcon from '@atlaskit/icon/glyph/arrow-down';\nimport {\n createUserdialogSyntax,\n createPageDialogSyntax\n} from '../Functional/TableSyntax';\nimport { useRecoilState } from 'recoil';\nimport UserDetailsAtom from '../Recoil/Atoms/UserDetailsAtom';\nimport { token } from '@atlaskit/tokens';\n\nexport const Dialogscreen = props => {\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n\n // console.log('loading', props);\n let DialogTableSyntax;\n //create dialog box based on the tab(pageview or user)\n if (props.id === 1) {\n DialogTableSyntax = createPageDialogSyntax(\n props.rows,\n userDetails,\n props.dialogData.id,\n props.Sourcevalue,\n props.baseURL\n );\n } else {\n DialogTableSyntax = createUserdialogSyntax(\n props.rows,\n props.Sourcevalue,\n props.baseURL,\n props.colId\n );\n }\n //console.log('DATA', DialogTableSyntax, props.rows);\n return (\n
\n \n \n \n
\n }\n defaultValue={props.search}\n onChange={e => props.searchfunction(e.target.value)}\n />\n {\n dialog_xlsx_array_create(\n props.rows,\n props.id,\n props.table.head.cells[1].content,\n userDetails,\n props.dialogData.id\n );\n }}\n spacing=\"compact\"\n appearance=\"subtle\"\n >\n \n \n \n

\n Users\n

\n \n No matching records found\n \n }\n />\n \n );\n};\n","import { saveAs } from 'file-saver';\nimport moment from 'moment';\n\n//pageview table excel file creation\nexport const pageview_xlsx_array_create = async (raw, userDetails) => {\n ////////////Don't delete the below comment\n //don't remove the below comment section, its for webpack to enable prefetch of excel.js chunk///////////\n const Excel = await import(\n /* webpackPrefetch: true */ 'exceljs/dist/exceljs.bare.min.js'\n );\n ///////////////////\n let xlsxarray = [];\n\n xlsxarray = raw.map(item => {\n let id = item[1];\n const displayName = userDetails[id]?.displayName;\n return {\n Title: item[0],\n Creator: displayName,\n Created: item[2] ? moment(item[2]).format('DD/MM/YYYY, h:mm:ss a') : '',\n Last_Modified: item[3]\n ? moment(item[3]).format('DD/MM/YYYY, h:mm:ss a')\n : '',\n Last_Viewed: item[4]\n ? moment(item[4]).format('DD/MM/YYYY, h:mm:ss a')\n : '',\n User_Viewed: item[5],\n Total_Viewed: item[6]\n };\n });\n\n var workbook = new Excel.Workbook();\n workbook.Creator = 'Insights';\n workbook.properties.date1904 = true;\n var sheet = workbook.addWorksheet('Pageview');\n\n sheet.columns = [\n { header: 'Title', key: 'Title', width: 10 },\n { header: 'Creator', key: 'Creator', width: 32 },\n { header: 'Created', key: 'Created', width: 32 },\n { header: 'Last_Modified', key: 'Last_Modified', width: 32 },\n { header: 'Last_Viewed', key: 'Last_Viewed', width: 32 },\n { header: 'User_Viewed', key: 'User_Viewed', width: 32 },\n { header: 'Total_Viewed', key: 'Total_Viewed', width: 32 }\n ];\n\n sheet.addRows(xlsxarray);\n\n workbook.xlsx.writeBuffer().then(buf => {\n saveAs(new Blob([buf]), `Pageview.xlsx`);\n // other stuffs\n });\n};\n\n//user table excel file creation\nexport const user_xlsx_array_create = async (raw, userDetails) => {\n ////////////Don't delete the below comment\n //don't remove the below comment section, its for webpack to enable prefetch of excel.js chunk/////////////\n const Excel = await import(\n /* webpackPrefetch: true */ 'exceljs/dist/exceljs.bare.min.js'\n );\n ////////////\n let xlsxarray = [];\n\n xlsxarray = raw.map(item => {\n let id = item[0];\n const displayName = userDetails[id]?.displayName;\n return {\n Name: displayName,\n Created: item[3],\n Updated: item[4],\n Viewed: item[5]\n };\n });\n\n var workbook = new Excel.Workbook();\n workbook.Creator = 'Insights';\n workbook.properties.date1904 = true;\n var sheet = workbook.addWorksheet('Pageview');\n\n sheet.columns = [\n { header: 'Name', key: 'Name', width: 10 },\n { header: 'Created', key: 'Created', width: 32 },\n { header: 'Updated', key: 'Updated', width: 32 },\n { header: 'Viewed', key: 'Viewed', width: 32 }\n ];\n\n sheet.addRows(xlsxarray);\n\n workbook.xlsx.writeBuffer().then(buf => {\n saveAs(new Blob([buf]), `Pageview.xlsx`);\n // other stuffs\n });\n};\n\n//dialog box excel file creation\nexport const dialog_xlsx_array_create = async (\n raw,\n head,\n headervalue,\n userDetails,\n userHeaderId\n) => {\n ////////////Don't delete the below comment\n //don't remove the below comment section, its for webpack to enable prefetch of excel.js chunk/////////////\n const Excel = await import(\n /* webpackPrefetch: true */ 'exceljs/dist/exceljs.bare.min.js'\n );\n ///////////////////\n let xlsxarray = [];\n var workbook = new Excel.Workbook();\n workbook.Creator = 'Insights';\n workbook.properties.date1904 = true;\n var sheet = workbook.addWorksheet('Pageview');\n if (head === 1) {\n sheet.columns = [\n { header: 'User', key: 'User', width: 10 },\n { header: headervalue, key: headervalue, width: 32 }\n ];\n // console.log('raw', raw);\n xlsxarray = raw.map(item => {\n let id = item[userHeaderId];\n const displayName = userDetails[id]?.displayName;\n return {\n User: displayName,\n [headervalue]: moment(item[2]).format('DD/MM/YYYY, h:mm:ss a')\n };\n });\n } else {\n sheet.columns = [\n { header: 'Pages', key: 'Pages', width: 10 },\n { header: headervalue, key: headervalue, width: 32 }\n ];\n // console.log('raw', raw);\n xlsxarray = raw.map(item => {\n return {\n Pages: item[0],\n [headervalue]: moment(item[1]).format('DD/MM/YYYY, h:mm:ss a')\n };\n });\n }\n sheet.addRows(xlsxarray);\n workbook.xlsx.writeBuffer().then(buf => {\n saveAs(new Blob([buf]), `Pageview.xlsx`);\n // other stuffs\n });\n /*let ws;\n let xlsxarray = [];\n if (head === 1) {\n ws = XLSX.utils.json_to_sheet(\n [\n {\n Users: 'Users',\n Viewed: 'Viewed'\n }\n ],\n {\n header: ['Users', 'Viewed'],\n skipHeader: true\n }\n );\n //creating the xlxs array from raw in the format required\n xlsxarray = raw.map(item => {\n return {\n Users: item[1],\n Viewed: item[2]\n };\n });\n console.log('xlxarray', xlsxarray);\n //Creating the Worksheet\n XLSX.utils.sheet_add_json(ws, xlsxarray);\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, 'Users');\n //saving the file\n XLSX.writeFile(wb, 'Analytics.xlsx');\n } else {\n ws = XLSX.utils.json_to_sheet(\n [\n {\n Pages: 'Pages',\n LastViewed: 'LastViewed'\n }\n ],\n {\n header: ['Pages', 'LastViewed'],\n skipHeader: true\n }\n );\n //creating the xlxs array from raw in the format required\n xlsxarray = raw.map(item => {\n return {\n Pages: item[0],\n LastViewed: item[1]\n };\n });\n console.log('xlxarray', xlsxarray);\n //Creating the Worksheet\n XLSX.utils.sheet_add_json(ws, xlsxarray);\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, 'Users');\n //saving the file\n XLSX.writeFile(wb, 'Analytics.xlsx');\n }*/\n //Setting the header\n};\n","import React, { useEffect, useState } from 'react';\nimport Textfield from '@atlaskit/textfield';\nimport { PageViewTable } from './PageviewTable';\nimport Modal, { ModalTransition } from '@atlaskit/modal-dialog';\nimport Button from '@atlaskit/button';\nimport { Dialogscreen } from '../Dialogscreen';\nimport { createPagetableSyntax } from '../../Functional/TableSyntax';\nimport SearchIcon from '@atlaskit/icon/glyph/editor/search';\nimport { pageview_xlsx_array_create } from '../../Functional/Download';\nimport ArrowDownIcon from '@atlaskit/icon/glyph/arrow-down';\nimport {\n PageViewFilterfunction,\n PageViewDialogFilterfunction\n} from '../../Functional/FilterFunctions';\nimport Axios from 'axios';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\nimport AccountAtom from '../../Recoil/Atoms/AccountAtom';\nimport FilterAtom from '../../Recoil/Atoms/FilterAtom';\nimport { fetchDataView } from '../../API/dataViewApis';\nimport CrossCircleIcon from '@atlaskit/icon/glyph/cross-circle';\nimport { getUserDetails } from '../ApCalls';\nimport UserDetailsAtom from '../../Recoil/Atoms/UserDetailsAtom';\nimport jwtDecode from 'jwt-decode';\nimport SectionMessage, {\n SectionMessageAction\n} from '@atlaskit/section-message';\n//import { PageviewDialogtransform } from '../../Functional/Transfrom';\n\nexport const PageviewSearch = props => {\n const [searchkeyword, setSearchKeyword] = useState('');\n const [ModalState, setModalState] = useState('');\n const [DialogSearchKeyword, setDialogSearchKeyword] = useState('');\n const [header, setheader] = useState('');\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n\n const [viewData, setViewData] = useRecoilState(ViewDataAtom);\n const [accountData, setAccountData] = useRecoilState(AccountAtom);\n const [filterData] = useRecoilState(FilterAtom);\n const [showDataFlag, setShowDataFlag] = useState(false);\n const [dialogData, setDialogData] = useState({\n users: [],\n id: ''\n });\n\n const PageDialog = viewData.page_dialog;\n const JWT = accountData.JWT;\n const StartDate = filterData.start_date;\n const EndDate = filterData.end_date;\n const Contentvalue = filterData.content_value;\n const Sourcevalue = filterData.source_value;\n const DialogLoading = viewData.is_dialog_loading;\n\n // useeffect to fetch user details of the users in the dialog modal\n useEffect(() => {\n dialogData.users.forEach(user => {\n if (user !== '0' && Sourcevalue !== 'JSM Customer Portal') {\n fetchUserDetails(user);\n }\n });\n }, [DialogLoading]);\n const decoded = jwtDecode(JWT);\n let jwtBaseUrl = decoded?.baseURL;\n let baseURL = jwtBaseUrl?.slice(0, -5);\n async function fetchUserDetails(userId) {\n const resp = await getUserDetails(userId);\n const baseURL = resp?._links?.base.slice(0, -5);\n const pathURL = resp?.profilePicture?.path;\n const imageURL = baseURL + pathURL;\n const displayName = resp?.displayName;\n setUserDetails(prev => ({\n [userId]: {\n imageURL: imageURL,\n displayName: displayName\n },\n ...prev\n }));\n }\n\n //dialogsearch state setting function\n const dialogSearch = value => {\n setDialogSearchKeyword(value);\n };\n //dialg search function with orginal data and search keyword as parameter\n let dialogFilterTableValue = PageViewDialogFilterfunction(\n PageDialog,\n DialogSearchKeyword,\n userDetails\n );\n //console.log('DRILLDOWN', dialogFilterTableValue);\n //making api request\n const buttonClick = async (value, id) => {\n setViewData(prev => ({\n ...prev,\n is_dialog_loading: true\n }));\n setModalState(1);\n let reqpayload = {\n selected: {\n '-2': {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n '-26': {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n\n '-29': {\n label: 'Source',\n type: 'single',\n value: [Sourcevalue]\n }\n }\n };\n let reqquery = 'columnID=' + id + '&id=5&rowID=' + value;\n const response = await fetchDataView(reqquery, reqpayload, JWT);\n if (response.success) {\n setAccountData(prev => ({\n ...prev,\n is_authenticated: true,\n JWT: response.headers['authorization']\n }));\n\n //let tranfromed = PageviewDialogtransform(res.data.data);\n //Dispatch({type:\"DIALOGHEAD\",payload:{0:id,1:\"Page\"}})\n let headerId = '';\n response.data.header.forEach(header => {\n if (header.type === 'user') {\n headerId = header.id;\n setDialogData(prev => {\n return {\n ...prev,\n id: header.id\n };\n });\n }\n });\n let array = [];\n response.data.data.forEach(data => {\n let flag = true;\n array.forEach(elem => {\n if (elem === data[headerId]) {\n flag = false;\n }\n });\n if (flag) {\n array.push(data[headerId]);\n }\n });\n\n setDialogData(prev => {\n return {\n ...prev,\n users: [...array]\n };\n });\n setViewData(prev => ({\n ...prev,\n page_dialog: response.data.data,\n is_dialog_loading: false\n }));\n\n //different header creation for different dialog box tables\n if (id == 6) {\n setheader({\n head: {\n cells: [\n {\n key: 'USER',\n content: 'User'\n },\n {\n key: 'LAST VIEWED',\n content: 'Last Viewed'\n }\n ]\n }\n });\n } else if (id === 7 && Sourcevalue === 'Confluence') {\n setheader({\n head: {\n cells: [\n {\n key: 'USER',\n content: 'User'\n },\n {\n key: 'VIEWED',\n content: 'Viewed'\n }\n ]\n }\n });\n } else if (id === 7 && Sourcevalue === 'JSM Customer Portal') {\n setheader({\n head: {\n cells: [\n {\n key: 'USER',\n content: 'User'\n },\n {\n key: 'VIEWED',\n content: 'Viewed'\n },\n {\n key: 'REQUESTTYPE',\n content: 'Request Type'\n },\n {\n key: 'REQUESTKEY',\n content: 'Request Key'\n }\n ]\n }\n });\n } else if (id === 8) {\n setheader({\n head: {\n cells: [\n {\n key: 'USER',\n content: 'User'\n },\n {\n key: 'LAST VIEWED',\n content: 'Last Viewed'\n },\n {\n key: 'REQUESTTYPE',\n content: 'Request Type'\n },\n {\n key: 'REQUESTKEY',\n content: 'Request Key'\n }\n ]\n }\n });\n }\n }\n };\n //modal close function\n const closeClick = value => {\n // console.log(value);\n setModalState('');\n };\n\n const Dialog_actions = [{ text: 'Close', onClick: closeClick }];\n\n //Pageview search function that takes table and search keyword\n let FilteredTableValue = PageViewFilterfunction(\n props.tabledata.data,\n searchkeyword\n );\n // console.log('props in pageview', { FilteredTableValue });\n //create table syntax function that takes table data and button click function for opening corresponding dialog box\n\n let TableSyntaxValue = createPagetableSyntax(\n FilteredTableValue,\n buttonClick,\n userDetails,\n viewData.page_view_table.userHeaderId,\n Sourcevalue\n );\n\n // useEffect(() => {\n // if (\n // Sourcevalue === 'JSM Customer Portal' &&\n // props.jsmAgentInstalled === true\n // ) {\n\n // setShowDataFlag(true);\n // console.log(\"inside PV 1st\")\n // } else if (Sourcevalue === 'Confluence') {\n\n // setShowDataFlag(true);\n\n // }else if(Sourcevalue === 'JSM Customer Portal' &&\n // props.jsmAgentInstalled === false) {\n // setShowDataFlag(false);\n // }\n\n // }, [])\n\n // console.log(\"DATA FLAG\", showDataFlag)\n\n const clearSearch = () => setSearchKeyword('');\n\n return (\n
\n \n \n {searchkeyword.trim() && }\n
\n }\n elemBeforeInput={\n
\n \n
\n }\n value={searchkeyword}\n onChange={e => setSearchKeyword(e.target.value)}\n />\n {\n pageview_xlsx_array_create(FilteredTableValue, userDetails);\n }}\n appearance=\"default\"\n iconBefore={}\n >\n \n {((Sourcevalue === 'JSM Customer Portal' &&\n props.jsmAgentInstalled === true) ||\n Sourcevalue === 'Confluence') && (\n <>\n
\n
\n {TableSyntaxValue.length} Records\n
\n
\n {/* modal fucntion */}\n \n {ModalState && (\n \n \n \n )}\n \n \n \n )}\n {Sourcevalue === 'JSM Customer Portal' &&\n props.jsmAgentInstalled === false && (\n
\n \n Install App\n \n ]}\n >\n

\n To access page-views for the JSM knowledge-base articles, you\n must install a JSM companion App available on the Atlassian\n Marketplace for free.\n

\n \n
\n )}\n \n );\n};\n","import {\n ID,\n NAME,\n CREATOR,\n CREATED,\n LASTMODIFIED,\n LASTVIEWED,\n USERVIEWED,\n TOTALVIEWS,\n DIALOGID,\n DIALOGUSER,\n DIALOGVIEWED,\n USERT,\n USERTCREATED,\n USERTUPDATED,\n USERTVIEWED,\n USERTDIALOGLAST,\n USERTDIALOGPAGE,\n USERAVATAR,\n JSMUSERTNAME,\n USERNAME,\n USERTREQTYPEID,\n USERTREQTYPENAME,\n USERTREQKEY,\n REQUESTS,\n USERREQUESTS,\n USERDIALOGREQID,\n USERDIALOGREQTYPE,\n USERDIALOGREQKEY,\n USERREQID,\n USERREQTYPE,\n USERREQKEY\n} from './Strings';\n\n//search function for pageview table\nexport const PageViewFilterfunction = (obj, filterValue) => {\n let raw_array = [];\n let regex = new RegExp(filterValue, 'i');\n raw_array = [];\n\n raw_array = Object.keys(obj).reduce((acc, val) => {\n if (\n obj[val][REQUESTS] &&\n (obj[val][NAME].match(regex) || obj[val][CREATOR].match(regex))\n ) {\n acc.push([\n obj[val][NAME],\n obj[val][CREATOR],\n obj[val][CREATED],\n obj[val][LASTVIEWED],\n obj[val][USERVIEWED],\n obj[val][TOTALVIEWS],\n obj[val][ID],\n obj[val][REQUESTS]\n ]);\n } else if (obj[val][NAME].match(regex) || obj[val][CREATOR].match(regex)) {\n acc.push([\n obj[val][NAME],\n obj[val][CREATOR],\n obj[val][CREATED],\n obj[val][LASTMODIFIED],\n obj[val][LASTVIEWED],\n obj[val][USERVIEWED],\n obj[val][TOTALVIEWS],\n obj[val][ID]\n ]);\n }\n return acc;\n }, []);\n\n return raw_array;\n};\n\n//search function foe pageview dailog box\nexport const PageViewDialogFilterfunction = (obj, filterValue, userDetails) => {\n let raw = [];\n raw.length = 0;\n let regex = new RegExp(filterValue, 'i');\n Object.keys(obj).reduce(\n (acc, val) => {\n if (obj[val][USERTREQTYPEID] && obj[val][USERNAME].match(regex)) {\n raw.push([\n obj[val][DIALOGID],\n obj[val][DIALOGUSER],\n obj[val][DIALOGVIEWED],\n obj[val][USERNAME],\n obj[val][USERTREQTYPEID],\n obj[val][USERTREQTYPENAME],\n obj[val][USERTREQKEY]\n ]);\n } else if (userDetails[obj[val][DIALOGUSER]]?.displayName.match(regex)) {\n raw.push([\n obj[val][DIALOGID],\n obj[val][DIALOGUSER],\n obj[val][DIALOGVIEWED],\n obj[val][USERNAME]\n ]);\n }\n },\n { as: 0 }\n );\n return raw;\n};\n\n//search function for user table\nexport const UserFilterfunction = (obj, filterValue, userDetails) => {\n let raw_array = [];\n let regex = new RegExp(filterValue, 'i');\n Object.keys(obj).reduce(\n (acc, val) => {\n if (\n obj[val][USERTCREATED] &&\n userDetails[obj[val][USERT]]?.displayName.match(regex)\n ) {\n raw_array.push([\n obj[val][ID],\n obj[val][USERAVATAR],\n obj[val][USERT],\n obj[val][USERTCREATED],\n obj[val][USERTUPDATED],\n obj[val][USERTVIEWED]\n ]);\n } else if (\n obj[val][JSMUSERTNAME] &&\n userDetails[obj[val][USERT]]?.displayName.match(regex)\n ) {\n raw_array.push([\n obj[val][ID],\n obj[val][USERAVATAR],\n obj[val][USERT],\n obj[val][USERTVIEWED],\n obj[val][JSMUSERTNAME],\n obj[val][USERREQUESTS]\n ]);\n }\n },\n { None: 0 }\n );\n return raw_array;\n};\n\n//search function for user dialog box\nexport const UserDialogFilterfunction = (obj, filterValue) => {\n let raw = [];\n let regex = new RegExp(filterValue, 'i');\n Object.keys(obj).reduce(\n (acc, val) => {\n if (\n obj[val]['0'] &&\n obj[val][USERDIALOGREQKEY] &&\n obj[val][USERTDIALOGLAST] &&\n obj[val][USERTDIALOGPAGE].match(regex)\n ) {\n raw.push([\n obj[val][USERTDIALOGPAGE],\n obj[val][USERTDIALOGLAST],\n obj[val][USERDIALOGREQID],\n obj[val][USERDIALOGREQTYPE],\n obj[val][USERDIALOGREQKEY]\n ]);\n } else if (\n obj[val]['0'] &&\n obj[val][USERREQKEY] &&\n obj[val][USERTDIALOGPAGE].match(regex)\n ) {\n raw.push([\n obj[val][USERTDIALOGPAGE],\n obj[val][USERREQID],\n obj[val][USERREQTYPE],\n obj[val][USERREQKEY]\n ]);\n } else if (\n obj[val]['0'] &&\n obj[val][USERTDIALOGLAST] &&\n obj[val][USERTDIALOGPAGE].match(regex)\n ) {\n raw.push([obj[val][USERTDIALOGPAGE], obj[val][USERTDIALOGLAST]]);\n }\n },\n { as: 0 }\n );\n return raw;\n};\n","import React, { useEffect, useState } from 'react';\nimport Filterview from '../FilterComponent/FilterView';\nimport styles from './Pageviews.module.css';\nimport { PageviewSearch } from './PageviewSearch';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\nimport UserDetailsAtom from '../../Recoil/Atoms/UserDetailsAtom';\nimport { getUserDetails } from '../ApCalls';\nimport { token } from '@atlaskit/tokens';\n\nexport function Pageview(props) {\n const [viewData] = useRecoilState(ViewDataAtom);\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n const [jsmAgentInstalled, setJsmAgentInstalled] = useState('');\n const PageViewTable = viewData.page_view_table;\n let users = [];\n\n useEffect(() => {\n users.forEach(user => {\n if (user !== '0') {\n fetchUserDetails(user);\n }\n });\n }, [PageViewTable.loading]);\n\n async function fetchUserDetails(userId) {\n const resp = await getUserDetails(userId);\n const baseURL = resp?._links?.base.slice(0, -5);\n const pathURL = resp?.profilePicture?.path;\n const imageURL = baseURL + pathURL;\n const displayName = resp?.displayName;\n // userDetails[userId] = imageURL\n setUserDetails(prev => ({\n [userId]: {\n imageURL: imageURL,\n displayName: displayName\n },\n ...prev\n }));\n }\n PageViewTable.data.forEach(data => {\n let flag = true;\n users.forEach(val => {\n if (val === data[viewData.page_view_table.userHeaderId]) {\n flag = false;\n }\n });\n if (flag) {\n users.push(data[viewData.page_view_table.userHeaderId]);\n }\n });\n\n return (\n
\n \n
\n \n PAGE VIEWS\n \n\n \n
\n
\n );\n}\n","import React from 'react';\nimport DynamicTable from '@atlaskit/dynamic-table';\nimport { token } from '@atlaskit/tokens';\nimport { useRecoilState } from 'recoil';\nimport FilterAtom from '../../Recoil/Atoms/FilterAtom';\n\nconst table = {\n head: {\n cells: [\n {\n key: 'head key1',\n content: 'User',\n isSortable: true\n },\n {\n key: 'head key2',\n content: 'Created',\n isSortable: true\n },\n {\n key: 'head key3',\n content: 'Updated',\n isSortable: true\n },\n {\n key: 'head key4',\n content: 'Viewed',\n isSortable: true\n }\n ]\n }\n};\n\nexport const UsersTable = props => {\n const [filterData, setFilterData] = useRecoilState(FilterAtom);\n const Sourcevalue = filterData.source_value;\n let rows = props.values;\n // console.log(\"ROWS\",rows)\n\n const table = {\n head: {\n cells: [\n {\n key: 'head key1',\n content: 'User',\n isSortable: true\n },\n {\n key: 'head key2',\n content: 'Created',\n isSortable: true\n },\n {\n key: 'head key3',\n content: 'Updated',\n isSortable: true\n },\n {\n key: 'head key4',\n content: 'Viewed',\n isSortable: true\n }\n ]\n }\n };\n\n const JSMtable = {\n head: {\n cells: [\n {\n key: 'head key1',\n content: 'User',\n isSortable: true\n },\n {\n key: 'head key2',\n content: 'Viewed',\n isSortable: true\n },\n {\n key: 'head key3',\n content: 'Requests',\n isSortable: true\n }\n ]\n }\n };\n\n return (\n
\n console.log('onSort')}\n onSetPage={() => console.log('onSetPage')}\n emptyView={\n Sourcevalue === 'Confluence' ? (\n
\n No matching records found\n
\n ) : (\n
\n No page views registered with the specified filter.\n
\n )\n }\n />\n
\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport Textfield from '@atlaskit/textfield';\nimport Button from '@atlaskit/button';\nimport { UsersTable } from './UserTable';\nimport Modal, { ModalTransition } from '@atlaskit/modal-dialog';\nimport { Dialogscreen } from '../Dialogscreen';\n//use this only for dev\n//import { fakeUserDialog } from '../fake';\nimport SearchIcon from '@atlaskit/icon/glyph/editor/search';\nimport {\n UserFilterfunction,\n UserDialogFilterfunction\n} from '../../Functional/FilterFunctions';\nimport { createUserTableSyntax } from '../../Functional/TableSyntax';\nimport ArrowDownIcon from '@atlaskit/icon/glyph/arrow-down';\nimport { user_xlsx_array_create } from '../../Functional/Download';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\nimport AccountAtom from '../../Recoil/Atoms/AccountAtom';\nimport FilterAtom from '../../Recoil/Atoms/FilterAtom';\nimport { fetchDataView } from '../../API/dataViewApis';\nimport CrossCircleIcon from '@atlaskit/icon/glyph/cross-circle';\nimport UserDetailsAtom from '../../Recoil/Atoms/UserDetailsAtom';\nimport jwtDecode from 'jwt-decode';\nimport SectionMessage, {\n SectionMessageAction\n} from '@atlaskit/section-message';\n\nexport const UserSearch = props => {\n const [viewData, setViewData] = useRecoilState(ViewDataAtom);\n const [accountData, setAccountData] = useRecoilState(AccountAtom);\n const [filterData] = useRecoilState(FilterAtom);\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n const [dialogData, setDialogData] = useState({\n users: [],\n id: props.tabledata.userHeaderId\n });\n const [colId, setColId] = useState(0);\n\n const UserDialog = viewData.user_dialog;\n const StartDate = filterData.start_date;\n const EndDate = filterData.end_date;\n const Contentvalue = filterData.content_value;\n const Sourcevalue = filterData.source_value;\n const DialogLoading = viewData.is_dialog_loading;\n const JWT = accountData.JWT;\n const [searchkeyword, setSearchKeyword] = useState('');\n const [ModalState, setModalState] = useState('');\n const [Dialogsearchstate, setDialogSearchKeyword] = useState('');\n const [header, setheader] = useState('');\n const [showDataFlag, setShowDataFlag] = useState(false);\n\n const decoded = jwtDecode(JWT);\n let jwtBaseUrl = decoded?.baseURL;\n let baseURL = jwtBaseUrl?.slice(0, -5);\n\n const dialogSearch = value => {\n setDialogSearchKeyword(value);\n };\n\n // dialog search function which takes orginal table and search keyword as parameters\n let dialogFilterTableValue = UserDialogFilterfunction(\n UserDialog || {},\n Dialogsearchstate\n );\n\n // console.log('FILTERED USER', dialogFilterTableValue);\n\n //api call in dialog box\n const buttonClick = async (value, id) => {\n setViewData(prev => ({\n ...prev,\n is_dialog_loading: true\n }));\n setModalState(1);\n setColId(id);\n let reqpayload = {\n selected: {\n '-2': {\n label: 'Date Range',\n type: 'range',\n value: [StartDate, EndDate, 'Custom']\n },\n '-26': {\n label: 'Content',\n type: 'single',\n value: [Contentvalue]\n },\n\n '-29': {\n label: 'Source',\n type: 'single',\n value: [Sourcevalue]\n }\n }\n };\n let reqquery = 'columnID=' + id + '&id=6&rowID=' + value;\n //ApiCall(reqpayload,PageviewDialogtransform)\n\n const response = await fetchDataView(reqquery, reqpayload, accountData.JWT);\n if (response.success) {\n setAccountData(prev => ({\n ...prev,\n JWT: response.headers.authorization\n }));\n\n setViewData(prev => ({\n ...prev,\n user_dialog: response.data.data,\n is_dialog_loading: false\n }));\n\n //different header for different modal box tables\n if (id == 3) {\n setheader({\n head: {\n cells: [\n {\n key: 'PAGES',\n content: 'Pages'\n },\n {\n key: 'CREATED',\n content: 'Created'\n }\n ]\n }\n });\n } else if (id == 4) {\n setheader({\n head: {\n cells: [\n {\n key: 'PAGES',\n content: 'Pages'\n },\n {\n key: 'UPDATED',\n content: 'Last Updated'\n }\n ]\n }\n });\n } else if (id == 5 && Sourcevalue === 'Confluence') {\n setheader({\n head: {\n cells: [\n {\n key: 'PAGES',\n content: 'Pages'\n },\n {\n key: 'VIEWED',\n content: 'Last Viewed'\n }\n ]\n }\n });\n } else if (id == 5 && Sourcevalue === 'JSM Customer Portal') {\n setheader({\n head: {\n cells: [\n {\n key: 'PAGES',\n content: 'Pages'\n },\n {\n key: 'VIEWED',\n content: 'Last Viewed'\n },\n {\n key: 'REQUEST TYPE',\n content: 'Request Type'\n },\n {\n key: 'REQUEST KEY',\n content: 'Request Key'\n }\n ]\n }\n });\n } else if (id == 7) {\n setheader({\n head: {\n cells: [\n {\n key: 'PAGES',\n content: 'Pages'\n },\n {\n key: 'REQUEST TYPE',\n content: 'Request Type'\n },\n {\n key: 'REQUEST KEY',\n content: 'Request Key'\n }\n ]\n }\n });\n }\n return;\n }\n };\n\n //modal close function\n const closeClick = value => {\n setModalState('');\n };\n\n const actions = [{ text: 'Close', onClick: closeClick }];\n\n //usertable search function\n\n let filteredTableValue = UserFilterfunction(\n props.tabledata.data,\n searchkeyword,\n userDetails\n );\n\n //create table syntax function that takes table data and button click function for opening corresponding dialog box\n\n let TableSyntax = createUserTableSyntax(\n filteredTableValue,\n buttonClick,\n userDetails,\n props.tabledata.userHeaderId,\n Sourcevalue\n );\n\n // useEffect(() => {\n\n // if (\n // Sourcevalue === 'JSM Customer Portal' &&\n // props.jsmAgentInstalled === true\n // ) {\n\n // setShowDataFlag(true);\n // console.log(\"inside 1st\")\n // } else if (Sourcevalue === 'Confluence') {\n\n // setShowDataFlag(true);\n // console.log(\"inside 2nd\")\n // }\n // else if(Sourcevalue === 'JSM Customer Portal' &&\n // props.jsmAgentInstalled === false) {\n // console.log(\"inside 3rd\")\n // setShowDataFlag(false);\n // }\n // }, [Sourcevalue])\n\n // console.log(\"DATA FLAG\", showDataFlag)\n\n const clearSearch = () => setSearchKeyword('');\n return (\n
\n \n \n \n
\n }\n elemAfterInput={\n \n {searchkeyword.trim() && }\n \n }\n value={searchkeyword}\n onChange={e => setSearchKeyword(e.target.value)}\n autoFocus={true}\n />\n {\n user_xlsx_array_create(filteredTableValue, userDetails);\n }}\n iconBefore={}\n >\n \n {((Sourcevalue === 'JSM Customer Portal' &&\n props.jsmAgentInstalled === true) ||\n Sourcevalue === 'Confluence') && (\n <>\n
\n
\n {TableSyntax.length} Records\n
\n
\n \n {ModalState && (\n \n \n \n )}\n \n \n \n )}\n {Sourcevalue === 'JSM Customer Portal' &&\n props.jsmAgentInstalled === false && (\n
\n \n Install App\n \n ]}\n >\n

\n To access page-views for the JSM knowledge-base articles, you\n must install a JSM companion App available on the Atlassian\n Marketplace for free.\n

\n \n
\n )}\n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport Filterview from '../FilterComponent/FilterView';\nimport styles from './Users.module.css';\nimport { UserSearch } from './UserSearch';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\nimport { getUserDetails } from '../ApCalls';\nimport UserDetailsAtom from '../../Recoil/Atoms/UserDetailsAtom';\nimport FilterAtom from '../../Recoil/Atoms/FilterAtom';\nimport { token } from '@atlaskit/tokens';\n\nexport const User = () => {\n const [viewData] = useRecoilState(ViewDataAtom);\n const [userDetails, setUserDetails] = useRecoilState(UserDetailsAtom);\n const [jsmAgentInstalled, setJsmAgentInstalled] = useState('');\n const [filterData] = useRecoilState(FilterAtom);\n const UserViewTable = viewData.user_view_table;\n let users = [];\n const Sourcevalue = filterData.source_value;\n useEffect(() => {\n users.forEach(user => {\n if (user !== '0' && Sourcevalue !== 'JSM Customer Portal') {\n fetchUserDetails(user);\n } else if (user === '0') {\n setUserDetails(prev => ({\n [user]: {\n imageURL: '',\n displayName: 'Anonymous'\n },\n ...prev\n }));\n }\n // else if (user === '0') {\n // setUserDetails(prev => ({\n // [user]: {\n // imageURL: '',\n // displayName: 'Anonymous'\n // },\n // ...prev\n // }));\n // }\n });\n }, [UserViewTable.loading]);\n\n UserViewTable.data.forEach(item => {\n users.push(item[UserViewTable.userHeaderId]);\n });\n async function fetchUserDetails(userId) {\n const resp = await getUserDetails(userId);\n const baseURL = resp?._links?.base.slice(0, -5);\n const pathURL = resp?.profilePicture?.path;\n const imageURL = baseURL + pathURL;\n const displayName = resp?.displayName;\n // userDetails[userId] = imageURL\n setUserDetails(prev => ({\n [userId]: {\n imageURL: imageURL,\n displayName: displayName\n },\n ...prev\n }));\n }\n\n return (\n
\n \n
\n \n USERS\n \n\n \n
\n
\n );\n};\n","import React, { Fragment } from 'react';\nimport { Modal } from '@atlaskit/onboarding';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\n\nexport const First = () => {\n //first large onboarding screen that include the image\n const [viewData, setViewData] = useRecoilState(ViewDataAtom);\n const Onboarding = viewData.onboarding;\n\n return (\n \n {Onboarding === 1 && (\n setViewData(prev => ({ ...prev, onboarding: 2 })),\n text: 'Next'\n },\n {\n onClick: () => setViewData(prev => ({ ...prev, onboarding: 0 })),\n text: 'Later'\n }\n ]}\n heading=\"Get Started with Insights\"\n key=\"welcome\"\n >\n \n

Going forward you can view activity on any space, page or blog

\n \n )}\n
\n );\n};\n","import React from 'react';\nimport Drawer from '@atlaskit/drawer';\nimport Button from '@atlaskit/button';\nimport LightbulbFilledIcon from '@atlaskit/icon/glyph/lightbulb-filled';\nimport DocumentFilledIcon from '@atlaskit/icon/glyph/document-filled';\nimport PeopleIcon from '@atlaskit/icon/glyph/people';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from '../../Recoil/Atoms/ViewDataAtom';\n\nexport const DrawerComponent = () => {\n //right side drawer component\n //redux flag\n const [viewData, setViewData] = useRecoilState(ViewDataAtom);\n const DrawerFlag = viewData.drawer;\n\n return (\n setViewData(prev => ({ ...prev, drawer: false }))}\n onCloseComplete={() => setViewData(prev => ({ ...prev, drawer: false }))}\n width=\"narrow\"\n >\n
\n \n

Insights

\n

Version : {process.env.REACT_APP_VERSION}

\n
\n \n setViewData(prev => ({ ...prev, onboarding: 1, drawer: false }))\n }\n iconBefore={}\n >\n Getting Started\n \n }\n onClick={() => window.open('https://help.view26.com/pifc/', '_blank')}\n >\n Documentation\n \n
\n \n window.open(\n 'https://view26.atlassian.net/servicedesk/customer/portal/2',\n '_blank'\n )\n }\n iconBefore={}\n >\n Contact Us\n \n \n \n \n \n );\n};\n","import React, { useState, useRef } from 'react';\n// Components\nimport Overview from './Overview/Overview';\nimport { Pageview } from './Pageview/Pageview';\nimport { User } from './User/User';\nimport Tabs from '@atlaskit/tabs';\nimport { SpotlightTarget } from '@atlaskit/onboarding';\nimport { First } from './Onboarding/First';\nimport Button from '@atlaskit/button';\nimport EditorHelpIcon from '@atlaskit/icon/glyph/editor/help';\nimport { useRecoilState, useSetRecoilState } from 'recoil';\nimport FilterAtom from '../Recoil/Atoms/FilterAtom';\nimport ViewDataAtom from '../Recoil/Atoms/ViewDataAtom';\nimport { AppContentWrapper } from '../Styles/wrappers';\nimport { DrawerComponent } from './Onboarding/Drawer';\nimport { token } from '@atlaskit/tokens';\n\nexport const Home = () => {\n const [filterData] = useRecoilState(FilterAtom);\n const setViewData = useSetRecoilState(ViewDataAtom);\n const firstLoadFlag = useRef(true);\n\n const Contentvalue = filterData.content_value;\n const Displayvalue = filterData.display_value;\n const Groupbyvalue = filterData.group_by_value;\n\n const [tabIndex, setTabIndex] = useState(0);\n\n //tabs creation\n const tabs = [\n {\n label: (\n \n
\n Overview\n
\n
\n ),\n heading: (\n \n
\n Overview\n
\n
\n ),\n content: ,\n tooltip: 'Overview'\n },\n {\n label: (\n \n
Pageviews
\n
\n ),\n heading:
Pageviews
,\n content: (\n \n ),\n tooltip: 'Pageviews'\n },\n {\n label: (\n \n
Users
\n
\n ),\n heading:
Users
,\n content: ,\n tooltip: 'Users '\n }\n ];\n\n const openDrawer = () => {\n setViewData(prev => ({\n ...prev,\n drawer: true\n }));\n };\n\n async function onTabSelect(_, tabIndex) {\n await setViewData(prev => ({\n ...prev,\n tab_index: tabIndex,\n chart_flag: prev.chart_flag + 1\n }));\n setTabIndex(tabIndex);\n }\n\n return (\n \n
\n

Insights

\n
\n \n }\n />\n \n
\n
\n \n
\n \n
\n \n
\n );\n};\n","import React from 'react';\nimport { createHistory, LocationProvider, Router } from '@reach/router';\nimport { Home } from '../Home';\nimport createHashSource from 'hash-source';\nimport { MainWrapper } from '../../Styles/wrappers';\n\nconst Settings = React.lazy(() => import('../../OtherPages/Settings/Settings'));\nconst PermissionPage = React.lazy(() =>\n import('../../OtherPages/PermissionPage/PermissionPage')\n);\nconst source = createHashSource();\nconst history = createHistory(source);\n\nconst AppContent = () => {\n return (\n \n
\n \n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default AppContent;\n","import React, { Suspense, useEffect } from 'react';\nimport Spinner from '@atlaskit/spinner';\nimport { SpotlightManager, SpotlightTransition } from '@atlaskit/onboarding';\nimport { renderActiveSpotlight } from './Components/Onboarding/SpotCards';\nimport ErrorBoundary from './Components/ErrorHandling/ErrorBoundary';\nimport AppContent from './Components/App/AppContent';\nimport { useRecoilState } from 'recoil';\nimport ViewDataAtom from './Recoil/Atoms/ViewDataAtom';\nimport { useThemeObserver, setGlobalTheme } from '@atlaskit/tokens';\nimport { fecthTheme } from './API/dataViewApis';\nconst spinnerStyle = {\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)'\n};\n\nfunction App() {\n const [viewData, setViewData] = useRecoilState(ViewDataAtom);\n const Onboarding = viewData.onboarding;\n\n const SpotcardCount = value => {\n if (value === 'drawer') {\n setViewData(prev => ({ ...prev, drawer: true, onboarding: value }));\n } else {\n setViewData(prev => ({ ...prev, onboarding: value }));\n }\n };\n\n useEffect(() => {\n const getTheme = async () => {\n const res = await fecthTheme();\n };\n getTheme();\n }, []);\n const theme = useThemeObserver();\n\n return (\n \n \n \n \n }\n >\n \n \n \n {renderActiveSpotlight(SpotcardCount, Onboarding)}\n \n \n \n \n );\n}\nexport default App;\n","import { datadogRum } from '@datadog/browser-rum';\n\nexport default function initDatadog() {\n datadogRum.init({\n applicationId: '5535159a-cf30-4a50-93c4-f69604470877',\n clientToken: 'pub0ce23621cb24dd3006f9e21467b8510a',\n site: 'datadoghq.com',\n service: 'pageview-insights',\n version: '1.0.0',\n sampleRate: 100,\n trackInteractions: true,\n trackResources: true,\n trackLongTasks: true,\n useCrossSiteSessionCookie: true\n });\n\n datadogRum.startSessionReplayRecording();\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport '@atlaskit/css-reset';\nimport { RecoilRoot } from 'recoil';\nimport initDatadog from './Analytics/datadog';\n\ninitDatadog();\n\nReactDOM.render(\n \n \n ,\n\n document.getElementById('root')\n);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"whole\":\"Overview_whole__2Uweq\",\"timelinecomponent\":\"Overview_timelinecomponent__2uAJR\",\"morebutton\":\"Overview_morebutton__kBmy_\",\"tcheader\":\"Overview_tcheader__j4L8b\",\"button\":\"Overview_button__jjv56\",\"table-icon\":\"Overview_table-icon__1aMdp\",\"components\":\"Overview_components__2fBeY\",\"chart\":\"Overview_chart__1zD8g\",\"tables\":\"Overview_tables__3cBFn\",\"tablerow1\":\"Overview_tablerow1__5Fu8T\",\"tablerow2\":\"Overview_tablerow2__1Q3AW\"};","import styled from 'styled-components';\nimport { borderRadius, colors, gridSize, math, themed } from '@atlaskit/theme';\nimport { token } from '@atlaskit/tokens';\nexport const ContentTabWrapper = styled.div`\n align-items: center;\n background-color: ${themed({ light: colors.N20, dark: colors.DN10 })};\n border-radius: ${borderRadius}px;\n color: ${colors.subtleText};\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n font-size: 4em;\n font-weight: 500;\n justify-content: center;\n margin-bottom: ${gridSize}px;\n margin-top: ${math.multiply(gridSize, 2)}px;\n padding: ${math.multiply(gridSize, 4)}px;\n`;\n\nexport const AppContentWrapper = styled.div`\n color: ${token('color.text')};\n padding: 10px;\n .header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 40px;\n }\n h1 {\n color: ${token('color.text')};\n }\n .content {\n margin-left: 5px;\n }\n`;\n\nexport const FilterWrapper = styled.div`\n .Whole {\n display: flex;\n flex-direction: row;\n margin: 1px;\n flex-wrap: wrap;\n align-content: space-between;\n margin-top: 7px;\n }\n .paragraph {\n align-self: center;\n color: ${token('color.text')};\n text-transform: uppercase;\n font-size: 12px;\n }\n .dropdown {\n margin: 5px;\n min-width: 200px;\n max-width: 150px;\n color: ${token('color.text')};\n }\n .components {\n margin: 5px;\n min-width: 50px;\n max-width: 150px;\n color: ${token('color.text')};\n }\n .datecomponents {\n margin: 5px;\n min-width: 118px;\n max-width: 150px;\n }\n .visible {\n display: flex;\n flex-direction: row;\n margin-left: 20px;\n }\n .invisible {\n display: flex;\n flex-direction: row;\n display: none;\n flex: 1;\n padding-top: 5px;\n }\n`;\n\nexport const AnalyzeWidgetWrapper = styled.div`\n .table-icon {\n background-image: url('/app/images/cells.svg');\n background-repeat: no-repeat;\n width: auto;\n height: 10px;\n display: block;\n margin: 8px 0 4px 3px;\n background-size: contain;\n background-size: contain;\n cursor: pointer;\n }\n .chartPlus-tooltip {\n background: ${token('color.background.accent.gray.subtlest')} !important;\n color: ${token('color.text')} !important;\n }\n\n rect {\n fill: ${token('elevation.surface')};\n }\n .axis path {\n stroke: ${token('color.background.accent.gray.subtler')} !important;\n }\n .axis line {\n stroke: ${token('color.background.accent.gray.subtler')} !important;\n }\n text {\n fill: ${token('color.text')};\n }\n`;\n\nexport const MainWrapper = styled.div`\n .ac-content {\n background: ${token('elevation.surface')};\n color: ${token('color.text')};\n min-height: 100vh;\n clear: both;\n }\n`;\n\nexport const DialogBoxWrapper = styled.div`\n background: ${token('elevation.surface')};\n color: ${token('color.text')};\n`;\n\nexport const SettingWrapper = styled.div`\n h3,\n p {\n color: ${token('color.text')};\n }\n`;\n"],"sourceRoot":""}