{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/src/internal/individuals-as-points/venn/force-center-annotation.js"],"names":["Annotation","constructor","forceCenterThemeGroups","individuals","hidden","x","y","heading","_generateHeading","contentItems","html","_generateHTML","length","_hide","updatePosition","forceCenterX","forceCenterY","_setPositionRelative","toggle","_show","removeHTML","parentNode","removeChild","_setVisibilityToHidden","_setVisibilityToVisibile","style","left","top","delimiter","forEach","forceCenterThemeGroup","name","_removeLastCharacters","_generateContent","content","themeGroupString","_generateStringForThemeGroup","push","_filterEmptyString","filter","themeGroup","themes","theme","annotationRootAsHTML","_buildAnnotationRootDiv","annotationHeadingAsHTML","_buildAnnotationHeadingParagraph","appendChild","_annotationContentIsAvailable","annotationContentAsHTML","_buildAnnotationContentParagraph","rootDiv","Object","assign","_getStylePropertiesForRootDiv","position","textAlign","width","padding","marginTop","font","background","zIndex","visibility","borderRadius","color","_getStylePropertiesForList","listStylePosition","headingParagraph","innerHTML","classList","add","_getBootstrapStylesForHeading","contentList","_appendThemesAsListItems","contentItem","listItem","_getBootstrapStylesForContentList","_getBootstrapStylesForContentItem","text","numberOfCharacters","substring"],"mappings":"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","file":"force-center-annotation.js","sourcesContent":["export default class Annotation {\n  constructor(forceCenterThemeGroups) {\n    this.forceCenterThemeGroups = forceCenterThemeGroups\n    this.individuals = []\n    this.hidden = false\n    this.x = null\n    this.y = null\n    this.heading = this._generateHeading()\n    //this.contentItems = this._generateContent()\n    this.contentItems = []\n    this.html = this._generateHTML()\n    \n    if (this.forceCenterThemeGroups.length > 1) {\n      this._hide()\n    }\n  }\n  \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  \n  updatePosition(forceCenterX, forceCenterY) {\n    this._setPositionRelative(forceCenterX, forceCenterY)\n  }\n  \n  toggle() {\n    if(this.hidden) {\n      this._show()\n    } else {\n      this._hide()\n    }\n  }\n  \n  removeHTML() {\n    this.html.parentNode.removeChild(this.html)\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _hide() {\n    this.hidden = true\n    this._setVisibilityToHidden()\n  }\n  \n  _show() {\n    this.hidden = false\n    this._setVisibilityToVisibile()\n  }\n  \n  _setPositionRelative(forceCenterX, forceCenterY) {\n    this.html.style.left = (forceCenterX + 20) + \"px\"\n    this.html.style.top =  (forceCenterY + 20) + \"px\"\n  }\n  \n  _generateHeading() {\n    let heading = ''\n    let delimiter = ' & '\n    this.forceCenterThemeGroups.forEach(forceCenterThemeGroup => {\n      heading += forceCenterThemeGroup.name + delimiter\n    })\n    heading = this._removeLastCharacters(heading, delimiter.length)\n    return heading\n  }\n  \n  _generateContent() {\n    let content = []\n    this.forceCenterThemeGroups.forEach( forceCenterThemeGroup => {\n      let themeGroupString = this._generateStringForThemeGroup(forceCenterThemeGroup)\n      content.push(themeGroupString)\n    })\n    return this._filterEmptyString(content)\n  }\n  \n  _filterEmptyString(content) {\n    return content.filter(themeGroupString => themeGroupString.length)\n  }\n  \n  _generateStringForThemeGroup(themeGroup) {\n    let themeGroupString = ''\n    let delimiter = ' or '\n    themeGroup.themes.forEach( theme => {\n      themeGroupString += theme + delimiter\n    })\n    themeGroupString = this._removeLastCharacters(themeGroupString, delimiter.length)\n    return themeGroupString\n  }\n  \n  _generateHTML() {\n    let annotationRootAsHTML = this._buildAnnotationRootDiv();\n    let annotationHeadingAsHTML = this._buildAnnotationHeadingParagraph()\n    \n    annotationRootAsHTML.appendChild(annotationHeadingAsHTML)\n    \n    if(this._annotationContentIsAvailable()) {\n      let annotationContentAsHTML = this._buildAnnotationContentParagraph()\n      annotationRootAsHTML.appendChild(annotationContentAsHTML)\n    }\n    \n    return annotationRootAsHTML\n  }\n  \n  _annotationContentIsAvailable() {\n    return this.contentItems.length\n  }\n  \n  _buildAnnotationRootDiv() {\n    let rootDiv = <div></div>;\n    Object.assign(rootDiv.style, this._getStylePropertiesForRootDiv())\n    return rootDiv\n  }\n  \n  _getStylePropertiesForRootDiv() {\n    return {\n      position: 'absolute',\n      textAlign: 'center',\n      width: 'auto',\n      padding: '5px',\n      marginTop: '-20px',\n      font: '10px sans-serif',\n      background: 'rgba(100, 100, 100, 0.5)',\n      zIndex: '100',\n      visibility: 'visible',\n      borderRadius: \"10px\",\n      color: \"white\"\n    }\n  }\n    \n  _getStylePropertiesForList() {\n    return {\n      textAlign: 'left',\n      padding: '1px',\n      font: '10px sans-serif',\n      listStylePosition: \"inside\"\n    }\n  }\n  \n  _buildAnnotationHeadingParagraph() {\n    let headingParagraph = <p></p>;\n    headingParagraph.innerHTML = this.heading\n    headingParagraph.classList.add(...this._getBootstrapStylesForHeading())\n    return headingParagraph\n  }\n  \n  _getBootstrapStylesForHeading() {\n    return [\n      \"mb-0\",\n      \"text-center\",\n      \"font-weight-bold\"\n    ]\n  }\n  \n  _buildAnnotationContentParagraph() {\n    let contentList = <ul></ul>;\n    contentList = this._appendThemesAsListItems(contentList)\n    Object.assign(contentList.style, this._getStylePropertiesForList())\n    //contentList.classList.add(...this._getBootstrapStylesForContentList())\n    return contentList\n  }\n  \n  _appendThemesAsListItems(contentList) {\n    this.contentItems.forEach( contentItem => {\n      let listItem = <li></li>;\n      listItem.innerHTML = contentItem\n      //listItem.classList.add(...this._getBootstrapStylesForContentItem())\n      contentList.appendChild(listItem)\n    })\n    return contentList\n  }\n  \n  _getBootstrapStylesForContentList() {\n    return [\n      'list-group'\n    ]\n  }\n  \n  _getBootstrapStylesForContentItem() {\n    return [\n      'list-group-item',\n      'py-1'\n    ]\n  }\n    \n  // ------------------------------------------\n  // Utils\n  // ------------------------------------------\n  \n  _removeLastCharacters(text, numberOfCharacters) {\n    return text.substring(0, text.length - numberOfCharacters);\n  }\n  \n  _setVisibilityToVisibile() {\n    this.html.style.visibility = 'visible'\n  }\n  \n  _setVisibilityToHidden() {\n    this.html.style.visibility = 'hidden'\n  }\n}"]}