{"version":3,"file":"app-32d1c302.981ca8458d389c9a476a.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AAIA;;AAKA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;AAIA;AACA;AAIA;AAAA;AACA;AAAA;AAeA;AAjBA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AADA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AA5KA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;AClDA;;AAEA;AACA;;AAEA;AACA;;AAGA;AACA;AAGA;AAAA;AACA;AAAA;AACA;AAAA;AALA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAMA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAIA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAOA;AATA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAIA;AACA;;AAGA;AACA;AACA;AAEA;;AAGA;;AAEA;AACA;AAEA;AADA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;;AAEA;AACA;;AAMA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;;AAIA;AACA;AAQA;AAAA;AAOA;AARA;AAAA;AAGA;AAAA;AACA;AACA;AAQA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AApFA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACzCA;;AAEA;AACA;;AAOA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAKA;AAPA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;;AAEA;AACA;;AAOA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAGA;AAAA;AACA;AAAA;AAKA;AAvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA;AAAA;AAIA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CA;;AAEA;AACA;AACA;;AAOA;AACA;AACA;;AAEA;AACA;AACA;;AAKA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAGA;AACA;AAQA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AASA;AAlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;ACrDA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAGA;AAFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AChDA;;AAEA;AACA;;AAOA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AAOA;AAAA;AACA;AAAA;AACA;AAAA;AAMA;AATA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAOA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAvDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCA;;AAEA;AACA;AACA;;AAQA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAQA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAQA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAGA;AACA;AAIA;AAHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAIA;AAHA;AACA;AACA;AACA;AACA;AAGA;;AAGA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AA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A;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;;AAEA;AACA;AACA;;AAOA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAGA;AACA;AAOA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAOA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AACA;AACA;AAOA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/KA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;AC9CA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA","sources":["webpack://latinera/./sources/components/private/conjunction-lemma-form.js","webpack://latinera/./sources/components/private/conjunction-lemma-item.js","webpack://latinera/./sources/components/private/dashboard-activated-offers.js","webpack://latinera/./sources/components/private/dashboard-recent-activities.js","webpack://latinera/./sources/components/private/dashboard-user-credit.js","webpack://latinera/./sources/components/private/definition-item.js","webpack://latinera/./sources/components/private/definition.js","webpack://latinera/./sources/components/private/definition/load-definitions.js","webpack://latinera/./sources/components/private/generator-item.js","webpack://latinera/./sources/components/private/generator.js","webpack://latinera/./sources/components/private/generator/load-generators-data.js","webpack://latinera/./sources/components/private/gerundive-inflection-item.js","webpack://latinera/./sources/components/private/gerundive-inflector-item.js","webpack://latinera/./sources/components/private/gerundive-lemma-item.js","webpack://latinera/./sources/components/private/in-child-element.js","webpack://latinera/./sources/components/private/in-element.js","webpack://latinera/./sources/components/private/in-inflector.js","webpack://latinera/./sources/components/private/conjunction-lemma-form.html","webpack://latinera/./sources/components/private/conjunction-lemma-item.html","webpack://latinera/./sources/components/private/dashboard-activated-offers.html","webpack://latinera/./sources/components/private/dashboard-recent-activities.html","webpack://latinera/./sources/components/private/dashboard-user-credit.html","webpack://latinera/./sources/components/private/definition-item.html","webpack://latinera/./sources/components/private/definition.html","webpack://latinera/./sources/components/private/generator-item.html","webpack://latinera/./sources/components/private/generator.html","webpack://latinera/./sources/components/private/gerundive-inflection-item.html","webpack://latinera/./sources/components/private/gerundive-inflector-item.html","webpack://latinera/./sources/components/private/gerundive-lemma-item.html","webpack://latinera/./sources/components/private/in-child-element.html","webpack://latinera/./sources/components/private/in-element.html","webpack://latinera/./sources/components/private/in-inflector.html"],"sourcesContent":["// Define the view-model for the \"conjunction-lemma-form\" component\n\n// Import library modules\nimport { inject, computedFrom, bindable, bindingMode } from \"aurelia-framework\";\nimport { Validator } from \"aurelia-validation\";\nimport { I18N } from \"aurelia-i18n\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { cyrb53 as computeHash } from \"utilities/hash\";\nimport { hasTonicAccents } from \"utilities/latin\";\nimport { normalizeWords } from \"utilities/sentence\";\nimport { optimizeSpaces } from \"utilities/string\";\nimport { pause } from \"utilities/promise\";\nimport { clone } from \"utilities/etc\";\nimport {\n unsetProperties,\n toString\n} from \"utilities/object\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { \n processInputFieldChangeEventAfterMs,\n processInputFieldBlurEventAfterMs\n} from \"parameters/time\";\nimport { \n shortConjunctionLemmaTypes,\n conjunctionLemmaInputFormData as defaultConjunctionLemmaInputFormData\n} from \"parameters/lemma\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [\n { name: \"conjunctionTypeChanged\" },\n { name: \"conjunctionTextChanged\" },\n { name: \"conjunctionHoldsSubjunctiveMoodChanged\" },\n { name: \"lemmaInflectionsChanged\" },\n];\n\n\n// Export ConjunctionLemmaForm class\n@inject(I18N, Validator, EventService)\nexport class ConjunctionLemmaForm {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.twoWay }) inElementData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n rawFormData = clone(defaultConjunctionLemmaInputFormData);\n lemmaData = null;\n lemmaDataDigest = \"\";\n oldLemmaDataDigest = \"\";\n lemmaDataValid = false;\n lemmaDataReady = false;\n holdsSubjunctiveMood = false;\n showTextInputFieldHint = false;\n showLemmaDefinitions = false;\n validationErrorsData = [];\n i18nParams = i18nParams;\n\n constructor(i18n, validator, eventService) {\n this.i18n = i18n;\n this.validator = validator;\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"conjunctionLemmaForm\",\n eventService: this.eventService,\n eventsData\n });\n\n const conjunctionLemmaTypesData = shortConjunctionLemmaTypes\n .map(shortConjunctionLemmaType => ({\n value: shortConjunctionLemmaType,\n text: this.i18n\n .tr(`enums:longConjunctionLemmaType.${shortConjunctionLemmaType}`)\n }));\n const nullLemmaDegreeData = {\n value: null,\n text: this.i18n.tr(`main:none`)\n };\n this.conjunctionLemmaTypesData =\n [ ...conjunctionLemmaTypesData, nullLemmaDegreeData ];\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"rawFormData.text\")\n get lemmaText() {\n const { text: lemmaText = \"\" } = this.rawFormData || {};\n return lemmaText;\n }\n set lemmaText(newLemmaText = \"\") {\n this.rawFormData.text = newLemmaText;\n }\n\n\n // Core methods\n initializeLemmaDataChanged() {\n this.lemmaDataDigest = this.computeLemmaDataDigest();\n this.oldLemmaDataDigest = this.lemmaDataDigest;\n this.lemmaDataChanged = false;\n }\n\n updateLemmaDataChanged() {\n this.lemmaDataDigest = this.computeLemmaDataDigest();\n this.lemmaDataChanged = this.lemmaDataDigest !== this.oldLemmaDataDigest;\n }\n conditionallyPublishLemmaDataChangedEvent() {\n this.updateLemmaDataChanged();\n if (this.lemmaDataChanged) {\n this.oldLemmaDataDigest = this.lemmaDataDigest;\n this.publishLemmaDataChangedEvent();\n }\n }\n\n updateLemmaData() {\n this.lemmaData = unsetProperties(this.rawFormData, [\"_schemaId\"]);\n }\n\n updateLemmaDataReady() {\n const lemmaTextReady = this.lemmaText !== \"\";\n this.lemmaDataReady = lemmaTextReady;\n }\n\n computeLemmaDataDigest() {\n this.updateLemmaData();\n return computeHash(`lemma-${toString(this.lemmaData)}`);\n }\n\n computeLemmaHoldMoodsArray() {\n return this.holdsSubjunctiveMood ? [\"sub\"] : [];\n }\n\n async validateLemmaData() {\n this.validationErrorsData =\n await this.validator.validateObject(this.rawFormData);\n this.lemmaDataValid = this.validationErrorsData.length === 0;\n this.updateLemmaDataReady();\n }\n\n\n // Event handlers\n // note1: automatically converting paradigm items of conjunctions to \n // lower-case because they cannot be capitalized\n async handleConjunctionTypeChangedEvent({\n newValue: conjunctionLemmaType = \"\"\n }) {\n this.rawFormData.type = conjunctionLemmaType;\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleConjunctionTextChangedEvent({\n newValue: lemmaText = \"\"\n }) {\n this.lemmaText = lemmaText;\n this.showTextInputFieldHint = this.lemmaText.length > 0 && \n !hasTonicAccents(this.lemmaText);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleConjunctionTextBlurEvent() {\n this.lemmaText = normalizeWords(optimizeSpaces(\n (this.lemmaText || \"\").toLowerCase()\n ));\n this.showTextInputFieldHint = this.lemmaText.length > 0 && \n !hasTonicAccents(this.lemmaText);\n await pause(processInputFieldBlurEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleConjunctionHoldsSubjunctiveMoodChangedEvent({\n newValue: holdsSubjunctiveMood\n }) {\n this.holdsSubjunctiveMood = holdsSubjunctiveMood;\n const holdMoods = this.computeLemmaHoldMoodsArray();\n if (holdMoods.length > 0) {\n this.rawFormData.holdMoods = this.computeLemmaHoldMoodsArray();\n } else {\n this.rawFormData = unsetProperties(this.rawFormData, [\"holdMoods\"]);\n }\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleLemmaInflectionsChangedEvent({\n selectedInflectionsKeys = []\n }) {\n this.showLemmaDefinitions = selectedInflectionsKeys.length > 0;\n }\n\n\n // Event publishers\n publishLemmaDataChangedEvent() {\n this.eventService.publish({\n eventName: \"lemmaDataChanged\",\n eventData: {\n lemmaData: this.lemmaData,\n lemmaDataValid: this.lemmaDataValid,\n lemmaDataReady: this.lemmaDataReady\n }\n });\n }\n\n}\n","// Define the view-model for the \"conjunction-lemma-item\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom } from \"aurelia-framework\";\n\n// Import parameter modules\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n\n// Export the \"ConjunctionLemmaItem\" class\nexport class ConjunctionLemmaItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmaData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) classes = \"\";\n\n\n // Getter and setter methods\n @computedFrom(\"lemmaData.key\")\n get lemmaKey() {\n const { key: lemmaKey = \"\" } = this.lemmaData || {};\n return lemmaKey;\n }\n @computedFrom(\"lemmaData.cathegory\")\n get lemmaCathegory() {\n const { cathegory: lemmaCathegory = \"\" } = this.lemmaData || {};\n return lemmaCathegory;\n }\n @computedFrom(\"lemmaData.holdMoods\")\n get holdMoods() {\n const { holdMoods = [] } = this.lemmaData || {};\n return holdMoods;\n }\n\n}\n","// Define the view-model for the \"dashoard-activated-offers\" component\n\n// Import library modules\nimport { \n bindable, \n bindingMode, \n inject \n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { pause } from \"utilities/promise\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { mockLoadingDataDurationMs } from \"parameters/time\";\nimport {\n recentlyActivatedOffersFilterData as defaultRecentlyActivatedOffersFilterData\n} from \"parameters/offer\";\n\n// Import service modules\nimport OfferService from \"services/offer\";\n\n\n// Export DashboardActivatedOffers class\n@inject(OfferService)\nexport class DashboardActivatedOffers {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) lockIconSize = \"1.2em\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n isLoadingRecentlyActivatedOffers = false;\n recentlyActivatedOffersEtcData = [];\n i18nParams = i18nParams;\n\n constructor(offerService) {\n this.offerService = offerService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.recentlyActivatedOffersEtcData = \n await this.getRecentlyActivatedOffers();\n }\n\n\n // Getter and setter methods\n\n // Core methods\n async getRecentlyActivatedOffers(\n filterData = defaultRecentlyActivatedOffersFilterData\n ) {\n this.isLoadingRecentlyActivatedOffers = true;\n if ([\"dev\"].includes(this.runMode)) {\n await pause(mockLoadingDataDurationMs);\n }\n\n let recentlyActivatedOffersEtcData;\n try {\n recentlyActivatedOffersEtcData = \n await this.offerService.getActivatedOffersByFilter({ filterData });\n } catch(error) {\n console.warn(`Error getting recently activated offers`, error);\n recentlyActivatedOffersEtcData = [];\n }\n this.isLoadingRecentlyActivatedOffers = false;\n return recentlyActivatedOffersEtcData;\n }\n\n}\n","// Define the view-model for the \"dashoard-recent-activities\" component\n\n// Import library modules\nimport { \n bindable, \n bindingMode, \n inject \n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { computeActivityType } from \"utilities/activity\";\nimport { pause } from \"utilities/promise\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { mockLoadingDataDurationMs } from \"parameters/time\";\n\n// Import service modules\nimport ActivityService from \"services/activity\";\nimport EventService from \"services/event\";\nimport NotificationService from \"services/notification\";\n\n// Define internal parameters\nconst recentActivitiesCount = 3;\nconst eventsData = [\n { name: \"taskActivityDataChanged\" },\n { name: \"deleteActivity\" }\n];\n\n\n// Export DashboardRecentActivities class\n@inject(\n ActivityService,\n EventService,\n NotificationService\n)\nexport class DashboardRecentActivities {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n isLoadingRecentActivities = false;\n recentActivitiesData = [];\n i18nParams = i18nParams;\n\n constructor(\n activityService,\n eventService,\n notificationService\n ) {\n this.activityService = activityService;\n this.eventService = eventService;\n this.notificationService = notificationService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"dashboardRecentActivities\",\n eventService: this.eventService,\n eventsData\n });\n\n this.recentActivitiesData =\n await this.getRecentActivitiesData();\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Core methods\n async getRecentActivitiesData() {\n this.isLoadingRecentActivities = true;\n await pause(mockLoadingDataDurationMs);\n\n let recentActivitiesData;\n try {\n recentActivitiesData = await this.activityService.getRecentActivities({\n count: recentActivitiesCount\n });\n } catch(error) {\n console.warn(`Error fetching current activities from service`, error);\n recentActivitiesData = [];\n }\n this.isLoadingRecentActivities = false;\n return recentActivitiesData;\n }\n\n\n // Event handlers\n async handleTaskActivityDataChangedEvent() {\n // Reload recent activities\n this.recentActivitiesData = await this.getRecentActivitiesData();\n }\n\n // handleDeleteActivityEvent: async\n async handleDeleteActivityEvent({ activityKey = \"\" }) {\n const recentActivityIndex = this.recentActivitiesData\n .findIndex(({ key: recentActivityKey = \"\"}) => {\n return recentActivityKey === activityKey;\n });\n const recentActivityData =\n this.recentActivitiesData.at(recentActivityIndex) || null;\n if (recentActivityData) {\n // Reload recent activities\n this.recentActivitiesData = await this.getRecentActivitiesData();\n\n // Show notification message\n const longActivityType = computeActivityType(recentActivityData);\n this.notificationService.showUINotification({\n message: `notifications:${longActivityType}Deleted`,\n status: \"success\",\n group: \"private\"\n });\n }\n }\n\n}\n","// Define the view-model for the \"dashoard-user-credit\" component\n\n// Import library modules\nimport { \n computedFrom, \n bindable, \n bindingMode, \n inject \n} from \"aurelia-framework\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n// Import service modules\nimport UserService from \"services/user\";\n\n\n// Export DashboardUserCredit class\n@inject(UserService)\nexport class DashboardUserCredit {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) lockIconSize = \"1.2em\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n i18nParams = i18nParams;\n\n constructor(userService) {\n this.userService = userService;\n }\n\n\n // Getter and setter methods\n @computedFrom(\"userService.userCredit\")\n get userCredit() {\n return this.userService.userCredit;\n }\n @computedFrom(\"userCredit\")\n get unitI18nKey() {\n return `main:unit_${this.userCredit === 1 ? \"one\" : \"other\"}`;\n }\n\n @computedFrom(\"userService.isUserCreditLocked\")\n get isUserCreditLocked() {\n const { isUserCreditLocked = false } = this.userService || {};\n return isUserCreditLocked;\n }\n\n}\n","// Define the view-model for the \"definition-item\" component\n\n// Import library modules\nimport {\n bindable,\n bindingMode,\n computedFrom,\n inject\n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\n\n// Import parameter modules\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { minReportsCount } from \"parameters/definition\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [];\n\n\n// Export DefinitionItem class\n@inject(EventService)\nexport class DefinitionItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) definitionData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) \n definitionDataModified = false;\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmaData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) activityKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) analysisKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) cardIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) inChildElementIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) textClasses = \n \"uk-text uk-text-bold uk-text-left uk-text-middle uk-text-break\";\n @bindable({ defaultBindingMode: bindingMode.toView }) typeClasses = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) reportsClasses =\n this.textClasses;\n @bindable({ defaultBindingMode: bindingMode.toView }) descriptionClasses = \n \"uk-text uk-text-small uk-text-light uk-text-middle uk-text-break\" +\n \"uk-margin-remove-bottom uk-margin-remove-top uk-padding-remove\";\n @bindable({ defaultBindingMode: bindingMode.toView }) displayMode = \"full\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n minReportsCount = minReportsCount;\n\n constructor(eventService) {\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"definitionItem\",\n entityKey: this.definitionKey,\n eventService: this.eventService,\n eventsData\n });\n\n if (![\"full\", \"compact\"].includes(this.displayMode)) {\n throw new Error(`Unknown displayMode \"${this.displayMode}\"`);\n }\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"definitionData.key\")\n get definitionKey() {\n const { key: definitionKey = \"\" } = this.definitionData || {};\n return definitionKey;\n }\n @computedFrom(\"definitionData.text\")\n get definitionText() {\n const { text: definitionText = \"\" } = this.definitionData || {};\n return definitionText;\n }\n @computedFrom(\"definitionData.type\")\n get definitionType() {\n const { type: definitionType = \"\" } = this.definitionData || {};\n return definitionType;\n }\n @computedFrom(\"definitionData.description\")\n get definitionDescription() {\n const { description: definitionDescription = \"\" } = this.definitionData || {};\n return definitionDescription;\n }\n @computedFrom(\"definitionData.reportsCount\")\n get reportsCount() {\n const { \n reportsCount: reportsCount = 0 \n } = this.definitionData || {};\n return reportsCount;\n }\n @computedFrom(\"reportsCount\")\n get definitionReportsI18nParams() {\n return { \n ...i18nParams, \n reportsCount: this.reportsCount,\n minReportsCount\n };\n }\n\n @computedFrom(\"lemmaData.text\")\n get lemmaText() {\n const { text: lemmaText = \"\" } = this.lemmaData || {};\n return lemmaText;\n }\n @computedFrom(\"lemmaText\")\n get changeDefinitionI18nParams() {\n return { ...i18nParams, lemmaText: this.lemmaText };\n }\n\n\n // Event publishers\n publishOpenSelectOrAddDefinitionDialogEvent(eventData) {\n this.eventService.publish({\n eventName: \"openSelectOrAddDefinitionDialog\",\n eventData: {\n analysisKey: this.analysisKey,\n cardIndex: this.cardIndex,\n inChildElementIndex: this.inChildElementIndex,\n ...(eventData || {})\n }\n });\n }\n\n}\n","// Define the view-model for the \"definition\" component\n\n// Import library modules\nimport { DialogService } from \"aurelia-dialog\";\nimport {\n bindable,\n bindingMode,\n computedFrom,\n inject\n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { clone } from \"utilities/etc\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { \n runMode as defaultRunMode,\n outLocaleCode as defaultOutLocaleCode\n} from \"parameters/environment\";\n\n// Import method modules\nimport { loadDefinitions } from \"./definition/load-definitions\";\n\n// Import service modules\nimport DefinitionService from \"services/definition\";\nimport EventService from \"services/event\";\n\n// Import dialog modules\nimport { Definitions as DefinitionsDialog } from \"dialogs/definitions\";\n\n// Define internal parameters\nconst eventsData = [];\n\n\n// Export \"Definition\" class\n@inject(\n DefinitionService, \n DialogService,\n EventService\n)\nexport class Definition {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) generatorData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) definitionKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) savedDefinitionKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) activityKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) analysisKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) cardIndex = 0;\n @bindable({ defaultBindingMode: bindingMode.toView }) inChildElementIndex = 0;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) isEnabled = true;\n\n // Local attributes\n activeGeneratorData = null;\n definitionsData = [];\n activeDefinitionData = null;\n outLocaleCode = defaultOutLocaleCode;\n isLoadingData = false;\n\n constructor(\n definitionService,\n dialogService,\n eventService\n ) {\n this.definitionService = definitionService;\n this.dialogService = dialogService;\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"definition\",\n entityKey: this.definitionKey,\n eventService: this.eventService,\n eventsData\n });\n\n // Set active generator \n this.activeGeneratorData = clone(this.generatorData);\n\n // Load definitions' data\n this.definitionsData = await this.loadDefinitions({\n lemmaKey: this.lemmaKey,\n localeCode: this.outLocaleCode\n });\n\n // Update active definition\n this.updateActiveDefinition();\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n \n // Getter and setter methods\n @computedFrom(\"generatorData.lemma\")\n get lemmaData() {\n const { lemma: lemmaData = null } = this.generatorData || {};\n return lemmaData;\n }\n @computedFrom(\"lemmaData.key\")\n get lemmaKey() {\n const { key: lemmaKey = \"\" } = this.lemmaData || {};\n return lemmaKey;\n }\n\n @computedFrom(\"activeGeneratorData.lemma\")\n get activeLemmaData() {\n const { lemma: activeLemmaData = null } = this.activeGeneratorData || {};\n return activeLemmaData;\n }\n @computedFrom(\"activeLemmaData.text\")\n get activeLemmaText() {\n const { text: activeLemmaText = \"\" } = this.activeLemmaData || {};\n return activeLemmaText;\n }\n @computedFrom(\"lemmaText\")\n get definitionI18nParams() {\n return { ...i18nParams, lemmaText: this.activeLemmaText };\n }\n\n @computedFrom(\"activeDefinitionData.key\")\n get activeDefinitionKey() {\n const { key: activeDefinitionKey = \"\" } = this.activeDefinitionData || {};\n return activeDefinitionKey;\n }\n @computedFrom(\"activeDefinitionKey\", \"savedDefinitionKey\")\n get definitionDataModified() {\n return this.activeDefinitionKey !== this.savedDefinitionKey;\n }\n @computedFrom(\"definitionDataModified\")\n get definitionAnchorClasses() {\n return this.definitionDataModified ? \"uk-link-modified\" : \"uk-link-heading\";\n }\n\n\n // Core methods\n async loadDefinitions({ lemmaKey = \"\", localeCode = \"\" }) {\n return await loadDefinitions.call(this, { lemmaKey, localeCode });\n }\n\n updateActiveDefinition() {\n if (this.definitionKey) {\n this.activeDefinitionData = this.definitionsData\n .find(({ key: definitionKey = \"\" } = {}) => {\n return definitionKey === this.definitionKey\n }) || null; // find returns undefined when no match is found\n if (!this.activeDefinitionData) {\n console.warn(`Could not find active definition \"${this.definitionKey}\"`);\n }\n } else {\n this.activeDefinitionData = null;\n }\n }\n\n async openDefinitionsDialog() {\n const definitionsDialogOpenResult = await this.dialogService.open({\n viewModel: DefinitionsDialog,\n model: { \n lemmaData: this.lemmaData,\n activeDefinitionData: this.activeDefinitionData,\n runMode: this.runMode\n },\n //keyboard: [\"Escape\"] // keys that close the dialog\n });\n const definitionsDialogCloseResult =\n await definitionsDialogOpenResult.closeResult;\n if (definitionsDialogCloseResult.wasCancelled) {\n console.info(`User canceled the selection of a definition`);\n return;\n }\n const { \n activeDefinitionData = null,\n definitionsData = []\n } = definitionsDialogCloseResult.output || {};\n this.definitionsData = definitionsData;\n const { key: activeDefinitionKey = \"\" } = activeDefinitionData || {};\n if (activeDefinitionKey !== this.activeDefinitionKey) {\n this.activeDefinitionData = activeDefinitionData;\n this.publishChangeSelectedDefinitionEvent();\n }\n }\n\n\n // Event publishers\n publishChangeSelectedDefinitionEvent(eventData) {\n this.eventService.publish({\n eventName: \"changeSelectedDefinition\",\n eventData: {\n definitionKey: this.activeDefinitionKey,\n definitionDataModified: this.definitionDataModified,\n activityKey: this.activityKey,\n analysisKey: this.analysisKey,\n cardIndex: this.cardIndex,\n inChildElementIndex: this.inChildElementIndex,\n ...(eventData || {})\n }\n });\n }\n}\n","// Define the \"loadDefinitions\" card component method\n\n// Import utility modules\nimport { typeOf } from \"utilities/etc\";\nimport { pause } from \"utilities/promise\";\n\n// Import parameter modules\nimport { mockLoadingDataDurationMs } from \"parameters/time\";\n\n\n// loadDefinitions: async\n// returns a promise which either resolves with the (possibly empty) array\n// of definitions objects corresponding to the specified lemma (by key), \n// or rejects with an error\nexport async function loadDefinitions({\n lemmaKey = \"\",\n localeCode = \"\"\n}) {\n if (typeOf(lemmaKey) !== \"string\" || !lemmaKey) {\n throw new Error(`Parameter \"lemmaKey\" should be a key string`);\n } else if (typeOf(localeCode) !== \"string\" || !localeCode) {\n throw new Error(`Parameter \"localeCode\" should be a valid locale code`);\n } else if (!this.definitionService) {\n throw new Error(`Missing required \"definition\" service`);\n }\n\n this.isLoadingData = true;\n\n // Mock loading data duration\n if ([\"dev\"].includes(this.runMode)) {\n console.debug(`Mocking loading definitions' data duration of ` +\n `${mockLoadingDataDurationMs}ms while in \"${this.runMode}\" mode`);\n await pause(mockLoadingDataDurationMs);\n }\n\n let definitionsData;\n try {\n definitionsData = await this.definitionService.getDefinitionsByLemma({\n lemmaKey,\n localeCode\n });\n } catch(error) {\n this.isLoadingData = false;\n console.warn(`Error loading definitions for lemma \"${lemmaKey}\"`, error);\n definitionsData = [];\n }\n this.isLoadingData = false;\n return definitionsData;\n}\n","// Define the view-model for the \"generator-item\" component\n\n// Import library modules\nimport {\n bindable,\n bindingMode,\n computedFrom,\n inject\n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n// Import service modules\nimport DefinitionService from \"services/definition\";\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [];\n\n\n// Export the \"GeneratorItem\" class\n@inject(\n DefinitionService,\n EventService\n)\nexport class GeneratorItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) generatorData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) displayMode = \"compact\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n eventsSubscriptions = [];\n i18nParams = i18nParams;\n\n constructor(\n definitionService,\n eventService\n ) {\n this.definitionService = definitionService;\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"generatorItem\",\n entityKey: this.lemmaKey,\n eventService: this.eventService,\n eventsData\n });\n\n if (![\"full\", \"compact\"].includes(this.displayMode)) {\n throw new Error(`Unknown displayMode \"${this.displayMode}\"`);\n }\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"generatorData.lemma\")\n get lemmaData() {\n const { lemma: lemmaData = null } = this.generatorData || {};\n return lemmaData;\n }\n @computedFrom(\"lemmaData.key\")\n get lemmaKey() {\n const { key: lemmaKey = \"\" } = this.lemmaData || {};\n return lemmaKey;\n }\n @computedFrom(\"generatorData.inflectors\")\n get inflectorsData() {\n const { inflectors: inflectorsData = [] } = this.generatorData || {};\n return inflectorsData;\n }\n\n}\n","\n// Define the view-model for the \"generators\" component\n\n// Import library modules\nimport { DialogService } from \"aurelia-dialog\";\nimport {\n bindable,\n bindingMode,\n computedFrom,\n inject,\n observable\n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n// Import service modules\nimport GeneratorService from \"services/generator\";\nimport EventService from \"services/event\";\n\n// Import dialog modules\nimport { Generators as GeneratorsDialog } from \"dialogs/generators\";\n\n\n// Import method modules\nimport { loadGeneratorsData } from \"./generator/load-generators-data\";\n\n// Define internal parameters\nconst eventsData = [{\n name: \"openGeneratorsDialog\",\n filterBy: \"analysisKeyCardIndexAndInChildElementIndex\" \n}];\n\n\n// Export the \"Generator\" class\n@inject(\n DialogService,\n EventService,\n GeneratorService\n)\nexport class Generator {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) inElementData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmaKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) savedLemmaKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) inInflectorKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) savedInInflectorKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) definitionKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) savedDefinitionKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) activityKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) analysisKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) cardIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) inChildElementIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) displayMode = \"full\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) isEnabled = true;\n\n // Local attributes\n activeGeneratorData = null;\n generatorsData = [];\n isLoadingData = false;\n i18nParams = i18nParams;\n\n constructor(\n dialogService,\n eventService,\n generatorService\n ) {\n this.dialogService = dialogService;\n this.eventService = eventService;\n this.generatorService = generatorService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"generator\",\n entityKey: this.lemmaKey,\n eventService: this.eventService,\n eventsData\n });\n\n // Load generators' data\n this.generatorsData = await this.loadGeneratorsData({\n inElementData: this.inElementData\n });\n\n // Update active generator\n this.updateActiveGenerator();\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"inElementData.key\")\n @observable\n get inElementKey() {\n const { key: inElementKey = \"\" } = this.inElementData || {};\n return inElementKey;\n }\n @computedFrom(\"inElementData.text\")\n get inElementText() {\n const { text: inElementText = \"\" } = this.inElementData || {};\n return inElementText;\n }\n @computedFrom(\"inElementText\")\n get selectOrAddGeneratorI18nParams() {\n return { ...i18nParams, elementText: this.inElementText };\n }\n\n @computedFrom(\"activeGeneratorData.lemma\")\n get activeLemmaData() {\n const { lemma: activeLemmaData = null } = this.activeGeneratorData || {};\n return activeLemmaData;\n }\n @computedFrom(\"activeLemmaData.key\")\n get activeLemmaKey() {\n const { key: activeLemmaKey = \"\" } = this.activeLemmaData || {};\n return activeLemmaKey;\n }\n @computedFrom(\"activeLemmaKey\", \"savedLemmaKey\")\n get lemmaDataModified() {\n return this.activeLemmaKey !== this.savedLemmaKey;\n }\n @computedFrom(\"lemmaDataModified\")\n get generatorAnchorClasses() {\n return this.lemmaDataModified ? \"uk-link-modified\" : \"uk-link-heading\";\n }\n\n\n // Core methods\n async loadGeneratorsData({ \n inElementData = null,\n fetchFromIndex = true,\n saveToIndex = true\n }) {\n return await loadGeneratorsData.call(this, { \n inElementData,\n fetchFromIndex,\n saveToIndex\n });\n }\n\n updateActiveGenerator() {\n if (this.lemmaKey) {\n this.activeGeneratorData = this.generatorsData\n .find(({ lemma: lemmaData = null }) => {\n const { key: lemmaKey = \"\" } = lemmaData || {};\n return lemmaKey === this.lemmaKey;\n }) || null;\n if (!this.activeGeneratorData) {\n console.warn(`Could not find generator by lemma \"${this.lemmaKey}\"`);\n }\n } else {\n this.activeGeneratorData = null;\n }\n }\n\n async inElementKeyChanged() {\n // Update generators' data\n this.generatorsData = await this.loadGeneratorsData({\n inElementData: this.inElementData\n });\n\n // Update active generator\n this.updateActiveGenerator();\n }\n\n async openGeneratorsDialog() {\n if (!this.isEnabled) {\n return;\n }\n const generatorsDialogOpenResult = await this.dialogService.open({\n viewModel: GeneratorsDialog,\n model: { \n activeGeneratorData: this.activeGeneratorData,\n generatorsData: this.generatorsData,\n inElementData: this.inElementData,\n runMode: this.runMode\n },\n //keyboard: [\"Escape\"] // keys that close the dialog\n });\n const generatorsDialogCloseResult =\n await generatorsDialogOpenResult.closeResult;\n if (generatorsDialogCloseResult.wasCancelled) {\n console.info(`User canceled the selection of a generator`);\n return;\n }\n const { \n activeGeneratorData = null,\n generatorsData = []\n } = generatorsDialogCloseResult.output || {};\n this.generatorsData = generatorsData;\n const { lemma: activeLemmaData = null } = activeGeneratorData || {};\n const { key: activeLemmaKey = \"\" } = activeLemmaData || {};\n if (activeLemmaKey !== this.activeLemmaKey) {\n this.activeGeneratorData = activeGeneratorData;\n this.publishChangeSelectedGeneratorEvent();\n }\n }\n\n\n // Event filters\n filterEventByAnalysisKeyCardIndexAndInChildElementIndex({\n analysisKey = \"\",\n cardIndex = 0,\n inChildElementIndex = 0\n }) {\n return analysisKey === this.analysisKey &&\n cardIndex === this.cardIndex &&\n inChildElementIndex === this.inChildElementIndex;\n }\n\n\n // Event handlers\n async handleOpenGeneratorsDialogEvent() {\n await this.openGeneratorsDialog();\n }\n\n\n // Event publishers\n publishChangeSelectedGeneratorEvent(eventData) {\n this.eventService.publish({\n eventName: \"changeSelectedGenerator\",\n eventData: {\n generatorData: this.activeGeneratorData,\n lemmaKey: this.activeLemmaKey,\n lemmaDataModified: this.lemmaDataModified,\n activityKey: this.activityKey,\n analysisKey: this.analysisKey,\n cardIndex: this.cardIndex,\n inChildElementIndex: this.inChildElementIndex,\n ...(eventData || {})\n }\n });\n }\n\n}\n","// Define the \"loadGeneratorsData\" in-child-element component method\n\n// Import utility modules\nimport { typeOf } from \"utilities/etc\";\nimport { pause } from \"utilities/promise\";\n\n// Import parameter modules\nimport { mockLoadingDataDurationMs } from \"parameters/time\";\n\n\n// loadGeneratorsData: async\n// returns a promise which either resolves with an (possibly empty) array\n// of generators data for the specified input element, or rejects with an\n// error\nexport async function loadGeneratorsData({\n inElementData = null,\n fetchFromIndex = true,\n saveToIndex = true\n}) {\n if (typeOf(inElementData) !== \"object\") {\n throw new Error(`Parameter \"inElementData\" should be an object`);\n } else if (typeOf(fetchFromIndex) !== \"boolean\") {\n throw new Error(`Parameter \"fetchFromIndex\" should be a boolean`);\n } else if (typeOf(saveToIndex) !== \"boolean\") {\n throw new Error(`Parameter \"saveToIndex\" should be a boolean`);\n } else if (!this.generatorService) {\n throw new Error(`Missing required \"generator\" service`);\n } else if (typeOf(this.isLoadingData) !== \"boolean\") {\n throw new Error(`Missing required \"isLoadingData\" local attribute`);\n }\n\n const {\n key: inElementKey,\n type: inElementType,\n } = inElementData;\n if (!inElementKey) {\n throw new Error(`Missing required field \"inElementKey\"`);\n } else if (!inElementType) {\n throw new Error(`Missing required field \"inElementType\"`);\n }\n if (inElementType === \"cmp\") {\n console.warn(`No generators for compound element \"${inElementKey}\"`);\n return [];\n }\n\n this.isLoadingData = true;\n\n // Mock loading data duration\n if ([\"dev\"].includes(this.runMode)) {\n console.debug(`Mocking loading generators' data duration of ` +\n `${mockLoadingDataDurationMs}ms while in \"${this.runMode}\" mode`);\n await pause(mockLoadingDataDurationMs);\n }\n\n // Fetch generators from the index or server\n let generatorsData;\n try {\n generatorsData = await this.generatorService.getGeneratorsByElement({\n inElementData,\n fetchFromIndex,\n saveToIndex\n });\n } catch(error) {\n console.warn(`Error loading generators for element \"${inElementKey}\"`, error);\n generatorsData = [];\n }\n this.isLoadingData = false;\n\n // Return generators\n return generatorsData;\n}\n","// Define the view-model for the \"gerundive-inflection-item\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom } from \"aurelia-framework\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n\n// Export the \"GerundiveInflectionItem\" class\nexport class GerundiveInflectionItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) inflectionData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n\n // Getter and setter methods\n @computedFrom(\"inflectionData.key\")\n get inflectionKey() {\n const { key: inflectionKey = \"???\" } = this.inflectionData || {};\n return inflectionKey;\n }\n @computedFrom(\"inflectionData.cathegory\")\n get inflectionCathegory() {\n const { cathegory: inflectionCathegory = \"?\" } = this.inflectionData || {};\n return inflectionCathegory;\n }\n\n}\n","// Define the view-model for the \"gerundive-inflector-item\" component\n\n// Import library modules\nimport { bindable, bindingMode } from \"aurelia-framework\";\n\n\n// Export GerundiveInflectorItem class\nexport class GerundiveInflectorItem {\n\n // Attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) inflectorData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) classes = \"\";\n\n}\n","// Define the view-model for the \"gerundive-lemma-item\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom } from \"aurelia-framework\";\n\n// Import parameter modules\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n\n// Export the \"GerundiveLemmaItem\" class\nexport class GerundiveLemmaItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmaData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) classes = \"\";\n\n\n // Getter and setter methods\n @computedFrom(\"lemmaData.key\")\n get lemmaKey() {\n const { key: lemmaKey = \"\" } = this.lemmaData || {};\n return lemmaKey;\n }\n @computedFrom(\"lemmaData.cathegory\")\n get lemmaCathegory() {\n const { cathegory: lemmaCathegory = \"\" } = this.lemmaData || {};\n return lemmaCathegory;\n }\n @computedFrom(\"lemmaData.form\")\n get lemmaForm() {\n const { form: lemmaForm = \"\" } = this.lemmaData || {};\n return lemmaForm;\n }\n @computedFrom(\"lemmaData.parentLemma\")\n get parentLemmaData() {\n const { parentLemma: parentLemmaData = null } = this.lemmaData || {};\n return parentLemmaData;\n }\n\n}\n","// Define the view-model for the \"in-child-element\" component\n\n// Import library modules\nimport { \n bindable, \n bindingMode, \n computedFrom,\n inject, \n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [];\n\n\n// Export the \"InChildElement\" class\n@inject(\n EventService,\n)\nexport class InChildElement {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) inChildElementData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmaKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) savedLemmaKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) inInflectorKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) savedInInflectorKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) definitionKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) savedDefinitionKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) activityKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) analysisKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) cardIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) inChildElementIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) inElementData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) displayMode = \"full\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) isEnabled = true;\n\n // Local attributes\n generatorsData = [];\n generatorData = null;\n isLoadingData = false;\n\n constructor(\n eventService,\n ) {\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.validateBoundAttributes();\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"inChildElement\",\n entityKey: this.inChildElementKey,\n eventService: this.eventService,\n eventsData\n });\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"inChildElementData.key\")\n get inChildElementKey() {\n const { key: inChildElementKey = \"\" } = this.inChildElementData || {};\n return inChildElementKey;\n }\n @computedFrom(\"inChildElementData.type\")\n get inChildElementType() {\n const { type: inChildElementType = \"\" } = this.inChildElementData || {};\n return inChildElementType;\n }\n @computedFrom(\"inChildElementData.text\")\n get inChildElementText() {\n const { text: inChildElementText = \"\" } = this.inChildElementData || {};\n return inChildElementText;\n }\n @computedFrom(\"inChildElementText\")\n get selectOrAddGeneratorI18nParams() {\n return { ...i18nParams, elementText: this.inChildElementText };\n }\n\n @computedFrom(\"lemmaKey\", \"savedLemmaKey\")\n get lemmaDataModified() {\n return this.lemmaKey !== this.savedLemmaKey;\n }\n @computedFrom(\"lemmaDataModified\")\n get generatorDataModified() {\n return this.lemmaDataModified;\n }\n\n @computedFrom(\"inElementData.type\")\n get inElementType() {\n const { type: inElementType = \"\" } = this.inElementData || {};\n return inElementType;\n }\n @computedFrom(\"inElementType\", \"inChildElementType\")\n get isGeneratorEnabled() {\n return (this.inElementType === \"cmp\" &&\n [\"wrd\", \"pfx\", \"sfx\"].includes(this.inChildElementType)) ||\n (this.inElementType === \"grp\" && this.inChildElementType === \"grp\") ||\n (this.inElementType === \"wrd\" && this.inChildElementType === \"wrd\") ||\n (this.inElementType === \"pfx\" && this.inChildElementType === \"pfx\") ||\n (this.inElementType === \"sfx\" && this.inChildElementType === \"sfx\");\n }\n\n\n // Core methods\n validateBoundAttributes() {\n if (![\"full\", \"compact\"].includes(this.displayMode)) {\n throw new Error(`Invalid displayMode \"${this.displayMode}\"`);\n }\n }\n\n}\n","// Define the view-model for the \"in-element\" component\n\n// Import library modules\nimport {\n inject,\n bindable,\n bindingMode,\n computedFrom\n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [];\n\n// Export the \"InElement\" class\n@inject(EventService)\nexport class InElement {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) inElementData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmasKeys = [];\n @bindable({ defaultBindingMode: bindingMode.toView }) \n savedLemmasKeys = [];\n @bindable({ defaultBindingMode: bindingMode.toView }) inInflectorsKeys = [];\n @bindable({ defaultBindingMode: bindingMode.toView }) \n savedInInflectorsKeys = [];\n @bindable({ defaultBindingMode: bindingMode.toView }) definitionsKeys = [];\n @bindable({ defaultBindingMode: bindingMode.toView }) \n savedDefinitionsKeys = [];\n @bindable({ defaultBindingMode: bindingMode.toView }) activityKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) analysisKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) cardIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) displayMode = \"full\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) isEnabled = true;\n\n // Local attributes\n inChildElementsData = [];\n i18nParams = i18nParams;\n\n constructor(eventService) {\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"inElement\",\n entityKey: this.inElementInitData ? \n this.inElementInitData.key : this.inElementInitKey,\n eventService: this.eventService,\n eventsData\n });\n\n // Compute input child elements\n this.updateInChildElementsData();\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"inElementData.key\")\n get inElementKey() {\n const { key: inElementKey = \"\" } = this.inElementData || {};\n return inElementKey;\n }\n @computedFrom(\"inElementData.type\")\n get inElementType() {\n const { type: inElementType = \"\" } = this.inElementData || {};\n return inElementType;\n }\n @computedFrom(\"inElementData.text\")\n get inElementText() {\n const { text: inElementText = \"\" } = this.inElementData || {};\n return inElementText;\n }\n\n\n // Core methods\n updateInChildElementsData() {\n const { childElements: inChildElementsData = [] } = this.inElementData || {};\n this.inChildElementsData = inChildElementsData.length === 0 ?\n [this.inElementData] : inChildElementsData;\n }\n\n}\n","// Define the view-model for the \"in-inflector\" component\n\n// Import library modules\nimport { DialogService } from \"aurelia-dialog\";\nimport {\n bindable,\n bindingMode,\n computedFrom,\n inject\n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { clone } from \"utilities/etc\";\n\n// Import parameter modules\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Import dialog modules\nimport { Inflectors as InflectorsDialog } from \"dialogs/inflectors\";\n\n// Define internal parameters\nconst eventsData = [];\n\n\n// Export the \"InInflector\" class\n@inject(\n DialogService, \n EventService\n)\nexport class InInflector {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) generatorData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) inInflectorKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) savedInInflectorKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) inElementData = null\n @bindable({ defaultBindingMode: bindingMode.toView }) activityKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) analysisKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) cardIndex = 0;\n @bindable({ defaultBindingMode: bindingMode.toView }) inChildElementIndex = 0;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) isEnabled = true;\n\n // Local attributes\n activeGeneratorData = null;\n activeInInflectorData = null;\n i18nParams = i18nParams;\n\n constructor(\n dialogService, \n eventService\n ) {\n this.dialogService = dialogService;\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"in-inflector\",\n entityKey: this.inInflectorKey,\n eventService: this.eventService,\n eventsData\n });\n\n // Set active generator\n this.activeGeneratorData = clone(this.generatorData);\n\n // Compute active input inflector\n this.updateActiveInInflector();\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"generatorData.lemma\")\n get lemmaData() {\n const { lemma: lemmaData = null } = this.generatorData || {};\n return lemmaData;\n }\n @computedFrom(\"lemmaData.key\")\n get lemmaKey() {\n const { key: lemmaKey = \"\" } = this.lemmaData || {};\n return lemmaKey;\n }\n\n @computedFrom(\"activeGeneratorData.lemma\")\n get activeLemmaData() {\n const { lemma: activeLemmaData = null } = this.activeGeneratorData || {};\n return activeLemmaData;\n }\n @computedFrom(\"activeLemmaData.text\")\n get activeLemmaText() {\n const { text: activeLemmaText = \"\" } = this.activeLemmaData || {};\n return activeLemmaText;\n }\n @computedFrom(\"activeLemmaText\")\n get selectInflectorI18nParams() {\n return { ...i18nParams, lemmaText: this.activeLemmaText };\n }\n @computedFrom(\"activeLemmaText\", \"inElementText\")\n get inflectorI18nParams() {\n return { \n ...i18nParams, \n lemmaText: this.activeLemmaText,\n inElementText: this.inElementText\n };\n }\n\n @computedFrom(\"activeGeneratorData.inflectors\")\n get inInflectorsData() {\n const { inflectors: inInflectorsData = [] } = this.activeGeneratorData || {};\n return inInflectorsData;\n }\n\n @computedFrom(\"activeInInflectorData.key\")\n get activeInInflectorKey() {\n const { key: activeInInflectorKey = \"\" } = this.activeInInflectorData || {};\n return activeInInflectorKey;\n }\n @computedFrom(\"activeInInflectorKey\")\n get inInflectorDataSelected() {\n return this.activeInInflectorKey !== \"\";\n }\n @computedFrom(\"activeInInflectorKey\", \"savedInInflectorKey\")\n get inInflectorDataModified() {\n return this.activeInInflectorKey !== this.savedInInflectorKey;\n }\n @computedFrom(\"inInflectorDataModified\")\n get inInflectorAnchorClasses() {\n return this.inInflectorDataModified ? \"uk-link-modified\" : \"uk-link-heading\";\n }\n\n @computedFrom(\"inElementData.text\")\n get inElementText() {\n const { text: inElementText = \"\" } = this.inElementData || {};\n return inElementText;\n }\n\n\n // Core methods\n updateActiveInInflector() {\n if (this.inInflectorKey) {\n this.activeInInflectorData = this.inInflectorsData\n .find(({ key: inInflectorKey = \"\" }) => {\n return inInflectorKey === this.inInflectorKey;\n }) || null;\n if (!this.activeInInflectorData) {\n console.warn(`Could not set active input inflector ` +\n `\"${this.inInflectorKey}\"`);\n }\n } else {\n this.activeInInflectorData = null;\n }\n }\n\n async openInflectorsDialog() {\n const inflectorsDialogOpenResult = await this.dialogService.open({\n viewModel: InflectorsDialog,\n model: { \n lemmaData: this.activeLemmaData,\n inElementData: this.inElementData,\n activeInInflectorData: this.activeInInflectorData,\n inInflectorsData: this.inInflectorsData,\n runMode: this.runMode\n },\n //keyboard: [\"Escape\"] // keys that close the dialog\n });\n const inflectorsDialogCloseResult =\n await inflectorsDialogOpenResult.closeResult;\n if (inflectorsDialogCloseResult.wasCancelled) {\n console.info(`User canceled the selection of an input inflector`);\n return;\n }\n const { \n activeInInflectorData = null\n } = inflectorsDialogCloseResult.output || {};\n const { key: activeInInflectorKey = \"\" } = activeInInflectorData || {};\n if (activeInInflectorKey !== this.activeInInflectorKey) {\n this.activeInInflectorData = activeInInflectorData;\n this.publishChangeSelectedInInflectorEvent();\n }\n }\n\n\n // Event publishers\n publishChangeSelectedInInflectorEvent(eventData) {\n this.eventService.publish({\n eventName: \"changeSelectedInInflector\",\n eventData: {\n inInflectorKey: this.activeInInflectorKey,\n inInflectorDataModified: this.inInflectorDataModified,\n activityKey: this.activityKey,\n analysisKey: this.analysisKey,\n cardIndex: this.cardIndex,\n inChildElementIndex: this.inChildElementIndex,\n ...(eventData || {})\n }\n });\n }\n\n}\n","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n\\n \\n \\n lemma/${lemmaKey || '???'}\\n \\n\\n \\n \\n \\n\\n \\n \\n\\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n\\n\\n \\n ${\\\"main:recentlyActivatedOffers\\\" & t: i18nParams}:\\n \\n\\n \\n \\n \\n \\n ${\\\"main:loadingData\\\" & t: i18nParams}…\\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n ${\\\"main:noActivatedOffer\\\" & t}…\\n \\n \\n\\n \\n \\n \\n \\n \\n ${\\\"main:activateAnOffer\\\" & t: i18nParams}!\\n \\n 0\\\">\\n ${\\\"main:goToOffers\\\" & t: i18nParams}\\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n\\n\\n \\n ${\\\"main:recentActivities\\\" & t: i18nParams}:\\n \\n\\n \\n \\n \\n \\n ${\\\"main:loadingData\\\" & t: i18nParams}…\\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n ${\\\"main:noActivity\\\" & t: i18nParams}…\\n \\n \\n\\n \\n \\n \\n \\n \\n ${\\\"main:goToActivities\\\" & t: i18nParams}\\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n ${\\\"screens:dashboard.yourCreditAmountsTo\\\" & t: i18nParams}:\\n \\n \\n \\n \\n ${userCredit}\\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n ${\\\"main:userCreditLockedTip\\\" & t: i18nParams}!\\n \\n \\n ${\\\"main:userCreditUnlockedTip\\\" & t: i18nParams}\\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n definition/${definitionKey || '???'}\\n \\n\\n \\n \\n \\n \\n \\n \\n ${definitionText}\\n \\n\\n \\n 0\\\">\\n \\n (${reportsCount}/${minReportsCount}\\n \\n )\\n \\n \\n \\n\\n \\n \\n ${definitionDescription}\\n \\n \\n\\n \\n \\n \\n \\n ${definitionText}\\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n\\n\\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n ${\\\"main:addDefinition\\\" & t}…\\n \\n \\n \\n\\n \\n 0 && !activeDefinitionData\\\">\\n \\n \\n \\n \\n ${\\\"main:selectADefinition\\\" & t}…\\n \\n \\n \\n\\n \\n 0 && activeDefinitionData\\\"> \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n ${\\\"main:addGenerator\\\" & t}…\\n \\n \\n \\n\\n \\n 0 && !activeGeneratorData\\\">\\n \\n \\n \\n \\n ${\\\"main:selectGenerator\\\" & t}…\\n \\n \\n \\n\\n \\n 0 && activeGeneratorData\\\">\\n \\n \\n \\n\\n \\n ${\\\"main:fromLemma\\\" & t}:\\n \\n\\n \\n \\n \\n\\n \\n ${\\\"main:withDefinition\\\" & t}:\\n \\n\\n \\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n inflection/${inflectionKey || '???'}\\n \\n\\n \\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n\\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n\\n \\n \\n lemma/${lemmaKey || '???'}\\n \\n\\n \\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n ${\\\"main:ofThe\\\" & t}\\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n\\n\\n \\n \\n \\n \\n inChildElement/${inChildElementKey}\\n \\n\\n \\n \\n \\n ${inChildElementText}\\n \\n \\n\\n \\n \\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n\\n\\n \\n \\n \\n inElement/${inElementKey || '???'}\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n\\n\\n \\n \\n inInflector/${activeInInflectorKey || '???'}\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n ${\\\"main:selectInflector\\\" &t}…\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}