{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/components/bp2019-venn-widget.js"],"names":["assertListenerInterface","d3","VennDiagram","Morph","ThemeGroupAddedAction","ThemeGroupUpdatedAction","ThemeGroupRemovedAction","ColorAction","ColorStore","DataProcessor","CANVAS_WIDTH","CANVAS_HEIGHT","VennWidget","initialize","listeners","name","vennDiagram","get","setData","individuals","valuesByAttribute","initializeWithIndividualsFromKenia","initializeWithValuesByAttribute","getValuesByAttribute","_initializeWithData","applyActionFromRootApplication","action","_dispatchAction","applyAction","isGlobal","_applyActionToListeners","lively","notify","addListener","listener","push","stop","stopSimulation","_registerControlWidget","_initializeVennDiagramWithData","controlMenu","initializeAfterDataFetch","initializeWithData","forEach","_addThemeGroup","_updateThemeGroup","_removeThemeGroup","_colorIndividuals","_handleNotSupportedAction","addedAction","addThemeGroup","uuid","themes","color","updatedAction","updateThemeGroup","removedAction","removeThemeGroup","colorAction","recolorIndividuals"],"mappings":";;;;;;AAASA,6B,qDAAAA,uB;;AACFC,Q;;AACAC,iB;;AACAC,W;;AACEC,2B,kDAAAA,qB;AAAuBC,6B,kDAAAA,uB;AAAyBC,6B,kDAAAA,uB;AAAyBC,iB,kDAAAA,W;;AAC3EC,gB;;AACAC,mB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,YAAMC,eAAe,IAArB;;;;;;;;;;;;;;;;;;AACA,YAAMC,gBAAgB,GAAtB;;;;;;;;;;;;;;;;;;AAEQ,YAAMC,UAAN,SAAyBT,KAAzB,CAA+B;AAC5C,cAAMU,UAAN,GAAmB;AACjB,eAAKC,SAAL,GAAiB,EAAjB;AACA,eAAKC,IAAL,GAAY,aAAZ;;AAEA,eAAKC,WAAL,GAAmB,IAAId,WAAJ,CAAgB,KAAKe,GAAL,CAAS,qBAAT,CAAhB,CAAnB;AACD;;AAGD;AACA;AACA;;;AAGA;;AAEA,cAAMC,OAAN,CAAcC,WAAd,EAA2B;AACzB,eAAKA,WAAL,GAAmBA,WAAnB;AACA,cAAGV,cAAcW,iBAAjB,EAAoC;AACjCX,0BAAcY,kCAAd,CAAiDF,WAAjD;AACDX,uBAAWc,+BAAX,CAA2Cb,cAAcc,oBAAd,EAA3C;AACD;AACD,eAAKC,mBAAL;AACD;;AAED,cAAMC,8BAAN,CAAqCC,MAArC,EAA6C;AAC1C,eAAKC,eAAL,CAAqBD,MAArB;AACF;;AAED;;AAEAE,oBAAYF,MAAZ,EAAmB;AACjB,cAAGA,OAAOG,QAAV,EAAmB;AACjB,iBAAKC,uBAAL,CAA6BJ,MAA7B;AACD,WAFD,MAEO;AACL,iBAAKC,eAAL,CAAqBD,MAArB;AACD;;AAEDK,iBAAOC,MAAP,CAAc,yBAAd;AAED;;AAEDC,oBAAYC,QAAZ,EAAsB;AACpBlC,kCAAwBkC,QAAxB;AACA,eAAKpB,SAAL,CAAeqB,IAAf,CAAoBD,QAApB;AACD;;AAED,cAAME,IAAN,GAAY;AACV,eAAKpB,WAAL,CAAiBqB,cAAjB;AACD;;AAED;AACA;AACA;;AAEAb,8BAAqB;AACnB,eAAKc,sBAAL;AACA,eAAKC,8BAAL;AACD;;AAEDD,iCAAyB;AACvB,cAAIE,cAAc,KAAKvB,GAAL,CAAS,6BAAT,CAAlB;AACAuB,sBAAYP,WAAZ,CAAwB,IAAxB;AACAO,sBAAYC,wBAAZ,CAAqC,KAAKtB,WAA1C;AACD;;AAEDoB,yCAAiC;AAC/B,eAAKvB,WAAL,CAAiB0B,kBAAjB,CAAoC,KAAKvB,WAAzC;AACD;;AAEDW,gCAAwBJ,MAAxB,EAA+B;AAC7B,eAAKZ,SAAL,CAAe6B,OAAf,CAAwBT,QAAD,IAAc;AACnCA,qBAASN,WAAT,CAAqBF,MAArB;AACD,WAFD;AAGD;;AAGDC,wBAAgBD,MAAhB,EAAwB;AACtB,kBAAO,IAAP;AACE,iBAAMA,kBAAkBtB,qBAAxB;AACE,mBAAKwC,cAAL,CAAoBlB,MAApB;AACA;AACF,iBAAMA,kBAAkBrB,uBAAxB;AACE,mBAAKwC,iBAAL,CAAuBnB,MAAvB;AACA;AACF,iBAAMA,kBAAkBpB,uBAAxB;AACE,mBAAKwC,iBAAL,CAAuBpB,MAAvB;AACA;AACF,iBAAMA,kBAAkBnB,WAAxB;AACE,mBAAKwC,iBAAL,CAAuBrB,MAAvB;AACA;AACF;AACE,mBAAKsB,yBAAL,CAA+BtB,MAA/B;AAdJ;AAgBD;;AAEDkB,uBAAeK,WAAf,EAA2B;AACzB,eAAKjC,WAAL,CAAiBkC,aAAjB,CACED,YAAYE,IADd,EAEEF,YAAYlC,IAFd,EAGEkC,YAAYG,MAHd,EAIEH,YAAYI,KAJd;AAKD;;AAEDR,0BAAkBS,aAAlB,EAAgC;AAC9B,eAAKtC,WAAL,CAAiBuC,gBAAjB,CACED,cAAcH,IADhB,EAEEG,cAAcvC,IAFhB,EAGEuC,cAAcF,MAHhB,EAIEE,cAAcD,KAJhB;AAKD;;AAEDP,0BAAkBU,aAAlB,EAAgC;AAC9B,eAAKxC,WAAL,CAAiByC,gBAAjB,CAAkCD,cAAcL,IAAhD;AACD;;AAEDJ,0BAAkBW,WAAlB,EAA8B;AAC5B,eAAK1C,WAAL,CAAiB2C,kBAAjB,CAAoCD,WAApC;AACD;;AAGDV,kCAA0BtB,MAA1B,EAAkC;AAChCK,iBAAOC,MAAP,CAAc,KAAKjB,IAAL,GAAY,4BAAZ,GAA2CW,OAAOX,IAAhE;AACD;;AA3H2C;;yBAAzBH,U","file":"bp2019-venn-widget.js","sourcesContent":["import { assertListenerInterface } from \"../src/internal/individuals-as-points/common/interfaces.js\"\nimport d3 from \"src/external/d3.v5.js\"\nimport VennDiagram from \"../src/internal/individuals-as-points/venn/venn-diagram.js\"\nimport Morph from 'src/components/widgets/lively-morph.js'\nimport { ThemeGroupAddedAction, ThemeGroupUpdatedAction, ThemeGroupRemovedAction, ColorAction } from \"../src/internal/individuals-as-points/common/actions.js\"\nimport ColorStore from '../src/internal/individuals-as-points/common/color-store.js'\nimport DataProcessor from '../src/internal/individuals-as-points/common/data-processor.js'\n\nexport const CANVAS_WIDTH = 1000\nexport const CANVAS_HEIGHT = 800\n\nexport default class VennWidget extends Morph {\n  async initialize() {\n    this.listeners = []\n    this.name = \"venn-widget\"\n    \n    this.vennDiagram = new VennDiagram(this.get('#venn-widget-canvas'))\n  }\n  \n  \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  \n\n  // *** Interface to application ***\n  \n  async setData(individuals) {\n    this.individuals = individuals;\n    if(DataProcessor.valuesByAttribute) {\n       DataProcessor.initializeWithIndividualsFromKenia(individuals);\n      ColorStore.initializeWithValuesByAttribute(DataProcessor.getValuesByAttribute());\n    }\n    this._initializeWithData()\n  }\n  \n  async applyActionFromRootApplication(action) {\n     this._dispatchAction(action)\n  }\n  \n  // *** Interface to control menu ***\n  \n  applyAction(action){\n    if(action.isGlobal){\n      this._applyActionToListeners(action)\n    } else {\n      this._dispatchAction(action)\n    }\n    \n    lively.notify(\"venn received an action\")   \n    \n  }\n  \n  addListener(listener) {\n    assertListenerInterface(listener);\n    this.listeners.push(listener);\n  }\n  \n  async stop(){\n    this.vennDiagram.stopSimulation()\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _initializeWithData(){\n    this._registerControlWidget()\n    this._initializeVennDiagramWithData()\n  }\n  \n  _registerControlWidget() {\n    let controlMenu = this.get(\"#venn-widget-control-widget\")\n    controlMenu.addListener(this)\n    controlMenu.initializeAfterDataFetch(this.individuals)\n  }\n  \n  _initializeVennDiagramWithData() {\n    this.vennDiagram.initializeWithData(this.individuals)\n  }\n    \n  _applyActionToListeners(action){\n    this.listeners.forEach((listener) => {\n      listener.applyAction(action);\n    })\n  }\n  \n  \n  _dispatchAction(action) {\n    switch(true) {\n      case (action instanceof ThemeGroupAddedAction):\n        this._addThemeGroup(action);\n        break;\n      case (action instanceof ThemeGroupUpdatedAction):\n        this._updateThemeGroup(action);\n        break;\n      case (action instanceof ThemeGroupRemovedAction):\n        this._removeThemeGroup(action);\n        break;\n      case (action instanceof ColorAction):\n        this._colorIndividuals(action);\n        break;\n      default:\n        this._handleNotSupportedAction(action);\n     }\n  }\n  \n  _addThemeGroup(addedAction){\n    this.vennDiagram.addThemeGroup(\n      addedAction.uuid,\n      addedAction.name, \n      addedAction.themes, \n      addedAction.color)\n  }\n  \n  _updateThemeGroup(updatedAction){\n    this.vennDiagram.updateThemeGroup(\n      updatedAction.uuid,\n      updatedAction.name, \n      updatedAction.themes, \n      updatedAction.color)\n  }\n  \n  _removeThemeGroup(removedAction){\n    this.vennDiagram.removeThemeGroup(removedAction.uuid)\n  }\n  \n  _colorIndividuals(colorAction){\n    this.vennDiagram.recolorIndividuals(colorAction)\n  }\n\n  \n  _handleNotSupportedAction(action) {\n    lively.notify(this.name + \" can't apply this action: \" + action.name);\n  }\n\n}"]}