From c001afa9bbab0d98280999f955f3c8616961bd46 Mon Sep 17 00:00:00 2001 From: oozuyguntas <151741410+oozuyguntas@users.noreply.github.com> Date: Wed, 22 Nov 2023 13:42:35 +0000 Subject: [PATCH] OzgeOzuyguntas_Manufacturing_Demo_Portal --- .../Manufacturing_Embedded_Demo.txt | 1 + Manufacturing_Embedded_Demo/css/config.css | 12 + Manufacturing_Embedded_Demo/css/layout.css | 75 +++++ Manufacturing_Embedded_Demo/css/page.css | 92 ++++++ .../img/tableau-white.png | Bin 0 -> 1753 bytes Manufacturing_Embedded_Demo/img/user.png | Bin 0 -> 60973 bytes Manufacturing_Embedded_Demo/index.html | 105 +++++++ Manufacturing_Embedded_Demo/lib/advanced.js | 262 ++++++++++++++++++ Manufacturing_Embedded_Demo/lib/config.js | 9 + Manufacturing_Embedded_Demo/tableau.js | 163 +++++++++++ 10 files changed, 719 insertions(+) create mode 100644 Manufacturing_Embedded_Demo/Manufacturing_Embedded_Demo.txt create mode 100644 Manufacturing_Embedded_Demo/css/config.css create mode 100644 Manufacturing_Embedded_Demo/css/layout.css create mode 100644 Manufacturing_Embedded_Demo/css/page.css create mode 100644 Manufacturing_Embedded_Demo/img/tableau-white.png create mode 100644 Manufacturing_Embedded_Demo/img/user.png create mode 100644 Manufacturing_Embedded_Demo/index.html create mode 100644 Manufacturing_Embedded_Demo/lib/advanced.js create mode 100644 Manufacturing_Embedded_Demo/lib/config.js create mode 100644 Manufacturing_Embedded_Demo/tableau.js diff --git a/Manufacturing_Embedded_Demo/Manufacturing_Embedded_Demo.txt b/Manufacturing_Embedded_Demo/Manufacturing_Embedded_Demo.txt new file mode 100644 index 0000000..783457a --- /dev/null +++ b/Manufacturing_Embedded_Demo/Manufacturing_Embedded_Demo.txt @@ -0,0 +1 @@ +{"color---templates/gridV/index.html---Button-Text":"#ffffff","text---templates/gridV/index.html-User-text":"Ozge%20Ozuyguntas","action---templates/gridV/index.html-2":"false","color---templates/gridV/index.html---Header-Text":"#ffffff","askdata---templates/gridV/index.html-3":"","webedit---templates/gridV/index.html-1":"false","text---templates/gridV/index.html-Download-Data-text":"Download%20Data%20","warnings---templates/gridV/index.html-3":"false","text---templates/gridV/index.html-Action-text":"Action%20","webedit---templates/gridV/index.html-2":"false","color---templates/gridV/index.html---Header-Background":"#9AABB4","parameter---templates/gridV/index.html-parameter":"[['Supplier name Parameter','Product Parameter (supplier)'],['Facility (group) Parameter'],['Product Parameter (supplier)','Supplier name Parameter'],[]]","color---templates/gridV/index.html---Footer-Text":"#ffffff","WARN":"agree","img---templates/gridV/index.html-img-logo":"https://cdn-icons-png.flaticon.com/512/3787/3787840.png","text---templates/gridV/index.html-Filter-text-Product Parameter (supplier)":"Product%20Name","text---templates/gridV/index.html-Viz-1-text":"Suppliers%20Dashboard","warnings---templates/gridV/index.html-1":"false","warnings---templates/gridV/index.html-2":"false","TOKEN_NAME":"","text---templates/gridV/index.html-WebEdit-text":"Web%20Edit%20","SITE_NAME":"","filter---templates/gridV/index.html-filter":"[[],[],[],[]]","view---templates/gridV/index.html-view":"https://public.tableau.com/views/OO_Suppliers/Manufacturingdemo3-Suppliers?:showVizHome=no&:embed=true,https://public.tableau.com/views/OO_Production/Manufacturingdemo2-Production?:showVizHome=no&:embed=true,https://public.tableau.com/views/OO_Inventory/Manufacturingdemo1-Inventory?:showVizHome=no&:embed=true,","askdata---templates/gridV/index.html-0":"","text---templates/gridV/index.html-Terms-text":"Terms%20%26%20Conditions%20","action---templates/gridV/index.html-1":"false","lastpageloaded-grid":"2","text---templates/gridV/index.html-Viz-4-text":"Viz%204%20","askdata---templates/gridV/index.html-1":"","text---templates/gridV/index.html-Reset-Viz-text":"Reset%20Viz%20","color---templates/gridV/index.html---Button-Background":"#C7ADC7","webedit---templates/gridV/index.html-0":"false","text---templates/gridV/index.html-AskData-text":"Ask%20data%20","color---templates/gridV/index.html---Footer-Background":"#9AABB4","color---templates/gridV/index.html---Content-Background":"#ffffff","color---templates/gridV/index.html---Content-Text":"#ffffff","TOKEN_VALUE":"","action---templates/gridV/index.html-0":"true","SERVER_URL":"","action---templates/gridV/index.html-3":"false","text---templates/gridV/index.html-PrivacyPolicy-text":"Privacy%20Policy%20","webedit---templates/gridV/index.html-3":"false","text---templates/gridV/index.html-Filter-text-Facility (group) Parameter":"Facility","text---templates/gridV/index.html-Filter-text-Supplier name Parameter":"Supplier%20name","color---templates/gridV/index.html---Button-Hover-Background":"#9AABB4","askdata---templates/gridV/index.html-2":"","warnings---templates/gridV/index.html-0":"false","color---templates/gridV/index.html---Button-Hover-Text":"#ffffff","VERSION":"1.02","img---templates/gridV/index.html-img-avatar":"https://media.licdn.com/dms/image/D4E03AQENBTh5zbKnKg/profile-displayphoto-shrink_800_800/0/1667410706004?e=1706140800&v=beta&t=LLRyvCm8mm0e1EVbC5Y573yVJSedFNRmAzHEna6Q4VM","text---templates/gridV/index.html-Viz-3-text":"Inventory%20Dashboard","text---templates/gridV/index.html-Viz-2-text":"Production%20Dashboard"} \ No newline at end of file diff --git a/Manufacturing_Embedded_Demo/css/config.css b/Manufacturing_Embedded_Demo/css/config.css new file mode 100644 index 0000000..53a05d2 --- /dev/null +++ b/Manufacturing_Embedded_Demo/css/config.css @@ -0,0 +1,12 @@ +:root { +--Button-Text:#ffffff; +--Header-Text:#ffffff; +--Header-Background:#9AABB4; +--Footer-Text:#ffffff; +--Button-Background:#C7ADC7; +--Footer-Background:#9AABB4; +--Content-Background:#ffffff; +--Content-Text:#ffffff; +--Button-Hover-Background:#9AABB4; +--Button-Hover-Text:#ffffff; +} \ No newline at end of file diff --git a/Manufacturing_Embedded_Demo/css/layout.css b/Manufacturing_Embedded_Demo/css/layout.css new file mode 100644 index 0000000..1d6f69c --- /dev/null +++ b/Manufacturing_Embedded_Demo/css/layout.css @@ -0,0 +1,75 @@ +body{ + margin: 0px; +} +.container { + display: grid; + font-family: Arial, Helvetica, sans-serif; + grid-template-areas: + "header header" + "nav content" + "footer footer"; + + grid-template-columns: 200px 1fr; + grid-template-rows: auto 1fr auto; + grid-gap: 0px; + + height: 100vh; +} + +header { + grid-area: header; + background-color: var(--Header-Background); + color: var(--Header-Text); +} + +nav { + color: var(--Header-Text); + background-color: var(--Button-Background); + grid-area: nav; +} + +main { + grid-area: content; + color: var(--Content-Text); + background-color: var(--Content-Background); +} + +footer { + grid-area: footer; +} +.log{ + max-height: 50px; + width: auto; + margin: 10px; +} +.logo { + width: 100%; + height: 100%; + color: var(--Header-Text); + display: flex; +} +.person { + margin: auto 20px auto auto; +} +@media (max-width: 768px) { + .container { + grid-template-areas: + "header" + "nav" + "content" + "side" + "footer"; + + grid-template-columns: 1fr; + grid-template-rows: + auto /* Header */ + minmax(75px, auto) /* Nav */ + 1fr /* Content */ + minmax(75px, auto) /* Sidebar */ + auto; /* Footer */ + } + + nav, aside { + margin: 0; + } +} \ No newline at end of file diff --git a/Manufacturing_Embedded_Demo/css/page.css b/Manufacturing_Embedded_Demo/css/page.css new file mode 100644 index 0000000..29629a5 --- /dev/null +++ b/Manufacturing_Embedded_Demo/css/page.css @@ -0,0 +1,92 @@ + +.header_right { + display: flex; + line-height: 25px; +} +.ButtonBar { + overflow: hidden; + display: flex; + font-family: Arial, Helvetica, sans-serif; + min-height: 35px; + white-space: nowrap; + flex-direction: column; + margin-top: 30px; +} + +.ButtonBar a{ + display: flex; +} +.ButtonBar a i{ + margin-right: 5px; +} +.ButtonBar a:not(.filter-entry) { + + font-size: 16px; + color: var(--Button-Text); + text-align: center; + padding-right:20px; + padding-left:20px; + height: 25px; + text-decoration: none; + padding-top: 10px; +} + +.ButtonBar a{ + transition: all 0.5s; +} +.ButtonBar a:hover { + background-color: var(--Button-Hover-Background); + color: var(--Button-Hover-Text); +} + +.divider{ + margin-top: 8px; + color:var(--Button-Background); + text-align: center; + border-top: grey; + border-top-width: 1px; + border-top-style: solid; +} +.show { + display: block!important; +} + + +.dropdown { + display: inline-block; +} + +.dropdown-content { + display: none; + position: absolute; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + background-color: var(--Button-Background); + z-index: 1; + max-height: 80%; + overflow: auto; +} + +/* Links inside the filter dropdown */ +.dropdown-content a { + color: var(--Button-Text); + padding: 12px 16px; + text-decoration: none; + display: block; +} + +.usrpic { + height: 30px; + margin-right: 10px; +} +.footer{ + background-color: var(--Footer-Background); + color: var(--Footer-Text); + display: flex; + line-height: 30px; + justify-content: space-between; + padding: 10px; +} +/* Change color of dropdown links on hover */ +.dropdown-content a:hover {background-color: var(--Button-Hover-Background)} + diff --git a/Manufacturing_Embedded_Demo/img/tableau-white.png b/Manufacturing_Embedded_Demo/img/tableau-white.png new file mode 100644 index 0000000000000000000000000000000000000000..da55cf0880c4827e38d308fce9aa9f0f25fe5509 GIT binary patch literal 1753 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 Z;ll^<(P0-OW4OLDaqQ$V#Xj@a{2z!ux+nku literal 0 HcmV?d00001 diff --git a/Manufacturing_Embedded_Demo/index.html b/Manufacturing_Embedded_Demo/index.html new file mode 100644 index 0000000..3c770d7 --- /dev/null +++ b/Manufacturing_Embedded_Demo/index.html @@ -0,0 +1,105 @@ + + + + + + + + + + + Tableau Example + + +
+
+ +
+ +
+ +
+
+
+
+
+ +
+ +
+
+ + diff --git a/Manufacturing_Embedded_Demo/lib/advanced.js b/Manufacturing_Embedded_Demo/lib/advanced.js new file mode 100644 index 0000000..6abebd2 --- /dev/null +++ b/Manufacturing_Embedded_Demo/lib/advanced.js @@ -0,0 +1,262 @@ +// YOU DON'T NEED TO WORRY ABOUT THIS +//Few explaination on each +var layout=""; +window.onresize = function(e){ + var wd=document.querySelector('body').clientWidth; + if(wd<800 && layout!="phone"){ + layout="phone"; + viz.getCurrentUrlAsync().then (function(current_url){ + var index=tab_server.indexOf(current_url.split("?")[0]); + loadVizByIndex(index,true,layout); + }) + } + if(wd>=800 && layout!=""){ + layout=""; + viz.getCurrentUrlAsync().then (function(current_url){ + var index=tab_server.indexOf(current_url.split("?")[0]); + loadVizByIndex(index,true,layout); + }) + } +}; +function showFilterBox(el){ + document.querySelector(`div[mid='${el}']`).classList.toggle("show"); + document.querySelectorAll(`.dropdown-content`).forEach((dd)=>{if(dd.getAttribute("mid")!=el)dd.classList.remove("show")}); +} +function populateFilterMenu(fil){ + var links=""; + if(fil.getAppliedValues()==null){ + console.log("this filter as no applied values :"+fil.getFieldName()); + return; + } + fil.getAppliedValues().map((val)=>{ + var found=false; + document.querySelectorAll(`[filName="${fil.getFieldName()}"]`).forEach((el)=>{ + console.log(); + if(el.text==val.value.toString()) + found=true; + }) + if(!found ){ + links+=`${val.value}`; + } + }) + var list=` + +
${fil.getFieldName()}
+ +
` + if(document.querySelector(`div[mid='${fil.getFieldName()}']`)==null){ + document.getElementsByClassName("filter-container")[0].innerHTML=list+document.getElementsByClassName("filter-container")[0].innerHTML; + } + else{ + document.querySelector(`div[mid='${fil.getFieldName()}']`).innerHTML+=links; + } +} +function populateParameterMenu(param){ + var links=""; + if(param.getAllowableValues()==null){ + console.log("this param as no allowable values :"+param.getName()); + return; + } + param.getAllowableValues().map((val)=>{ + var found=false; + document.querySelectorAll(`[paramName="${param.getName()}"]`).forEach((el)=>{ + if(el.text==val.value) + found=true; + }) + if(!found ){ + links+=`${val.formattedValue}`; + } + }) + var list=` + +
${param.getName()}
+ +
` + if(document.querySelector(`div[mid='${param.getName()}']`)==null){ + document.getElementsByClassName("filter-container")[0].innerHTML=list+document.getElementsByClassName("filter-container")[0].innerHTML; + } + else{ + document.querySelector(`div[mid='${param.getName()}']`).innerHTML+=links; + } +} +function getParametersForViz(index){ + workbook.getParametersAsync().then((current_param)=>{ + if(typeof(tab_all_params)!="undefined")tab_all_params[index]={parameters:current_param,viz:viz}; + current_param.map((f)=>{ + tab_param[index].map((cf)=>{ + if(cf==f.getName()){ + populateParameterMenu(f); + } + }) + }) + window.parent.restoreTexts(); + }) +} +function getFiltersForViz(index){ + activeSheet.getFiltersAsync().then((current_filter)=>{ + if(typeof(tab_all_filters)!="undefined") { + tab_all_filters[index].filters=[]; + current_filter.map((fl)=>{ + var found=false; + tab_all_filters[index].filters.map(tb=>{ + if(tb.getFieldName()==fl.getFieldName()) + found=true; + }) + if(found==false) + tab_all_filters[index].filters.push(fl) + + }) + tab_all_filters[index].viz=viz; + } + current_filter.map((f)=>{ + tab_filter[index].map((cf)=>{ + if(cf==f.getFieldName()){ + populateFilterMenu(f); + } + }) + }) + window.parent.restoreTexts(); + }) +} +function hideDropDownList(filterName){ + document.querySelector(`div[mid='${filterName}']`).classList.remove("show") +} +function hideEditAskButton(){ + document.getElementsByClassName("webedit")[0].style.display = "none"; + document.getElementsByClassName("askdata")[0].style.display = "none"; +} +function hideEditButton(){ + document.getElementsByClassName("webedit")[0].style.display = "none"; +} +function hideActionButton(){ + document.getElementsByClassName("action")[0].style.display = "none"; +} +function showActionIfExist(index){ + var ids; + tab_action.map((el,id)=>{ + if(el.key==String(index)) + ids=el; + }) + if(ids && ids.val && ids.val=="true") + document.getElementsByClassName("action")[0].style.display = "inline-flex"; +} +function showWebEditIfExist(index){ + var ids; + tab_web.map((el,id)=>{ + if(el.key==String(index)) + ids=el; + }) + if(ids && ids.val && ids.val=="true") + document.getElementsByClassName("webedit")[0].style.display = "inline-flex"; +} +function showAskButtonIfExist(index){ + var ids; + tab_ask.map((el,id)=>{ + if(el.key==String(index)) + ids=el; + }) + if(ids && ids.val && ids.val!=""){ + document.getElementsByClassName("askdata")[0].style.display = "inline-flex"; + } +} +function getElementIndexByIndex(arr,index){ + var ids=-1; + arr.map((el,id)=>{ + if(el.key==String(index)) + ids=id; + }) + return ids +} +function navigateToSheet(workbook,sheetName,index){ + workbook.activateSheetAsync(sheetName).then(()=>{ + activeSheet=workbook.getActiveSheet(); + const removeElements = (elms) => elms.forEach(el => el.remove()); + removeElements( document.querySelectorAll(".filter_dropdown") ); + getFiltersForViz(index); + getParametersForViz(index); + showWebEditIfExist(index); + showActionIfExist(index); + showAskButtonIfExist(index); + // viz.addEventListener(tableau.TableauEventName.MARKS_SELECTION, onMarksSelection); + }); +} +function getOnlyText(from, to){ + from.map((el)=>{ + if(isNaN(el) && !/^(\d+|(\.\d+))(\.\d+)?%$/.test(el)){ + if(!to.includes(el)) + to.push(el); + } + }) + return to; +} +function clearFiltersMenu(){ + const removeElements = (elms) => elms.forEach(el => el.remove()); + removeElements( document.querySelectorAll(".filter_dropdown") ); +} +function restoreImgs(){ + tab_img.map((el)=>{ + if(document.getElementById(el.key)) + document.getElementById(el.key).setAttribute('src',el.val); + }) +} +function restoreTexts(){ + tab_text.map((el)=>{ + if(document.getElementById(el.key)) + document.getElementById(el.key).innerHTML=decodeURIComponent(el.val); + }) +} +function lengthInUtf8Bytes(str) { + var m = encodeURIComponent(str).match(/%[89ABab]/g); + return str.length + (m ? m.length : 0); +} +function setViewMenuVisibility(){ + var firstIndex=[]; + tab_server.map((s,ind)=>{ + if(s==""){ + document.querySelector(`.viz[index='${ind+1}']`).style.display='none'; + } + else{ + document.querySelector(`.viz[index='${ind+1}']`).style.display='inline-flex'; + firstIndex.push(ind); + } + }) + var lower=1000; + firstIndex.map((el)=>{ + lower=Math.min(lower,el) + }) + return lower; +} +function storeLastPageload(index){ + localStorage.setItem("lastpageloaded-grid",index); +} +function getLastPageload(index){ + var id=localStorage.getItem("lastpageloaded-grid"); + if(id!=null) + return parseInt(id); + return null; + +} +function getIndexFromViz(viz){ + return new Promise((resolve,reject)=>{ + viz.getCurrentUrlAsync().then (function(current_url){ + var index=tab_server.findIndex(element => element.includes(current_url.split("?")[0])); + resolve(index); + }) + }) +} +function findElement(arr,keyVal){ + var found = arr.filter(function(item) { return item.key === keyVal.toString(); }); + return found[0] || null; +} +function initialize(){ + if(typeof(tab_img)!="undefined"){ + restoreImgs(); + restoreTexts(); + if(title_index) + document.querySelector("head title").text=title_index; + } +} \ No newline at end of file diff --git a/Manufacturing_Embedded_Demo/lib/config.js b/Manufacturing_Embedded_Demo/lib/config.js new file mode 100644 index 0000000..8c3f46a --- /dev/null +++ b/Manufacturing_Embedded_Demo/lib/config.js @@ -0,0 +1,9 @@ +var tab_server = ["https://public.tableau.com/views/OO_Suppliers/Manufacturingdemo3-Suppliers?:showVizHome=no&:embed=true","https://public.tableau.com/views/OO_Production/Manufacturingdemo2-Production?:showVizHome=no&:embed=true","https://public.tableau.com/views/OO_Inventory/Manufacturingdemo1-Inventory?:showVizHome=no&:embed=true",""]; + var tab_filter=[[],[],[],[]]; + var tab_web=[{"key":"1","val":"false"},{"key":"2","val":"false"},{"key":"0","val":"false"},{"key":"3","val":"false"}]; + var tab_ask=[{"key":"3","val":""},{"key":"0","val":""},{"key":"1","val":""},{"key":"2","val":""}]; + var tab_param=[["Supplier name Parameter","Product Parameter (supplier)"],["Facility (group) Parameter"],["Product Parameter (supplier)","Supplier name Parameter"],[]]; + var tab_text=[{"key":"User-text","val":"Ozge%20Ozuyguntas"},{"key":"Download-Data-text","val":"Download%20Data%20"},{"key":"Action-text","val":"Action%20"},{"key":"Filter-text-Product Parameter (supplier)","val":"Product%20Name"},{"key":"Viz-1-text","val":"Suppliers%20Dashboard"},{"key":"WebEdit-text","val":"Web%20Edit%20"},{"key":"Terms-text","val":"Terms%20%26%20Conditions%20"},{"key":"Viz-4-text","val":"Viz%204%20"},{"key":"Reset-Viz-text","val":"Reset%20Viz%20"},{"key":"AskData-text","val":"Ask%20data%20"},{"key":"PrivacyPolicy-text","val":"Privacy%20Policy%20"},{"key":"Filter-text-Facility (group) Parameter","val":"Facility"},{"key":"Filter-text-Supplier name Parameter","val":"Supplier%20name"},{"key":"Viz-3-text","val":"Inventory%20Dashboard"},{"key":"Viz-2-text","val":"Production%20Dashboard"}]; + var tab_img=[{"key":"img-logo","val":"https://cdn-icons-png.flaticon.com/512/3787/3787840.png"},{"key":"img-avatar","val":"https://media.licdn.com/dms/image/D4E03AQENBTh5zbKnKg/profile-displayphoto-shrink_800_800/0/1667410706004?e=1706140800&v=beta&t=LLRyvCm8mm0e1EVbC5Y573yVJSedFNRmAzHEna6Q4VM"}]; + var tab_action=[{"key":"2","val":"false"},{"key":"1","val":"false"},{"key":"0","val":"true"},{"key":"3","val":"false"}]; + var title_index="OO_Manufacturing_Embedded_Demo"; \ No newline at end of file diff --git a/Manufacturing_Embedded_Demo/tableau.js b/Manufacturing_Embedded_Demo/tableau.js new file mode 100644 index 0000000..75da015 --- /dev/null +++ b/Manufacturing_Embedded_Demo/tableau.js @@ -0,0 +1,163 @@ +// This script contains all the Tableau JavaScript API calls needed +// The reference manual can be found here - https://help.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api_ref.htm +// The JS API Tutorial can be found here - https://help.tableau.com/samples/en-us/js_api/tutorial.htm +var viz,workbook, activeSheet, options, placeholderDiv,selectedMarks,askindex=-1; + +function loadVizInit () { + // This function kicks off the process + initialize(); + setViewMenuVisibility(); + if(getLastPageload()==null){ + loadVizByIndex(setViewMenuVisibility()); + } + else{ + loadVizByIndex(getLastPageload()); + } +} +function loadVizByIndex (index,force,device ="") { + // This function simply loads each dashboard + // If all from the same workbook we can use activateSheetAsync() and method of the workbook class + // https://help.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api_ref.htm#workbook_class + // If from different workbooks we need to reload the new viz from scratch + var url = tab_server[index]; + if(url=="") + return; + hideEditAskButton(); + hideActionButton(); + var isSameWorkbook=false; + if(workbook && !force && askindex==-1){ + var sheets = workbook.getPublishedSheetsInfo(); + sheets.map((sh)=>{ + if(sh.getUrl()==url){ + navigateToSheet(workbook,sh.getName(),index); + isSameWorkbook=true; + } + }) + } + if(!isSameWorkbook){ + placeholderDiv = document.getElementById("tableauViz"); + options = {device:device,width: '100%',height: '100%',hideTabs: true,hideToolbar: true,showShareOptions: false, + onFirstInteractive: function () { + workbook = viz.getWorkbook(); + activeSheet = workbook.getActiveSheet(); + getFiltersForViz(index); + getParametersForViz(index); + showWebEditIfExist(index); + showActionIfExist(index); + showAskButtonIfExist(index); + viz.addEventListener(tableau.TableauEventName.MARKS_SELECTION, onMarksSelection); + } + } + if(url){ + loadViz(placeholderDiv, url, options); + storeLastPageload(index); + } + } + askindex=-1; +} +function loadViz (placeholderDiv, url, options) { + // https://help.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api_concepts_initializing.htm + if(viz) + viz.dispose(); + viz = new tableau.Viz(placeholderDiv, url, options); + clearFiltersMenu(); +} +function launchAsk(){ + // This switches between view mode and Ask Data mode + if(askindex!=-1){ + loadVizByIndex(askindex,true); + askindex=-1; + return; + } + var containerDiv = document.getElementById("tableauViz"); + hideEditButton() + var ask_options = {width: '100%',height: '100%', + }; + viz.getCurrentUrlAsync().then(function(current_url){ + var indexv=tab_server.indexOf(current_url.split("?")[0]); + askindex=indexv; + loadViz (containerDiv, tab_ask[getElementIndexByIndex(tab_ask,indexv)].val, ask_options); + }) + +} +function launchEdit() { + // When embedding Web Edit this is the technique used - https://medium.com/@kannanmadhav/embedding-tableau-web-edit-in-a-web-application-246ff53eee76 + var containerDiv = document.getElementById("tableauViz"); + viz.getCurrentUrlAsync().then(function(current_url){ + hideEditAskButton() + edit_url = current_url.split('?')[0].replace('/views', '/authoring'); + edit_options = {hideTabs: true,hideToolbar: true,width: '100%',height: '100%', + onFirstInteractive: function () { + var iframe = document.querySelectorAll('iframe')[0]; + iframe.onload = function(){ + getIndexFromViz(viz).then (function(index){ + loadVizByIndex(index,true) + }) + } + } + }; + loadViz (containerDiv, edit_url, edit_options); + }) +} +function launchAction(){ + // Obtaining data from a Tableau dashboard via event listers + // This is an example of getting data from selected marks + // https://help.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api_concepts_events.htm + if(!selectedMarks){ + window.open('http://google.com/search?q=There is no selection :-)'); + return; + } + var textOnly=getOnlyText(selectedMarks,[]); + if(textOnly.length==0) + window.open('http://google.com/search?q=There are no text values in your selection :-)'); + if(lengthInUtf8Bytes(textOnly.join(" "))<1024) + window.open('http://google.com/search?q='+encodeURIComponent(textOnly.join(" "))); + else + window.open('http://google.com/search?q='+"Too many elements in your selection :-) Please reduce !"); +} +function onMarksSelection(marksEvent) { + getIndexFromViz(viz).then (function(index){ + if(findElement(tab_action,index) && findElement(tab_action,index).val=="true") + return marksEvent.getMarksAsync().then(reportSelectedMarks,(err)=>{alert("You don't have right to download data thus not able to see marks. Uncheck 'Actions' in the view settings")}); + }) +} +function reportSelectedMarks(marks) { + var curmarks = marks; + selectedMarks=[]; + for (var markIndex = 0; markIndex < curmarks.length; markIndex++) { + var pairs = curmarks[markIndex].getPairs(); + for (var pairIndex = 0; pairIndex < pairs.length; pairIndex++) { + var pair = pairs[pairIndex]; + selectedMarks.push(pair.value) + } + } +} +function applyFilter(filterName,value) { + // Filtering from the web page, pushing values into Tableau + // https://help.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api_concepts_filtering.htm + if(activeSheet.getSheetType()==tableau.SheetType.DASHBOARD) + activeSheet.getWorksheets().map((ws)=>{ + ws.applyFilterAsync(filterName,value,tableau.FilterUpdateType.REPLACE); + }) + else{ + activeSheet.applyFilterAsync(filterName,value,tableau.FilterUpdateType.REPLACE); + } + hideDropDownList(filterName); +} +function resetViz() { + // Action to rever the viz back to initial state + // Method of the viz class https://help.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api_ref.htm#viz_class + viz.revertAllAsync(); +} +function dataDownload() { + // Action to rever the viz back to initial state + // Method of the viz class https://help.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api_ref.htm#viz_class + viz.showExportDataDialog(); +} +function applyParam(paramName,value) { + // Same concept as filtering + // https://help.tableau.com/current/api/js_api/en-us/JavaScriptAPI/js_api_ref.htm#changeParameterValueAsync + workbook.changeParameterValueAsync(paramName, value) + hideDropDownList(paramName); +} +