{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/components/tab-widget.js"],"names":["Morph","TabWidget","initialize","contentsMap","_getContentsMap","_initializeButtons","buttonsMap","_getButtonsMap","_showFirstContent","getContents","contents","Object","keys","forEach","contentKey","push","contentDivs","get","children","contentDiv","getAttribute","buttons","button","buttonID","addEventListener","_showContent","_contentsExist","length","keyOfFirstContent","content","_resetDisplay","style","display","_activateButtonForContent","id","classList","add","_hideContent","_disableButtonForContent","remove"],"mappings":";;;;;;AAAOA,W;;;;;;;;;;;;;;;;;;AAEQ,YAAMC,SAAN,SAAwBD,KAAxB,CAA8B;;AAE3C,cAAME,UAAN,GAAmB;AACjB,eAAKC,WAAL,GAAmB,KAAKC,eAAL,EAAnB;AACA,eAAKC,kBAAL;AACA,eAAKC,UAAL,GAAkB,KAAKC,cAAL,EAAlB;;AAEA,eAAKC,iBAAL;AACD;;AAED;AACA;AACA;;AAEAC,sBAAc;AACZ,cAAIC,WAAW,EAAf;AACAC,iBAAOC,IAAP,CAAY,KAAKT,WAAjB,EAA8BU,OAA9B,CAAwCC,UAAD,IAAgB;AACrDJ,qBAASK,IAAT,CAAc,KAAKZ,WAAL,CAAiBW,UAAjB,CAAd;AACD,WAFD;AAGA,iBAAOJ,QAAP;AACD;;AAED;AACA;AACA;;AAEAN,0BAAkB;AAChB,cAAIM,WAAW,EAAf;AACA,cAAIM,cAAc,KAAKC,GAAL,CAAS,eAAT,EAA0BC,QAA5C;AACA,eAAK,IAAIC,UAAT,IAAuBH,WAAvB,EAAoC;AAClCN,qBAASS,WAAWC,YAAX,CAAwB,IAAxB,CAAT,IAA0CD,UAA1C;AACD;AACD,iBAAOT,QAAP;AACD;;AAEDH,yBAAiB;AACf,cAAID,aAAa,EAAjB;AACA,cAAIe,UAAU,KAAKJ,GAAL,CAAS,cAAT,EAAyBC,QAAvC;AACA,eAAK,IAAII,MAAT,IAAmBD,OAAnB,EAA4B;AAC1B,gBAAIE,WAAWD,OAAOF,YAAP,CAAoB,iBAApB,CAAf;AACAd,uBAAWiB,QAAX,IAAuBD,MAAvB;AACC;AACH,iBAAOhB,UAAP;AACD;;AAEDD,6BAAqB;AACnB,cAAIgB,UAAU,KAAKJ,GAAL,CAAS,cAAT,EAAyBC,QAAvC;AACA,eAAK,IAAII,MAAT,IAAmBD,OAAnB,EAA4B;AAC1BC,mBAAOE,gBAAP,CAAwB,OAAxB,EAAiC,MAAM;AACrC,mBAAKC,YAAL,CAAkB,KAAKtB,WAAL,CAAiBmB,OAAOF,YAAP,CAAoB,iBAApB,CAAjB,CAAlB;AACD,aAFD;AAGD;AACF;;AAEDM,yBAAiB;AACf,iBAAOf,OAAOC,IAAP,CAAY,KAAKT,WAAjB,EAA8BwB,MAA9B,GAAuC,CAA9C;AACD;;AAEDnB,4BAAoB;AAClB,cAAG,KAAKkB,cAAL,EAAH,EAA0B;AACxB,gBAAIE,oBAAoBjB,OAAOC,IAAP,CAAY,KAAKT,WAAjB,EAA8B,CAA9B,CAAxB;AACA,iBAAKsB,YAAL,CAAkB,KAAKtB,WAAL,CAAiByB,iBAAjB,CAAlB;AACD;AACF;;AAEDH,qBAAaI,OAAb,EAAsB;AACpB,eAAKC,aAAL;AACAD,kBAAQE,KAAR,CAAcC,OAAd,GAAwB,OAAxB;AACA,eAAKC,yBAAL,CAA+BJ,OAA/B;AACD;;AAEDI,kCAA0BJ,OAA1B,EAAmC;AACjC,eAAKvB,UAAL,CAAgBuB,QAAQK,EAAxB,EAA4BC,SAA5B,CAAsCC,GAAtC,CAA0C,QAA1C;AACD;;AAEDN,wBAAgB;AACdnB,iBAAOC,IAAP,CAAY,KAAKT,WAAjB,EAA8BU,OAA9B,CAAuCC,cAAc;AACnD,gBAAIe,UAAU,KAAK1B,WAAL,CAAiBW,UAAjB,CAAd;AACA,iBAAKuB,YAAL,CAAkBR,OAAlB;AACA,iBAAKS,wBAAL,CAA8BT,OAA9B;AACD,WAJD;AAKD;;AAEDQ,qBAAaR,OAAb,EAAsB;AACpBA,kBAAQE,KAAR,CAAcC,OAAd,GAAwB,MAAxB;AAED;;AAEDM,iCAAyBT,OAAzB,EAAkC;AAChC,eAAKvB,UAAL,CAAgBuB,QAAQK,EAAxB,EAA4BC,SAA5B,CAAsCI,MAAtC,CAA6C,QAA7C;AACD;;AA1F0C;;yBAAxBtC,S","file":"tab-widget.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js'\n\nexport default class TabWidget extends Morph {\n  \n  async initialize() {\n    this.contentsMap = this._getContentsMap();\n    this._initializeButtons();\n    this.buttonsMap = this._getButtonsMap();\n    \n    this._showFirstContent();\n  }\n  \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  \n  getContents() {\n    let contents = [];\n    Object.keys(this.contentsMap).forEach( (contentKey) => {\n      contents.push(this.contentsMap[contentKey]);\n    })\n    return contents;\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _getContentsMap() {\n    let contents = {};\n    let contentDivs = this.get(\"#tab-contents\").children;\n    for (let contentDiv of contentDivs) {\n      contents[contentDiv.getAttribute(\"id\")] = contentDiv;\n    }\n    return contents;\n  }\n  \n  _getButtonsMap() {\n    let buttonsMap = {};\n    let buttons = this.get(\"#tab-buttons\").children\n    for (let button of buttons) {\n      let buttonID = button.getAttribute('data-content-id');\n      buttonsMap[buttonID] = button;\n      }\n    return buttonsMap;\n  }\n  \n  _initializeButtons() {\n    let buttons = this.get(\"#tab-buttons\").children\n    for (let button of buttons) {\n      button.addEventListener(\"click\", () => {\n        this._showContent(this.contentsMap[button.getAttribute(\"data-content-id\")])\n      })\n    }\n  }\n  \n  _contentsExist() {\n    return Object.keys(this.contentsMap).length > 0\n  }\n  \n  _showFirstContent() {\n    if(this._contentsExist()) {\n      let keyOfFirstContent = Object.keys(this.contentsMap)[0];\n      this._showContent(this.contentsMap[keyOfFirstContent]);\n    }\n  }\n\n  _showContent(content) {\n    this._resetDisplay()\n    content.style.display = \"block\"\n    this._activateButtonForContent(content);\n  }\n  \n  _activateButtonForContent(content) {\n    this.buttonsMap[content.id].classList.add('active');\n  }\n  \n  _resetDisplay() {\n    Object.keys(this.contentsMap).forEach( contentKey => {\n      let content = this.contentsMap[contentKey];\n      this._hideContent(content);\n      this._disableButtonForContent(content);\n    })\n  }\n  \n  _hideContent(content) {\n    content.style.display = \"none\";\n\n  }\n  \n  _disableButtonForContent(content) {\n    this.buttonsMap[content.id].classList.remove('active');\n  }\n  \n}\n"]}