{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH-stable/components/bp2019-theme-group-widget.js"],"names":["Morph","assertListenerInterface","ThemeGroupAddedAction","ThemeGroupUpdatedAction","ThemeGroupRemovedAction","generateUUID","COLOR_PICKER_BASE_ID","ThemeGroupWidget","initialize","name","isGlobal","listeners","themeSelect","get","addEditButton","addEventListener","_addEditButtonPressed","themeGroupList","addListener","listener","push","applyAction","action","_applyActionToAllListeners","initializeWithData","themes","_setSelectionOptions","removeThemeGroupListItem","themeGroupListItem","removeChild","_applyThemeGroupRemoved","uuid","editThemeGroupListItem","editedThemeGroupItem","_setUIToEdit","data","_clearSelectOptions","forEach","attribute","appendChild","Option","select","options","length","remove","_editThemeGroup","_addThemeGroup","newThemes","_getSelectedThemes","newName","_getThemeGroupName","updateThemes","updateName","_setToAddMode","innerHTML","undefined","themeGroupUUID","_generateCSSValidUUID","themeGroupName","newThemeGroup","_addThemeGroupToList","_applyThemeGroupAdded","selectedThemes","availableOptionsCount","i","option","selected","value","_setThemeGroupName","_setButtonToEdit","_preselectThemes","_prefilName","style","backgroundColor","getColor","availableThemeOptions","includes","themeGroup","_createThemeGroup","lively","create","setUUID","setName","setThemes","setParent","themeGroupAddedAction","_createNewThemeGroupAddedAction","color","checked","themeGroupRemovedAction","_createNewThemeGroupRemovedAction","themeGroupAction"],"mappings":"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","file":"bp2019-theme-group-widget.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js'\nimport { assertListenerInterface } from '../src/internal/individuals-as-points/common/interfaces.js'\nimport { ThemeGroupAddedAction, ThemeGroupUpdatedAction, ThemeGroupRemovedAction} from '../src/internal/individuals-as-points/common/actions.js'\nimport { generateUUID } from \"../src/internal/individuals-as-points/common/utils.js\"\n\n\nconst COLOR_PICKER_BASE_ID = \"theme-group-color-picker\"\n\nexport default class ThemeGroupWidget extends Morph {\n  async initialize() {    \n    this.name = \"group\"\n    this.isGlobal = false\n    this.listeners = []\n    this.themeSelect = this.get('#theme-select')\n    this.addEditButton = this.get('#add-theme-group')\n    this.addEditButton.addEventListener('click', () => this._addEditButtonPressed()) \n    \n    this.themeGroupList = this.get('#applied-theme-groups-container')\n  }\n  \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  \n  addListener(listener) {\n    assertListenerInterface(listener)\n    this.listeners.push(listener)\n  }\n  \n  applyAction(action) {\n    this._applyActionToAllListeners(action)\n  }\n  \n  initializeWithData(themes) {\n    this._setSelectionOptions(themes)\n  }\n  \n  removeThemeGroupListItem(themeGroupListItem) {\n    this.themeGroupList.removeChild(themeGroupListItem)\n    this._applyThemeGroupRemoved(themeGroupListItem.uuid)\n  }\n  \n  editThemeGroupListItem(themeGroupListItem) {\n    this.editedThemeGroupItem = themeGroupListItem\n    this._setUIToEdit()\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _setSelectionOptions(data) {\n    this._clearSelectOptions(this.themeSelect) \n    data.forEach( (attribute) => {\n      this.themeSelect.appendChild(new Option(attribute)) \n    }) \n  }\n  \n   _clearSelectOptions(select) {\n    while(select.options.length > 0) {\n      select.options.remove(0) \n    }\n  }\n  \n  _addEditButtonPressed() {\n    if(this.editedThemeGroupItem) {\n      this._editThemeGroup()\n    } else {\n      this._addThemeGroup()\n    }\n  }\n  \n  _editThemeGroup() {\n    let newThemes = this._getSelectedThemes()\n    let newName = this._getThemeGroupName()\n    \n    this.editedThemeGroupItem.updateThemes(newThemes)\n    this.editedThemeGroupItem.updateName(newName)\n    this._setToAddMode()\n  }\n  \n  _setToAddMode(){\n    this.addEditButton.innerHTML = \"Add theme group\"\n    this.editedThemeGroupItem = undefined\n  }\n  \n  async _addThemeGroup() {\n    let themeGroupUUID = this._generateCSSValidUUID()\n    let themes = this._getSelectedThemes()\n    let themeGroupName = this._getThemeGroupName()\n\n    let newThemeGroup = await this._addThemeGroupToList(themeGroupUUID, themes, themeGroupName)\n    this._applyThemeGroupAdded(newThemeGroup)\n  }\n  \n  _generateCSSValidUUID(){\n    return \"a\" + generateUUID()\n  }\n  \n  _getSelectedThemes() {\n    let selectedThemes = [] \n    let availableOptionsCount = this.themeSelect.options.length \n    \n    for(let i = 0; i < availableOptionsCount; i++){\n      let option = this.themeSelect.options[i] \n      if(option.selected){\n        selectedThemes.push(option.value) \n      }\n    }\n      \n    return selectedThemes \n  }\n  \n  _getThemeGroupName() {\n    return this.get('#theme-group-name').value\n  }\n  \n  _setThemeGroupName(name) {\n    this.get('#theme-group-name').value = name\n  }\n  \n  _setUIToEdit() {\n    this._setButtonToEdit()\n    this._preselectThemes(this.editedThemeGroupItem.themes)\n    this._prefilName(this.editedThemeGroupItem.name)\n  }\n  \n  _setButtonToEdit() {\n    this.addEditButton.innerHTML = \"Apply Edit\"\n    this.addEditButton.style.backgroundColor = this.editedThemeGroupItem.getColor()\n  }\n  \n  _preselectThemes(selectedThemes) {\n    let availableThemeOptions = this.themeSelect.options.length \n    \n    for(let i = 0; i < availableThemeOptions; i++){\n      let option = this.themeSelect.options[i] \n      option.selected = false\n      if(selectedThemes.includes(option.value)){\n        option.selected = true \n      }\n    }\n  }\n  \n  _prefilName(name) {\n    this._setThemeGroupName(name)\n  }\n  \n  \n  async _addThemeGroupToList(themeGroupUUID, themes, themeGroupName) {\n    let themeGroup = await this._createThemeGroup(themeGroupUUID, themeGroupName, themes)\n    this.themeGroupList.appendChild(themeGroup)\n    return themeGroup\n  }\n  \n  async _createThemeGroup(themeGroupUUID, themeGroupName, themes) {\n    let themeGroupListItem = await lively.create(\"bp2019-theme-group-list-item-widget\")\n    \n    themeGroupListItem.setUUID(themeGroupUUID)\n    themeGroupListItem.setName(themeGroupName)\n    themeGroupListItem.setThemes(themes)\n    themeGroupListItem.setParent(this)\n    \n    return themeGroupListItem\n  }\n  \n  _applyThemeGroupAdded(themeGroupListItem){\n    let themeGroupAddedAction = this._createNewThemeGroupAddedAction(\n      themeGroupListItem.uuid,\n      themeGroupListItem.name,\n      themeGroupListItem.themes,\n      themeGroupListItem.color)\n    \n    this._applyActionToAllListeners(themeGroupAddedAction)\n  }\n  \n  _createNewThemeGroupAddedAction(themeGroupUUID, themeGroupName, themes, color){\n    let isGlobal = this.get('#is-global').checked\n    \n    return new ThemeGroupAddedAction(themeGroupUUID, themeGroupName, themes, isGlobal, color)\n  }\n \n  _applyThemeGroupRemoved(themeGroupUUID){\n    let themeGroupRemovedAction = this._createNewThemeGroupRemovedAction(themeGroupUUID)\n    this._applyActionToAllListeners(themeGroupRemovedAction)\n  }\n  \n  _createNewThemeGroupRemovedAction(themeGroupUUID){\n    let isGlobal = this.get('#is-global').checked\n    \n    return new ThemeGroupRemovedAction(themeGroupUUID, isGlobal)\n  }\n  \n  _applyActionToAllListeners(themeGroupAction) {\n    debugger;\n    this.listeners.forEach(listener => {\n      listener.applyAction(themeGroupAction)\n    })\n  }\n  \n}"]}