com.phloxui
Version:
PhloxUI Ng2+ Framework
1,066 lines (1,065 loc) • 92 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { EventEmitter } from '@angular/core';
import { AbstractHasDataHelp } from './AbstractHasDataHelp';
import { Option } from '../decorator/Option.decorator';
import { EventUtils } from '../share/utils/EventUtils';
import { LANG_ADD_EVENT, LANG_REMOVE_EVENT, LANG_CLICK_EVENT } from '../share/CustomEventType';
/**
* <p style="text-indent: 2em;">
* An abstract base class for component providing <code>data lang selector</code> to the user.
* </p>
*
* @author shiorin, tee4cute
* @abstract
*/
var AbstractDataLangSelector = /** @class */ (function (_super) {
tslib_1.__extends(AbstractDataLangSelector, _super);
function AbstractDataLangSelector(elementRef, dialogService) {
var _this = _super.call(this, elementRef) || this;
_this.langClickEvent = new EventEmitter();
_this.langAddEvent = new EventEmitter();
_this.langRemoveEvent = new EventEmitter();
_this.languageList = [];
_this.dataLangList = [];
_this.oldLangs = [];
_this.markCreatedLangs = [];
_this.selectedLang = null;
_this.defaultData = null;
_this.dialogService = dialogService;
return _this;
}
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
this.defaultData = this.getDefaultLangData();
this.refreshLanguageList();
this.refreshDataLanguageList();
};
/**
* @param {?} langCode
* @param {?=} objId
* @return {?}
*/
AbstractDataLangSelector.prototype.isDataObjectsContainsLang = /**
* @param {?} langCode
* @param {?=} objId
* @return {?}
*/
function (langCode, objId) {
var /** @type {?} */ result = this.getDataObjectByLang(langCode, objId);
if (result !== null && typeof result !== 'undefined') {
return true;
}
return false;
};
/**
* @param {?} langCode
* @param {?=} objId
* @return {?}
*/
AbstractDataLangSelector.prototype.getDataObjectByLang = /**
* @param {?} langCode
* @param {?=} objId
* @return {?}
*/
function (langCode, objId) {
var /** @type {?} */ objects = this.getDataObjects();
if (objects !== null && typeof objects !== 'undefined') {
var /** @type {?} */ objIdFieldName = this.getObjectIdFieldName();
var /** @type {?} */ langFieldName = this.getLanguageFieldName();
if (langFieldName !== null) {
try {
for (var objects_1 = tslib_1.__values(objects), objects_1_1 = objects_1.next(); !objects_1_1.done; objects_1_1 = objects_1.next()) {
var d = objects_1_1.value;
var /** @type {?} */ langPass = false;
if (d[langFieldName] === langCode) {
langPass = true;
}
var /** @type {?} */ objIdPass = true;
if (typeof objId !== 'undefined') {
if (d[objIdFieldName] !== objId) {
objIdPass = false;
}
}
if (langPass && objIdPass) {
return d;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (objects_1_1 && !objects_1_1.done && (_a = objects_1.return)) _a.call(objects_1);
}
finally { if (e_1) throw e_1.error; }
}
}
}
return null;
var e_1, _a;
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.getDefaultLangData = /**
* @return {?}
*/
function () {
return this.getDefaultData();
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.refreshDataLanguageList = /**
* @return {?}
*/
function () {
var _this = this;
var /** @type {?} */ defaultObj = this.getDefaultLangData();
this.defaultData = defaultObj;
// search for other lang
var /** @type {?} */ langFieldName = this.getLanguageFieldName();
this.oldLangs = [];
var /** @type {?} */ langProm = this.loadDataLanguageList(defaultObj);
if (langProm !== null && typeof langProm !== 'undefined') {
langProm.then(function (result) {
var /** @type {?} */ tempArray = [];
if (result !== null && typeof result !== 'undefined') {
if (Array.isArray(result)) {
tempArray = result;
}
else {
tempArray.push(result);
}
}
// check contain
var /** @type {?} */ langCode = [];
try {
for (var _a = tslib_1.__values(_this.languageList), _b = _a.next(); !_b.done; _b = _a.next()) {
var lang = _b.value;
langCode.push(lang.code);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_2) throw e_2.error; }
}
var /** @type {?} */ isAdded = false;
try {
for (var tempArray_1 = tslib_1.__values(tempArray), tempArray_1_1 = tempArray_1.next(); !tempArray_1_1.done; tempArray_1_1 = tempArray_1.next()) {
var temp = tempArray_1_1.value;
var /** @type {?} */ tempCode = temp[langFieldName];
if (langCode.indexOf(tempCode) <= -1) {
isAdded = true;
_this.languageList.push(_this.parseLanguageButtonModel(tempCode));
}
_this.oldLangs.push(tempCode);
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (tempArray_1_1 && !tempArray_1_1.done && (_d = tempArray_1.return)) _d.call(tempArray_1);
}
finally { if (e_3) throw e_3.error; }
}
if (isAdded) {
_this.sortLanguageList(_this.languageList);
}
_this.dataLangList = [];
for (var /** @type {?} */ i = 0; i < _this.languageList.length; i++) {
var /** @type {?} */ item = _this.languageList[i];
var /** @type {?} */ matched = null;
try {
for (var tempArray_2 = tslib_1.__values(tempArray), tempArray_2_1 = tempArray_2.next(); !tempArray_2_1.done; tempArray_2_1 = tempArray_2.next()) {
var temp = tempArray_2_1.value;
if (item.code === temp[langFieldName]) {
var /** @type {?} */ curData = _this.getDataObjectByLang(item.code);
if (curData === null) {
matched = temp;
}
else {
// get from old
matched = curData;
}
break;
}
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (tempArray_2_1 && !tempArray_2_1.done && (_e = tempArray_2.return)) _e.call(tempArray_2);
}
finally { if (e_4) throw e_4.error; }
}
_this.dataLangList.push(matched);
}
var e_2, _c, e_3, _d, e_4, _e;
});
}
else {
this.dataLangList = [];
for (var /** @type {?} */ i = 0; i < this.languageList.length; i++) {
this.dataLangList.push(null);
}
}
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.refreshLanguageList = /**
* @return {?}
*/
function () {
this.languageList = [];
var /** @type {?} */ defaultLangs = this.getLanguageList();
if (defaultLangs !== null && typeof defaultLangs !== 'undefined' && Array.isArray(defaultLangs)) {
try {
for (var defaultLangs_1 = tslib_1.__values(defaultLangs), defaultLangs_1_1 = defaultLangs_1.next(); !defaultLangs_1_1.done; defaultLangs_1_1 = defaultLangs_1.next()) {
var lang = defaultLangs_1_1.value;
this.languageList.push(this.parseLanguageButtonModel(lang));
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (defaultLangs_1_1 && !defaultLangs_1_1.done && (_a = defaultLangs_1.return)) _a.call(defaultLangs_1);
}
finally { if (e_5) throw e_5.error; }
}
}
this.sortLanguageList(this.languageList);
var e_5, _a;
};
/**
* @param {?} objArray
* @return {?}
*/
AbstractDataLangSelector.prototype.sortLanguageList = /**
* @param {?} objArray
* @return {?}
*/
function (objArray) {
if (objArray === null || typeof objArray === 'undefined') {
return;
}
objArray.sort(function (obj1, obj2) {
if ((obj1 === null || typeof obj1 === 'undefined') && (obj2 !== null && typeof obj2 !== 'undefined')) {
return 1;
}
else if ((obj1 !== null && typeof obj1 !== 'undefined') && (obj2 === null || typeof obj2 === 'undefined')) {
return -1;
}
else if ((obj1 === null || typeof obj1 === 'undefined') && (obj2 === null || typeof obj2 === 'undefined')) {
return 0;
}
var /** @type {?} */ code1 = obj1.code;
var /** @type {?} */ code2 = obj2.code;
if ((code1 === null || typeof code1 === 'undefined') && (code2 !== null && typeof code2 !== 'undefined')) {
return 1;
}
else if ((code1 !== null && typeof code1 !== 'undefined') && (code2 === null || typeof code2 === 'undefined')) {
return -1;
}
else if ((code1 === null || typeof code1 === 'undefined') && (code2 === null || typeof code2 === 'undefined')) {
return 0;
}
if (code1 < code2) {
return -1;
}
else if (code1 > code2) {
return 1;
}
return 0;
});
};
/**
* @param {?} langModel
* @return {?}
*/
AbstractDataLangSelector.prototype.langTabChange = /**
* @param {?} langModel
* @return {?}
*/
function (langModel) {
this.selectedLang = langModel;
};
/**
* @param {?} code
* @return {?}
*/
AbstractDataLangSelector.prototype.getLanguageIndex = /**
* @param {?} code
* @return {?}
*/
function (code) {
if (code !== null && typeof code !== 'undefined') {
for (var /** @type {?} */ i = 0; i < this.languageList.length; i++) {
var /** @type {?} */ lang = this.languageList[i];
if (lang.code === code) {
return i;
}
}
}
return -1;
};
/**
* @param {?} langCode
* @return {?}
*/
AbstractDataLangSelector.prototype.createNewLang = /**
* @param {?} langCode
* @return {?}
*/
function (langCode) {
var /** @type {?} */ result = null;
if (langCode !== null && typeof langCode !== 'undefined') {
var /** @type {?} */ langFieldName = this.getLanguageFieldName();
var /** @type {?} */ index = this.getLanguageIndex(langCode);
if (this.isLanguageHasData(langCode)) {
// already has data in the lang
if (index > -1 && index < this.dataLangList.length) {
var /** @type {?} */ dataLang = this.dataLangList[index];
result = dataLang;
}
if (index > -1 && index < this.languageList.length) {
this.langTabChange(this.languageList[index]);
}
}
else {
// create empty data
if (index > -1 && index < this.dataLangList.length) {
var /** @type {?} */ cloneDefault = {};
var /** @type {?} */ defaultData = this.getDefaultLangData();
if (defaultData !== null && typeof defaultData !== 'undefined') {
cloneDefault = JSON.parse(JSON.stringify(defaultData));
}
cloneDefault[langFieldName] = langCode; // add lang
this.dataLangList[index] = cloneDefault;
result = cloneDefault;
if (index > -1 && index < this.languageList.length) {
this.langTabChange(this.languageList[index]);
}
}
}
this.onLanguageAdded(result);
var /** @type {?} */ data = result;
var /** @type {?} */ ev = EventUtils.newCustomEvent(LANG_ADD_EVENT, this, data, null);
this.langAddEvent.emit(ev);
}
return result;
};
/**
* @param {?} langCode
* @return {?}
*/
AbstractDataLangSelector.prototype.removeLanguageData = /**
* @param {?} langCode
* @return {?}
*/
function (langCode) {
var /** @type {?} */ result = null;
if (langCode !== null && typeof langCode !== 'undefined') {
var /** @type {?} */ langFieldName = this.getLanguageFieldName();
if (this.isLanguageHasData(langCode)) {
var /** @type {?} */ index = this.getLanguageIndex(langCode);
var /** @type {?} */ changeToDefLang = false;
// remove from datalanglist
if (index > -1 && index < this.dataLangList.length) {
var /** @type {?} */ removeItem = this.dataLangList[index];
result = removeItem;
this.dataLangList[index] = null;
if (this.selectedLang === this.languageList[index]) {
changeToDefLang = true;
}
}
if (changeToDefLang) {
// set tab to default
this.langTabChange(null);
}
}
else {
// no lang data
}
this.onLanguageRemoved(result);
var /** @type {?} */ data = result;
var /** @type {?} */ ev = EventUtils.newCustomEvent(LANG_REMOVE_EVENT, this, data, null);
this.langRemoveEvent.emit(ev);
}
return result;
};
/**
* @param {?} index
* @return {?}
*/
AbstractDataLangSelector.prototype._isSelectedLanguageByIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
if (typeof index !== 'undefined') {
if (index !== null) {
// find lang model
if (index >= 0 && index < this.languageList.length) {
return this.isSelectedLanguage(this.languageList[index]);
}
}
else {
return this.isSelectedLanguage(null);
}
}
return false;
};
/**
* @param {?} index
* @return {?}
*/
AbstractDataLangSelector.prototype._langHasDataByIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
if (index <= -1) {
return false;
}
if (index < this.dataLangList.length) {
var /** @type {?} */ value = this.dataLangList[index];
if (value !== null && typeof value !== 'undefined') {
return true;
}
}
return false;
};
/**
* @param {?} index
* @return {?}
*/
AbstractDataLangSelector.prototype._isDataDirtyByIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
var /** @type {?} */ dataLang = null;
if (index !== null && typeof index === 'number' && index > -1) {
if (index < this.dataLangList.length) {
dataLang = this.dataLangList[index];
}
}
var /** @type {?} */ isDirty = this.isDataLanguageDirty(dataLang);
if (isDirty) {
return true;
}
return false;
};
/**
* @param {?} langModel
* @return {?}
*/
AbstractDataLangSelector.prototype._hasButtonIcon = /**
* @param {?} langModel
* @return {?}
*/
function (langModel) {
if (langModel !== null && typeof langModel !== 'undefined') {
if (langModel.iconURL !== null && typeof langModel.iconURL !== 'undefined' && langModel.iconURL !== '') {
return true;
}
}
return false;
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype._getDataLangList = /**
* @return {?}
*/
function () {
return this.dataLangList;
};
/**
* when new language was created this method will be called
* @param {?} newLangData as any
* @return {?}
*/
AbstractDataLangSelector.prototype.onLanguageAdded = /**
* when new language was created this method will be called
* @param {?} newLangData as any
* @return {?}
*/
function (newLangData) {
if (this.controller !== null && typeof this.controller !== 'undefined') {
this.controller.languageAdded(newLangData);
}
};
/**
* when language was removed this method will be called
* @param {?} removedData
* @return {?}
*/
AbstractDataLangSelector.prototype.onLanguageRemoved = /**
* when language was removed this method will be called
* @param {?} removedData
* @return {?}
*/
function (removedData) {
if (this.controller !== null && typeof this.controller !== 'undefined') {
this.controller.languageRemoved(removedData);
}
};
/**
* @param {?} $event
* @param {?} langModel
* @param {?} index
* @return {?}
*/
AbstractDataLangSelector.prototype.onActionBtnClicked = /**
* @param {?} $event
* @param {?} langModel
* @param {?} index
* @return {?}
*/
function ($event, langModel, index) {
var _this = this;
var /** @type {?} */ showDialog = true;
if (langModel === null) {
// default
showDialog = false;
}
if (this._langHasDataByIndex(index)) {
showDialog = false;
}
if (showDialog) {
// asking to new tab
var /** @type {?} */ prom = this.createNewLangWithConfirmDialog(langModel.code);
prom.then(function (result) {
var /** @type {?} */ data = langModel;
var /** @type {?} */ ev = EventUtils.newCustomEvent(LANG_CLICK_EVENT, _this, data, $event);
_this.langClickEvent.emit(ev);
});
}
else {
this.langTabChange(langModel);
var /** @type {?} */ data = langModel;
var /** @type {?} */ ev = EventUtils.newCustomEvent(LANG_CLICK_EVENT, this, data, $event);
this.langClickEvent.emit(ev);
}
};
/**
* @param {?} langModel
* @return {?}
*/
AbstractDataLangSelector.prototype.isSelectedLanguage = /**
* @param {?} langModel
* @return {?}
*/
function (langModel) {
if (typeof this.selectedLang !== 'undefined') {
return this.selectedLang === langModel;
}
return false;
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.hasLanguage = /**
* @return {?}
*/
function () {
if (this.languageList !== null && typeof this.languageList !== 'undefined' && this.languageList.length > 0) {
return true;
}
return false;
};
/**
* @param {?} defaultData as any
* @return {?} promise that return array of dataLang object
*/
AbstractDataLangSelector.prototype.loadDataLanguageList = /**
* @param {?} defaultData as any
* @return {?} promise that return array of dataLang object
*/
function (defaultData) {
if (this.controller !== null && typeof this.controller !== 'undefined') {
return this.controller.loadDataLanguageList(defaultData);
}
return Promise.resolve(null);
};
/**
* @return {?} any as object in pattern {iconURL: string, code: string, label: string}
*/
AbstractDataLangSelector.prototype.getLanguageList = /**
* @return {?} any as object in pattern {iconURL: string, code: string, label: string}
*/
function () {
if (this.controller !== null && typeof this.controller !== 'undefined') {
return this.controller.getLanguageList();
}
return null;
};
/**
* <p style="text-indent: 1em;">
* To check that the data bound to <code>this</code> component having the given language <code><b>code</b></code> or not.
* </p>
*
* @param {?} code The language code to check.
*
* @return {?} <code>True</code> if there is the given language <code><b>code</b></code> in the <code>data</code>. Otherwise,
* returns <code>false</code>.
*/
AbstractDataLangSelector.prototype.isLanguageHasData = /**
* <p style="text-indent: 1em;">
* To check that the data bound to <code>this</code> component having the given language <code><b>code</b></code> or not.
* </p>
*
* @param {?} code The language code to check.
*
* @return {?} <code>True</code> if there is the given language <code><b>code</b></code> in the <code>data</code>. Otherwise,
* returns <code>false</code>.
*/
function (code) {
if (code !== null && typeof code !== 'undefined') {
var /** @type {?} */ index = this.getLanguageIndex(code);
return this._langHasDataByIndex(index);
}
return false;
};
/**
* <p style="text-indent: 1em;">
* Create a new data lang by showing confirmation dialog first. If the given language code (<code><b>langCode</b></code>) already
* exists in component data, this method will return a resolved <code>Promise</code> having result as data object of the
* corresponding language.
* </p>
*
* @param {?} langCode The language code to create.
*
* @return {?} A <code>Promise</code> with result's value as in the following cases: <br/>
* <ul>
* <li>If [[DialogService]] is not available, returns <code>null</code>.</li>
* <li>If the user clicks <code>NO</code> button, returns <code>null</code>.</li>
* <li>If the given <code><b>langCode</b></code> already exists, returns data object of the corresponding language.</li>
* <li>Otherwise, returns a newly created data object of the given language.</li>
* </ul>
*/
AbstractDataLangSelector.prototype.createNewLangWithConfirmDialog = /**
* <p style="text-indent: 1em;">
* Create a new data lang by showing confirmation dialog first. If the given language code (<code><b>langCode</b></code>) already
* exists in component data, this method will return a resolved <code>Promise</code> having result as data object of the
* corresponding language.
* </p>
*
* @param {?} langCode The language code to create.
*
* @return {?} A <code>Promise</code> with result's value as in the following cases: <br/>
* <ul>
* <li>If [[DialogService]] is not available, returns <code>null</code>.</li>
* <li>If the user clicks <code>NO</code> button, returns <code>null</code>.</li>
* <li>If the given <code><b>langCode</b></code> already exists, returns data object of the corresponding language.</li>
* <li>Otherwise, returns a newly created data object of the given language.</li>
* </ul>
*/
function (langCode) {
var _this = this;
return new Promise(function (resolve, reject) {
if (_this.dialogService === null || typeof _this.dialogService === 'undefined') {
resolve(null);
return;
}
var /** @type {?} */ langFieldName = _this.getLanguageFieldName();
_this.dialogService.showConfirmDialog('Confirm Create Data', 'Do you want to Create data in new language ?', false).then(function (result) {
if (result == 1) {
var /** @type {?} */ rData = _this.createNewLang(langCode);
resolve(rData);
}
else {
// NO
resolve(null);
}
});
});
};
/**
* <p style="text-indent: 1em;">
* Remove data lang by showing confirmation dialog first. If the given language code (<code><b>langCode</b></code>) does not
* exist in component data, this method will return a resolved <code>Promise</code> having result as <code>null</code>.
* </p>
*
* @param {?} langCode The language code to remove.
*
* @return {?} A <code>Promise</code> with result's value as in the following cases: <br/>
* <ul>
* <li>If [[DialogService]] is not available, returns <code>null</code>.</li>
* <li>If the user clicks <code>NO</code> button, returns <code>null</code>.</li>
* <li>If the given <code><b>langCode</b></code> does not exist, returns <code>null</code>.</li>
* <li>Otherwise, returns data object of the corresponding <code><b>langCode</b></code>.</li>
* </ul>
*/
AbstractDataLangSelector.prototype.removeLangWithConfirmDialog = /**
* <p style="text-indent: 1em;">
* Remove data lang by showing confirmation dialog first. If the given language code (<code><b>langCode</b></code>) does not
* exist in component data, this method will return a resolved <code>Promise</code> having result as <code>null</code>.
* </p>
*
* @param {?} langCode The language code to remove.
*
* @return {?} A <code>Promise</code> with result's value as in the following cases: <br/>
* <ul>
* <li>If [[DialogService]] is not available, returns <code>null</code>.</li>
* <li>If the user clicks <code>NO</code> button, returns <code>null</code>.</li>
* <li>If the given <code><b>langCode</b></code> does not exist, returns <code>null</code>.</li>
* <li>Otherwise, returns data object of the corresponding <code><b>langCode</b></code>.</li>
* </ul>
*/
function (langCode) {
var _this = this;
return new Promise(function (resolve, reject) {
if (_this.dialogService === null || typeof _this.dialogService === 'undefined') {
resolve(null);
return;
}
var /** @type {?} */ langFieldName = _this.getLanguageFieldName();
_this.dialogService.showConfirmDialog('Confirm Remove Data', 'Do you want to Remove ' + langCode + ' ?', false).then(function (result) {
if (result == 1) {
var /** @type {?} */ rData = _this.removeLanguageData(langCode);
resolve(rData);
}
else {
// NO
resolve(null);
}
});
});
};
/**
* <p style="text-indent: 1em;">
* Get output [[EventEmitter]] which will emit an event when lang button of <code>this</code> component is clicked.
* </p>
* @return {?}
*/
AbstractDataLangSelector.prototype.getLangClickEvent = /**
* <p style="text-indent: 1em;">
* Get output [[EventEmitter]] which will emit an event when lang button of <code>this</code> component is clicked.
* </p>
* @return {?}
*/
function () {
return this.langClickEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDataLangSelector.prototype.setLangClickEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.langClickEvent = event;
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.getLangAddEvent = /**
* @return {?}
*/
function () {
return this.langAddEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDataLangSelector.prototype.setLangAddEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.langAddEvent = event;
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.getLangRemoveEvent = /**
* @return {?}
*/
function () {
return this.langRemoveEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDataLangSelector.prototype.setLangRemoveEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.langRemoveEvent = event;
};
/**
* @param {?} data
* @return {?}
*/
AbstractDataLangSelector.prototype.setData = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.data = data;
this.selectedLang = null;
this.refreshDataLanguageList();
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.isSelfDataDirty = /**
* @return {?}
*/
function () {
if (this.dataLangList !== null && typeof this.dataLangList !== 'undefined') {
var /** @type {?} */ langFieldName = this.getLanguageFieldName();
var /** @type {?} */ objIdFieldName = this.getObjectIdFieldName();
var /** @type {?} */ newLangDirty = false;
try {
for (var _a = tslib_1.__values(this.dataLangList), _b = _a.next(); !_b.done; _b = _a.next()) {
var dataLang = _b.value;
if (dataLang === null || typeof dataLang === 'undefined') {
continue;
}
var /** @type {?} */ lang = dataLang[langFieldName];
var /** @type {?} */ objId = dataLang[objIdFieldName];
if (lang !== null && typeof lang !== 'undefined') {
if (objId === null || typeof objId === 'undefined') {
newLangDirty = true;
break;
}
}
var /** @type {?} */ isDirty = this.isDataLanguageDirty(dataLang);
if (isDirty) {
return true;
}
}
}
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_6) throw e_6.error; }
}
if (newLangDirty) {
return true;
}
}
return false;
var e_6, _c;
};
/**
*
* @return {?}
*/
AbstractDataLangSelector.prototype.getMergedLanguageList = /**
*
* @return {?}
*/
function () {
return this.languageList;
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.selfSaveData = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.selfResetData = /**
* @return {?}
*/
function () {
};
/**
* @param {?} controller
* @return {?}
*/
AbstractDataLangSelector.prototype.setController = /**
* @param {?} controller
* @return {?}
*/
function (controller) {
this.controller = controller;
};
/**
* @param {?} langCode
* @return {?}
*/
AbstractDataLangSelector.prototype.isNew = /**
* @param {?} langCode
* @return {?}
*/
function (langCode) {
if (langCode !== null && typeof langCode !== 'undefined') {
var /** @type {?} */ oldLangContsins = (this.oldLangs.indexOf(langCode) >= 0) ? true : false;
var /** @type {?} */ markLangContsins = (this.markCreatedLangs.indexOf(langCode) >= 0) ? true : false;
return !oldLangContsins && !markLangContsins;
}
else {
// DefaultData
var /** @type {?} */ defaultData = this.getDefaultData();
if (defaultData !== null && typeof defaultData !== 'undefined') {
var /** @type {?} */ uuid = defaultData._uuid;
if (uuid === null || typeof uuid === 'undefined') {
return true;
}
}
else {
return true;
}
}
return false;
};
/**
* @param {?} langCode
* @return {?}
*/
AbstractDataLangSelector.prototype.markLangAsCreated = /**
* @param {?} langCode
* @return {?}
*/
function (langCode) {
if (langCode === null || typeof langCode === 'undefined') {
// DefaultData
}
var /** @type {?} */ index = this.markCreatedLangs.indexOf(langCode);
if (index < 0) {
this.markCreatedLangs.push(langCode);
}
};
/**
* @param {?} langCode
* @return {?}
*/
AbstractDataLangSelector.prototype.unmarkLangAsCreated = /**
* @param {?} langCode
* @return {?}
*/
function (langCode) {
if (langCode === null || typeof langCode === 'undefined') {
// DefaultData
}
var /** @type {?} */ index = this.markCreatedLangs.indexOf(langCode);
if (index >= 0) {
this.markCreatedLangs.splice(index, 1);
}
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.doPreload = /**
* @return {?}
*/
function () { return new Promise(function (resolve, reject) { resolve(null); }); };
/**
* @return {?}
*/
AbstractDataLangSelector.prototype.doLoaded = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
AbstractDataLangSelector.prototype._getDefaultData = /**
* @return {?}
*/
function () {
return this.defaultData;
};
tslib_1.__decorate([
Option('langClick'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDataLangSelector.prototype, "langClickEvent", void 0);
tslib_1.__decorate([
Option('langAdd'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDataLangSelector.prototype, "langAddEvent", void 0);
tslib_1.__decorate([
Option('langRemove'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDataLangSelector.prototype, "langRemoveEvent", void 0);
return AbstractDataLangSelector;
}(AbstractHasDataHelp));
export { AbstractDataLangSelector };
function AbstractDataLangSelector_tsickle_Closure_declarations() {
/** @type {?} */
AbstractDataLangSelector.prototype.oldLangs;
/** @type {?} */
AbstractDataLangSelector.prototype.markCreatedLangs;
/** @type {?} */
AbstractDataLangSelector.prototype.defaultData;
/** @type {?} */
AbstractDataLangSelector.prototype.langClickEvent;
/** @type {?} */
AbstractDataLangSelector.prototype.langAddEvent;
/** @type {?} */
AbstractDataLangSelector.prototype.langRemoveEvent;
/** @type {?} */
AbstractDataLangSelector.prototype.dialogService;
/** @type {?} */
AbstractDataLangSelector.prototype.languageList;
/** @type {?} */
AbstractDataLangSelector.prototype.selectedLang;
/** @type {?} */
AbstractDataLangSelector.prototype.dataLangList;
/** @type {?} */
AbstractDataLangSelector.prototype.controller;
/**
* @abstract
* @return {?} any as one object.
*/
AbstractDataLangSelector.prototype.getDefaultData = function () { };
/**
* @abstract
* @return {?}
*/
AbstractDataLangSelector.prototype.getDataObjects = function () { };
/**
* @abstract
* @return {?}
*/
AbstractDataLangSelector.prototype.getLanguageFieldName = function () { };
/**
* @abstract
* @return {?}
*/
AbstractDataLangSelector.prototype.getObjectIdFieldName = function () { };
/**
* @abstract
* @param {?} data as a dataLanguage
* @return {?} boolean is dataLanguageDirty
*/
AbstractDataLangSelector.prototype.isDataLanguageDirty = function (data) { };
/**
* @abstract
* @param {?} langCode
* @return {?}
*/
AbstractDataLangSelector.prototype.parseLanguageButtonModel = function (langCode) { };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3REYXRhTGFuZ1NlbGVjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0RGF0YUxhbmdTZWxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBNEIsWUFBWSxFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUs1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztJQVd4QyxvREFBbUI7SUFtQnhFLGtDQUFZLFVBQXNCLEVBQUUsYUFBNEI7UUFBaEUsWUFDRSxrQkFBTSxVQUFVLENBQUMsU0FXbEI7UUFWQyxLQUFJLENBQUMsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekMsS0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLEtBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQyxLQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLEtBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLEtBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOztLQUNwQzs7OztJQUVNLDJDQUFROzs7O1FBQ2IsaUJBQU0sUUFBUSxXQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUU3QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzs7Ozs7OztJQUd6Qiw0REFBeUI7Ozs7O2NBQUMsUUFBZ0IsRUFBRSxLQUFjO1FBQ2hFLHFCQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDOzs7Ozs7O0lBR1Asc0RBQW1COzs7OztjQUFDLFFBQWdCLEVBQUUsS0FBYztRQUMxRCxxQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN2RCxxQkFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDakQscUJBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBRWhELEVBQUUsQ0FBQyxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDOztvQkFDM0IsR0FBRyxDQUFDLENBQVUsSUFBQSxZQUFBLGlCQUFBLE9BQU8sQ0FBQSxnQ0FBQTt3QkFBaEIsSUFBSSxDQUFDLG9CQUFBO3dCQUNSLHFCQUFJLFFBQVEsR0FBWSxLQUFLLENBQUM7d0JBQzlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDOzRCQUNsQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3lCQUNqQjt3QkFDRCxxQkFBSSxTQUFTLEdBQVksSUFBSSxDQUFDO3dCQUM5QixFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDOzRCQUNqQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztnQ0FDaEMsU0FBUyxHQUFHLEtBQUssQ0FBQzs2QkFDbkI7eUJBQ0Y7d0JBRUQsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUM7NEJBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUM7eUJBQ1Y7cUJBQ0Y7Ozs7Ozs7OzthQUNGO1NBQ0Y7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDOzs7Ozs7SUFHTixxREFBa0I7Ozs7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzs7Ozs7SUFHdkIsMERBQXVCOzs7OztRQUM3QixxQkFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7O1FBRzlCLHFCQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixxQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6RCxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBTTtnQkFDbkIscUJBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsU0FBUyxHQUFHLE1BQU0sQ0FBQztxQkFDcEI7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDeEI7aUJBQ0Y7O2dCQUdELHFCQUFJLFFBQVEsR0FBYSxFQUFFLENBQUM7O29CQUM1QixHQUFHLENBQUMsQ0FBYSxJQUFBLEtBQUEsaUJBQUEsS0FBSSxDQUFDLFlBQVksQ0FBQSxnQkFBQTt3QkFBN0IsSUFBSSxJQUFJLFdBQUE7d0JBQ1gsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzFCOzs7Ozs7Ozs7Z0JBQ0QscUJBQUksT0FBTyxHQUFZLEtBQUssQ0FBQzs7b0JBQzdCLEdBQUcsQ0FBQyxDQUFhLElBQUEsY0FBQSxpQkFBQSxTQUFTLENBQUEsb0NBQUE7d0JBQXJCLElBQUksSUFBSSxzQkFBQTt3QkFDWCxxQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUNuQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDckMsT0FBTyxHQUFHLElBQUksQ0FBQzs0QkFDZixLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt5QkFDakU7d0JBQ0QsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzlCOzs7Ozs7Ozs7Z0JBQ0QsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDWixLQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUMxQztnQkFFRCxLQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsR0FBRyxDQUFDLENBQUMscUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDbEQscUJBQUksSUFBSSxHQUFHLEtBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRWhDLHFCQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7O3dCQUNuQixHQUFHLENBQUMsQ0FBYSxJQUFBLGNBQUEsaUJBQUEsU0FBUyxDQUFBLG9DQUFBOzRCQUFyQixJQUFJLElBQUksc0JBQUE7NEJBQ1gsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUN0QyxxQkFBSSxPQUFPLEdBQUcsS0FBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FFbEQsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7b0NBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUM7aUNBQ2hCO2dDQUFDLElBQUksQ0FBQyxDQUFDOztvQ0FFTixPQUFPLEdBQUcsT0FBTyxDQUFDO2lDQUNuQjtnQ0FFRCxLQUFLLENBQUM7NkJBQ1A7eUJBQ0Y7Ozs7Ozs7OztvQkFDRCxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDakM7O2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxDQUFDLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7Ozs7O0lBR0ssc0RBQW1COzs7O1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLHFCQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsRUFBRSxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxPQUFPLFlBQVksS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQUNoRyxHQUFHLENBQUMsQ0FBYSxJQUFBLGlCQUFBLGlCQUFBLFlBQVksQ0FBQSwwQ0FBQTtvQkFBeEIsSUFBSSxJQUFJLHlCQUFBO29CQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUM3RDs7Ozs7Ozs7O1NBQ0Y7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOzs7Ozs7O0lBR25DLG1EQUFnQjs7OztjQUFDLFFBQWU7UUFDdEMsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQztTQUNSO1FBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFTLElBQUksRUFBRSxJQUFJO1lBQy9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNYO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7WUFFRCxxQkFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM5QixxQkFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUU5QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekcsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUNWO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoSCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDWDtZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEgsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUNWO1lBRUQsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNYO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7WUFFRCxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ1YsQ0FBQyxDQUFDOzs7Ozs7SUFHRyxnREFBYTs7OztjQUFDLFNBQThCO1FBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDOzs7Ozs7SUFHeEIsbURBQWdCOzs7O2NBQUMsSUFBWTtRQUNuQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakQsR0FBRyxDQUFDLENBQUMscUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbEQscUJBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDVjthQUNGO1NBQ0Y7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7OztJQUdKLGdEQUFhOzs7O2NBQUMsUUFBZ0I7UUFDcEMscUJBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDekQscUJBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hELHFCQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBRXJDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNuRCxxQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEMsTUFBTSxHQUFHLFFBQVEsQ0FBQztpQkFDbkI7Z0JBQ0QsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM5QzthQUNGO1lBQUMsSUFBSSxDQUFDLENBQUM7O2dCQUVOLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNuRCxxQkFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUN0QixxQkFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQzVDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksT0FBTyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDL0QsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3FCQUN4RDtvQkFDRCxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUV2QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQztvQkFDeEMsTUFBTSxHQUFHLFlBQVksQ0FBQztvQkFFdEIsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUM5QztpQkFDRjthQUNGO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QixxQkFBSSxJQUFJLEdBQVEsTUFBTSxDQUFDO1lBQ3ZCLHFCQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXJFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0lBR1IscURBQWtCOzs7O2NBQUMsUUFBZ0I7UUFDekMscUJBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDekQscUJBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBRWhELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLHFCQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENB