UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

1,028 lines (1,027 loc) 103 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { EventEmitter, ViewChildren, QueryList } from '@angular/core'; import { AbstractI18NApplicable } from '../share/AbstractI18NApplicable'; import { Option } from '../decorator/decorators'; import { LOAD_EVENT } from '../share/CustomEventType'; import { EventUtils } from '../share/utils/EventUtils'; import { Preload } from '../directive/Preload.directive'; const /** @type {?} */ DEFAULT_IGNORE_PARENT_DATA = false; const /** @type {?} */ DEFAULT_DELEGATE_HISTORY = true; /** * <p style="text-indent: 2em;"> * An abstract concrete base class of [[IHasData]] interface. All classes implementing [[IHasData]] interface should extend this class. * For more information, please see [[IHasData]]. * </p> * * @author shiorin, tee4cute * @see [[IHasData]] * @abstract */ export class AbstractHasData extends AbstractI18NApplicable { /** * @param {?} elementRef * @param {?=} kbShortcutService */ constructor(elementRef, kbShortcutService) { super(); this.dataChildren = []; this.histories = []; this.historyCursor = -1; this.elementRef = elementRef; this._disabled = false; this._loaded = false; this._loading = false; this.kbShortcutService = kbShortcutService; this.loadingEnabled = true; } /** * @return {?} */ get disabled() { if (this.dataParent !== null && typeof this.dataParent !== 'undefined') { let /** @type {?} */ parent = this.dataParent; if (typeof parent.isDisabled === 'function' && !this.ignoreParentDisabled) { return parent.isDisabled() || this._disabled; } } return this._disabled; } /** * @param {?} value * @return {?} */ set disabled(value) { // change dom css class let /** @type {?} */ oldSelfDisabled = this._disabled; this._disabled = value; let /** @type {?} */ parentDisabled = false; if (!this.ignoreParentDisabled && this.dataParent !== null && typeof this.dataParent !== 'undefined') { // Has parent let /** @type {?} */ parent = this.dataParent; if (typeof parent.isDisabled === 'function') { parentDisabled = parent.isDisabled(); } } let /** @type {?} */ oldDisabled = parentDisabled || oldSelfDisabled; let /** @type {?} */ currentDisabled = parentDisabled || this._disabled; if (oldDisabled !== currentDisabled) { if (currentDisabled) { this._propagateOnDisabled(); } else { this._propagateOnEnabled(); } } } /** * @return {?} */ ngOnInit() { if (this.ignoreParentData === null || typeof this.ignoreParentData === 'undefined') { this.ignoreParentData = DEFAULT_IGNORE_PARENT_DATA; } if (this.delegateHistory === null || typeof this.delegateHistory === 'undefined') { this.delegateHistory = DEFAULT_DELEGATE_HISTORY; } if (this.data !== null && typeof this.data !== 'undefined') { this.setData(this.data); } this.setDataParent(this.dataParent); if (this.loadingEnabled) { this.preload(); } else { this._loaded = true; } // auto regist shortcut key if (this.kbShortcutService !== null && typeof this.kbShortcutService !== 'undefined') { if (typeof this["getDefaultShortcutKeyHandlers"] === 'function') { let /** @type {?} */ defaultKeys = this['getDefaultShortcutKeyHandlers'].call(this); if (defaultKeys !== null && typeof defaultKeys !== 'undefined') { for (let /** @type {?} */ shortcut of defaultKeys) { this.kbShortcutService.addKeyHandler(shortcut); } } } if (typeof this["getDefaultShortcutNameHandlers"] === 'function') { let /** @type {?} */ defaultNames = this["getDefaultShortcutNameHandlers"].call(this); if (defaultNames !== null && typeof defaultNames !== 'undefined') { for (let /** @type {?} */ shortcut of defaultNames) { this.kbShortcutService.addNameHandler(shortcut); } } } } // Auto call selfSaveData() on inited. this.selfSaveData(this.data); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes['data'] !== null && typeof changes['data'] !== 'undefined') { let /** @type {?} */ newVal = changes['data'].currentValue; this.setData(newVal); } if (changes['dataParent'] !== null && typeof changes['dataParent'] !== 'undefined') { let /** @type {?} */ newVal = changes['dataParent'].currentValue; this.setDataParent(newVal); } } /** * @return {?} */ ngOnDestroy() { // auto unregist shortcut key if (this.kbShortcutService !== null && typeof this.kbShortcutService !== 'undefined') { if (typeof this["getDefaultShortcutKeyHandlers"] === 'function') { let /** @type {?} */ defaultKeys = this['getDefaultShortcutKeyHandlers'].call(this); for (let /** @type {?} */ shortcut of defaultKeys) { this.kbShortcutService.removeKeyHandler(shortcut); } } if (typeof this["getDefaultShortcutNameHandlers"] === 'function') { let /** @type {?} */ defaultNames = this["getDefaultShortcutNameHandlers"].call(this); for (let /** @type {?} */ shortcut of defaultNames) { this.kbShortcutService.removeNameHandler(shortcut); } } } } /** * @return {?} */ _propagateOnDisabled() { // Firstly, call this.onDisabled(this). if (this.onDisabled !== null && typeof this.onDisabled === 'function') { this.onDisabled(this); } // Auto add css class "disabled" to this native element. if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { let /** @type {?} */ hasClass = $(this.elementRef.nativeElement).hasClass("disabled"); if (!hasClass) { $(this.elementRef.nativeElement).addClass("disabled"); } } // Then, propagate method call to children & descendants. if (this.dataChildren !== null) { for (let /** @type {?} */ c of this.dataChildren) { let /** @type {?} */ child = /** @type {?} */ (c); let /** @type {?} */ ignore = false; if (typeof child.isIgnoreParentDisabled === 'function') { ignore = child.isIgnoreParentDisabled(); } if (ignore) { // If this child ignore parent's disabled, do nothing. continue; } let /** @type {?} */ childSelfDisabled = false; if (typeof child.isSelfDisabled === 'function') { childSelfDisabled = child.isSelfDisabled(); } if (!childSelfDisabled) { // If the child itself was not disabled before, but, this parent is going to be disabled, // we'll propagate onDisabled to this child and its descendants. // So, child._propagateOnDisabled() must be called. if (typeof child._propagateOnDisabled === 'function') { child._propagateOnDisabled(); } } } } } /** * @return {?} */ _propagateOnEnabled() { // Firstly, call this.onEnabled(this). if (this.onEnabled !== null && typeof this.onEnabled === 'function') { this.onEnabled(this); } // Auto remove css class "disabled" from this native element. if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { let /** @type {?} */ hasClass = $(this.elementRef.nativeElement).hasClass("disabled"); if (hasClass) { $(this.elementRef.nativeElement).removeClass("disabled"); } } // Then, propagate method call to children & descendants. if (this.dataChildren !== null) { for (let /** @type {?} */ c of this.dataChildren) { let /** @type {?} */ child = /** @type {?} */ (c); let /** @type {?} */ ignore = false; if (typeof child.isIgnoreParentDisabled === 'function') { ignore = child.isIgnoreParentDisabled(); } if (ignore) { // If this child ignore parent's disabled, do nothing. continue; } let /** @type {?} */ childSelfDisabled = false; if (typeof child.isSelfDisabled === 'function') { childSelfDisabled = child.isSelfDisabled(); } if (!childSelfDisabled) { // If the child itself was not disabled before, but, this parent is going to be enabled, // we'll propagate onEnabled to this child and its descendants. // So, child._propagateOnEnabled() must be called. if (typeof child._propagateOnEnabled === 'function') { child._propagateOnEnabled(); } } } } } /** * @param {?} first * @param {?=} component * @param {?=} name * @return {?} */ _makeHistory(first, component, name) { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['makeHistory'] === 'function') { let /** @type {?} */ comp = component; if ((comp === null || typeof comp === 'undefined') && typeof this['getCurrentHistoryState'] === 'function') { comp = this; } return (/** @type {?} */ (this.dataParent)).makeHistory(comp, name); } } if (!first) { if (this.histories.length <= 0) { throw new Error('The method "makeFirstHistory()" should be called at the first time before calling subsequent "makeHistory()".'); } } else { if (this.histories.length > 0) { throw new Error('The method "makeFirstHistory()" can be called once.'); } } if (component === null || typeof component === 'undefined') { component = /** @type {?} */ (this); } if (typeof component.getCurrentHistoryState !== 'function') { throw new Error('The "component" is not an instance of IHistoryManaged: ' + component.constructor.name); } let /** @type {?} */ state = JSON.parse(JSON.stringify(component.getCurrentHistoryState())); let /** @type {?} */ history = { component: component, name: name, state: state }; this.histories.splice(this.historyCursor + 1, this.histories.length - this.historyCursor - 1, history); this.historyCursor = this.histories.length - 1; return history; } /** * @return {?} */ getData() { return this.data; } /** * @return {?} */ getChainData() { return this.data; } /** * @return {?} */ chainData() { if (this.dataChildren !== null) { let /** @type {?} */ cData = this.getChainData(); for (let /** @type {?} */ c of this.dataChildren) { if (c.isIgnoreParentData()) { continue; } c.setData(cData); } } } /** * @param {?} data * @return {?} */ setData(data) { this.data = data; this.chainData(); } /** * @param {?} child * @return {?} */ addDataChild(child) { if (this.dataChildren !== null) { this.dataChildren.push(child); // Auto set data from parent to child if it has no data. if (child.getData() === undefined && !child.isIgnoreParentData()) { let /** @type {?} */ cData = this.getChainData(); child.setData(cData); } // Auto propagate disabled flag to child if this parent is disabled. if (this.isDisabled() && typeof child['setDisabled'] === 'function') { let /** @type {?} */ ignore = false; if (typeof child['isIgnoreParentDisabled'] === 'function') { ignore = (/** @type {?} */ (child)).isIgnoreParentDisabled(); } if (!ignore) { (/** @type {?} */ (child)).setDisabled(this.isDisabled()); } } let /** @type {?} */ i18nChild = child; if (typeof this.i18nValue !== 'undefined' && typeof i18nChild.applyI18N === 'function') { let /** @type {?} */ value = this.i18nValue; if (value === null) { i18nChild.applyI18N(null); } else if (typeof value.children !== 'undefined') { let /** @type {?} */ bypass = false; if (typeof i18nChild.isBypassKey === 'function') { bypass = i18nChild.isBypassKey(); } if (bypass) { i18nChild.applyI18N(value.children); } else { if (value.children === null) { i18nChild.applyI18N(null); } else { if (typeof i18nChild.getI18NKey === 'function') { let /** @type {?} */ i18nCVal = value.children[i18nChild.getI18NKey()]; if (i18nCVal !== 'undefined') { i18nChild.applyI18N(i18nCVal); } } } } } } } } /** * @param {?} child * @return {?} */ removeDataChild(child) { if (this.dataChildren !== null) { let /** @type {?} */ cIndex = this.dataChildren.indexOf(child); if (cIndex > -1) { this.dataChildren.splice(cIndex, 1); } } } /** * @param {?} dataParent * @return {?} */ setDataParent(dataParent) { if (this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent.removeDataChild === 'function') { this.dataParent.removeDataChild(this); } } this.dataParent = dataParent; if (this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent.addDataChild === 'function') { this.dataParent.addDataChild(this); } } } /** * @return {?} */ getDataParent() { return this.dataParent; } /** * @return {?} */ getDataChildren() { return this.dataChildren; } /** * @return {?} */ isDataDirty() { if (this.dataChildren !== null) { for (let /** @type {?} */ c of this.dataChildren) { if (c.isDataDirty()) { return true; } } } return this.isSelfDataDirty(); } /** * @param {?} ignore * @return {?} */ setIgnoreParentData(ignore) { this.ignoreParentData = ignore; } /** * @return {?} */ isIgnoreParentData() { return this.ignoreParentData; } /** * @param {?} ignore * @return {?} */ setIgnoreParentDisabled(ignore) { this.ignoreParentDisabled = ignore; } /** * @return {?} */ isIgnoreParentDisabled() { return this.ignoreParentDisabled; } /** * @param {?=} data * @return {?} */ saveData(data) { if (data === undefined) { data = this.data; } if (this.dataChildren !== null) { for (let /** @type {?} */ c of this.dataChildren) { c.saveData(data); } } this.selfSaveData(data); } /** * @return {?} */ resetData() { if (this.dataChildren !== null) { for (let /** @type {?} */ c of this.dataChildren) { c.resetData(); } } return this.selfResetData(); } /** * @param {?} value * @return {?} */ applyI18N(value) { if (typeof value === 'undefined') { return; } super.applyI18N(value); if (this.dataChildren !== null) { for (let /** @type {?} */ c of this.dataChildren) { let /** @type {?} */ child = /** @type {?} */ (c); // check if child is applicable if (typeof child.applyI18N === 'function') { if (value === null) { child.applyI18N(null); } else { if (typeof value.children !== 'undefined') { let /** @type {?} */ bypass = false; if (typeof child.isBypassKey === 'function') { bypass = child.isBypassKey(); } if (bypass) { child.applyI18N(value.children); } else { if (value.children === null) { child.applyI18N(null); } else { if (typeof child.getI18NKey === 'function') { let /** @type {?} */ i18nCVal = value.children[child.getI18NKey()]; if (i18nCVal !== 'undefined') { child.applyI18N(i18nCVal); } } } } } } } } } } /** * @return {?} */ isDelegateHistory() { return this.delegateHistory; } /** * @param {?} delegate * @return {?} */ setDelegateHistory(delegate) { this.delegateHistory = delegate; } /** * @return {?} */ getOnEnabled() { return this.onEnabled; } /** * @param {?} handler * @return {?} */ setOnEnabled(handler) { this.onEnabled = handler; } /** * @return {?} */ getOnDisabled() { return this.onDisabled; } /** * @param {?} handler * @return {?} */ setOnDisabled(handler) { this.onDisabled = handler; } /** * @return {?} */ getLoadEvent() { return this.loadEvent; } /** * @param {?} event * @return {?} */ setLoadEvent(event) { this.loadEvent = event; } /** * @param {?=} component * @param {?=} name * @return {?} */ makeFirstHistory(component, name) { return this._makeHistory(true, component, name); } /** * @param {?=} component * @param {?=} name * @return {?} */ makeHistory(component, name) { return this._makeHistory(false, component, name); } /** * @param {?=} steps * @return {?} */ undo(steps = 1) { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['undo'] === 'function') { return (/** @type {?} */ (this.dataParent)).undo(steps); } } if (steps === null || typeof steps !== 'number') { steps = 1; } if (steps <= 0) { steps = 1; } // We use "steps > this.historyCursor" instead of "this.historyCursor + 1" // since we want to limit the first history should not be able to be undone. if (steps > this.historyCursor) { steps = this.historyCursor; } if (steps <= 0) { // If no more history can be undone, return Promise<null>. return Promise.resolve(null); } let /** @type {?} */ revertTo = this.histories[this.historyCursor - steps]; let /** @type {?} */ clonedState = JSON.parse(JSON.stringify(revertTo.state)); this.historyCursor = this.historyCursor - steps; return revertTo.component.loadHistoryState(revertTo, clonedState).then(() => { return revertTo; }); } /** * @param {?=} steps * @return {?} */ redo(steps = 1) { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['redo'] === 'function') { return (/** @type {?} */ (this.dataParent)).redo(steps); } } if (steps === null || typeof steps !== 'number') { steps = 1; } if (steps <= 0) { steps = 1; } if (steps > this.histories.length - this.historyCursor - 1) { steps = this.histories.length - this.historyCursor - 1; } if (steps <= 0) { // If no more history can be redone, return Promise<null>. return Promise.resolve(null); } let /** @type {?} */ revertTo = this.histories[this.historyCursor + steps]; let /** @type {?} */ clonedState = JSON.parse(JSON.stringify(revertTo.state)); this.historyCursor = this.historyCursor + steps; return revertTo.component.loadHistoryState(revertTo, clonedState).then(() => { return revertTo; }); } /** * @return {?} */ canUndo() { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['canUndo'] === 'function') { return (/** @type {?} */ (this.dataParent)).canUndo(); } } // We use "this.historyCursor > 0" instead of "this.historyCursor > -1" here // since we want to limit the first history should not be able to be undone. return this.historyCursor > 0 && this.histories.length > 0; } /** * @return {?} */ canRedo() { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['canRedo'] === 'function') { return (/** @type {?} */ (this.dataParent)).canRedo(); } } return this.historyCursor < this.histories.length - 1; } /** * @return {?} */ clearForwardHistories() { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['clearForwardHistories'] === 'function') { return (/** @type {?} */ (this.dataParent)).clearForwardHistories(); } } let /** @type {?} */ re = this.histories.slice(this.historyCursor + 1, this.histories.length); this.histories.splice(this.historyCursor + 1, this.histories.length - this.historyCursor - 1); return re; } /** * @return {?} */ clearBackwardHistories() { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['clearBackwardHistories'] === 'function') { return (/** @type {?} */ (this.dataParent)).clearBackwardHistories(); } } let /** @type {?} */ re = this.histories.slice(0, this.historyCursor + 1); this.histories.splice(0, this.historyCursor + 1); if (this.histories.length > 0) { this.historyCursor = 0; } else { this.historyCursor = -1; } return re; } /** * @return {?} */ clearHistories() { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['clearHistories'] === 'function') { return (/** @type {?} */ (this.dataParent)).clearHistories(); } } let /** @type {?} */ re = this.histories; this.histories = []; this.historyCursor = -1; return re; } /** * @return {?} */ getHistories() { if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent['getHistories'] === 'function') { return (/** @type {?} */ (this.dataParent)).getHistories(); } } return [].concat(this.histories); } /** * @return {?} */ isDisabled() { return this.disabled; } /** * @param {?} disabled * @return {?} */ setDisabled(disabled) { // Auto propagate to children. this.disabled = disabled; } /** * @return {?} */ isSelfDisabled() { return this._disabled; } /** * @return {?} */ isLoadingEnabled() { return this.loadingEnabled; } /** * @param {?} success * @param {?} resultOrError * @return {?} */ loaded(success, resultOrError) { if (this._loaded) { // Prevent calling this method twice. return; } this._loaded = true; // Let sub class implement its own behavior. try { this.doLoaded(success, resultOrError); } catch (/** @type {?} */ e) { console.error(e); } this.loadSuccess = success; // Auto remove css class // Should declare css class as static const if (this.elementRef !== undefined && this.elementRef !== null) { $(this.elementRef.nativeElement).removeClass("loading"); } // emit event let /** @type {?} */ data = { success: success, resultOrError: resultOrError }; let /** @type {?} */ ev = EventUtils.newCustomEvent(LOAD_EVENT, this, data, null); if (this.loadEvent !== null && this.loadEvent !== undefined) { this.loadEvent.emit(ev); } } /** * @return {?} */ isLoading() { return this._loading; } /** * @return {?} */ isLoaded() { return this._loaded; } /** * @return {?} */ isLoadSuccess() { return this.loadSuccess; } /** * @return {?} */ getElementRef() { return this.elementRef; } /** * @return {?} */ selfValidateData() { // The default implementation will return empty array. // Sub class should override this method if necessary. return []; } /** * @return {?} */ validateData() { let /** @type {?} */ results = this.selfValidateData(); if (results === null || typeof results === 'undefined' || !Array.isArray(results)) { results = []; } // Chain this method to children & descendants. if (this.dataChildren !== null && typeof this.dataChildren !== 'undefined') { for (let /** @type {?} */ c of this.dataChildren) { let /** @type {?} */ child = c; if (typeof child.validateData === 'function') { // Force set autoFocusOnError = false to children since we'll only do auto // focus once when all results are obtained. let /** @type {?} */ childResults = child.validateData(false); if (childResults !== null && Array.isArray(childResults)) { // Add all child's results into results. results = results.concat(childResults); } } } } return results; } /** * @return {?} */ addPreloadDom() { if (!this.preloadList) { return; } this.preloadList.forEach((item, index, array) => { item.show(); }); } /** * @return {?} */ removePreloadDom() { if (!this.preloadList) { return; } this.preloadList.forEach((item, index, array) => { item.hide(); }); } /** * @return {?} */ preload() { if (this._loading) { // Prevent calling method twice return; } // Set flag loading as "true" this._loading = true; // Unset the flag this._loaded = false; if (this.elementRef !== undefined && this.elementRef !== null) { $(this.elementRef.nativeElement).addClass("loading"); } this.addPreloadDom(); let /** @type {?} */ result = null; try { result = this.doPreload(); } catch (/** @type {?} */ e) { result = Promise.reject(e); } if (result === null || result === undefined || !(result instanceof Promise)) { result = Promise.resolve(result); } return result.then((result) => { this.loaded(true, result); this.removePreloadDom(); // Unset flag loading as "false" this._loading = false; return Promise.resolve(result); }).catch((error) => { this.loaded(false, error); this.removePreloadDom(); // Unset flag loading as "false" this._loading = false; return Promise.reject(error); }); } } AbstractHasData.DEFAULT_IGNORE_PARENT_DATA = DEFAULT_IGNORE_PARENT_DATA; AbstractHasData.DEFAULT_DELEGATE_HISTORY = DEFAULT_DELEGATE_HISTORY; AbstractHasData.propDecorators = { "preloadList": [{ type: ViewChildren, args: [Preload,] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], AbstractHasData.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], AbstractHasData.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], AbstractHasData.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], AbstractHasData.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], AbstractHasData.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], AbstractHasData.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractHasData.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], AbstractHasData.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option('disabled'), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], AbstractHasData.prototype, "disabled", null); function AbstractHasData_tsickle_Closure_declarations() { /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ AbstractHasData.propDecorators; /** @type {?} */ AbstractHasData.DEFAULT_IGNORE_PARENT_DATA; /** @type {?} */ AbstractHasData.DEFAULT_DELEGATE_HISTORY; /** @type {?} */ AbstractHasData.prototype.dataParent; /** @type {?} */ AbstractHasData.prototype.ignoreParentData; /** @type {?} */ AbstractHasData.prototype.ignoreParentDisabled; /** @type {?} */ AbstractHasData.prototype.onDisabled; /** @type {?} */ AbstractHasData.prototype.onEnabled; /** @type {?} */ AbstractHasData.prototype.loadingEnabled; /** @type {?} */ AbstractHasData.prototype.loadEvent; /** @type {?} */ AbstractHasData.prototype.delegateHistory; /** @type {?} */ AbstractHasData.prototype.preloadList; /** @type {?} */ AbstractHasData.prototype.historyCursor; /** @type {?} */ AbstractHasData.prototype.histories; /** @type {?} */ AbstractHasData.prototype.elementRef; /** @type {?} */ AbstractHasData.prototype.dataChildren; /** @type {?} */ AbstractHasData.prototype.data; /** @type {?} */ AbstractHasData.prototype.kbShortcutService; /** @type {?} */ AbstractHasData.prototype.loadSuccess; /** @type {?} */ AbstractHasData.prototype._loading; /** @type {?} */ AbstractHasData.prototype._loaded; /** @type {?} */ AbstractHasData.prototype._disabled; /** * @abstract * @return {?} */ AbstractHasData.prototype.doPreload = function () { }; /** * @abstract * @param {?} success * @param {?} resultOrError * @return {?} */ AbstractHasData.prototype.doLoaded = function (success, resultOrError) { }; /** * @abstract * @return {?} */ AbstractHasData.prototype.isSelfDataDirty = function () { }; /** * @abstract * @param {?} data * @return {?} */ AbstractHasData.prototype.selfSaveData = function (data) { }; /** * @abstract * @return {?} */ AbstractHasData.prototype.selfResetData = function () { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RIYXNEYXRhLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0SGFzRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBNEMsWUFBWSxFQUFFLFlBQVksRUFBUyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRdkgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELHVCQUFNLDBCQUEwQixHQUFZLEtBQUssQ0FBQztBQUNsRCx1QkFBTSx3QkFBd0IsR0FBWSxJQUFJLENBQUM7Ozs7Ozs7Ozs7O0FBVy9DLE1BQU0sc0JBQWdDLFNBQVEsc0JBQXNCOzs7OztJQStFbEUsWUFBWSxVQUFzQixFQUFFLGlCQUEyQztRQUM3RSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FB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