{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH-stable/components/bp2019-tab-widget.js"],"names":["Morph","TabWidget","initialize","buttons","get","contents","contentsMap","_getContentsMap","_initializeButtons","buttonsMap","_getButtonsMap","_showFirstContent","getContents","Object","keys","forEach","contentKey","push","setExtent","extent","buttonExtent","lively","getExtent","contentExtent","subPt","pt","y","content","children","contentDivs","contentDiv","getAttribute","button","buttonID","addEventListener","_showContent","_contentsExist","length","keyOfFirstContent","_resetDisplay","style","display","_sendActivatedCallToNowVisibleContent","_activateButtonForContent","activate","catch","id","classList","add","_hideContent","_disableButtonForContent","remove"],"mappings":"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","file":"bp2019-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.buttons = this.get(\"#tab-buttons\")\n    this.contents = this.get(\"#tab-contents\")\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  setExtent(extent) {\n    let buttonExtent = lively.getExtent(this.buttons)\n    let contentExtent = extent.subPt(lively.pt(0, buttonExtent.y))\n    for (let content of this.contents.children) {\n      content.setExtent(contentExtent)\n    }\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _getContentsMap() {\n    let contents = {};\n    let contentDivs = this.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.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.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._sendActivatedCallToNowVisibleContent(content);\n    this._activateButtonForContent(content);\n  }\n  \n  _sendActivatedCallToNowVisibleContent(content){\n    if (content.activate) content.activate().catch(() => {});\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"]}