Daniel@0: "use strict"; Daniel@0: Daniel@0: App.module("RepresentationModule", function(RepresentationModule, App, Backbone, Marionette, $, _, Logger) { Daniel@0: Daniel@0: RepresentationModule.addInitializer(function(options){ Daniel@0: Daniel@0: RepresentationModule.registerMaster({ Daniel@0: id: "entity.collection.default", Daniel@0: inherit: "entity._default", Daniel@0: Daniel@0: defaultConfigParameterValues: { Daniel@0: "library": "", Daniel@0: "year": "", Daniel@0: "genre": "", Daniel@0: "composer": "", Daniel@0: "performer": "", Daniel@0: "title": "", Daniel@0: "place": "", Daniel@0: "collection": "" Daniel@0: }, Daniel@0: Daniel@0: options: { Daniel@0: availableLibraries: ["bl", "charm", "ilm", "mazurka"], Daniel@0: librarySeparator: ";", Daniel@0: librarySeparatorAlternatives: /\,/g, Daniel@0: presenceOfParameters: { Daniel@0: "title": ["bl", "charm", "ilm", "mazurka"], Daniel@0: "year": ["bl", "charm", "mazurka"], // in ILM there is a release date (160 000 / 250 000) Daniel@0: "composer": ["bl", "charm", "mazurka"], Daniel@0: "performer": ["bl", "charm", "mazurka"], // artist in ILM Daniel@0: "collection": ["bl"], // (only for ethnographic, excludes composer) Daniel@0: "genre": ["ilm"], Daniel@0: "place": ["bl"], Daniel@0: }, Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: // ================================================================= Daniel@0: // housekeeping Daniel@0: Daniel@0: extractCleanedConfigParameterValuesFromPlannedParameterValues: function(config) { Daniel@0: // Parent master's behaviour Daniel@0: var result = RepresentationModule.getMasterById("entity._default").extractCleanedConfigParameterValuesFromPlannedParameterValues.apply(this, arguments); Daniel@0: Daniel@0: // no need to remove recordingURI as there is no default value for it (it is removed automatically) Daniel@0: Daniel@0: //console.log("CLEANED BEFORE", result); Daniel@0: // remove all parameters that are not relevant to the chosen library Daniel@0: var presentParameterNames = _.keys(this._getPresentParameterNamesForLibrary(result.library)); Daniel@0: Daniel@0: for (var parameterName in result) { Daniel@0: if (result.hasOwnProperty(parameterName) && parameterName !== "library") { Daniel@0: if (presentParameterNames.indexOf(parameterName) == -1) { Daniel@0: delete result[parameterName]; Daniel@0: } Daniel@0: } Daniel@0: } Daniel@0: Daniel@0: //console.log("CLEANED AFTER", result); Daniel@0: return result; Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: // ================================================================= Daniel@0: // config grid panel Daniel@0: Daniel@0: _parseLibraryStringToArray: function(library) { Daniel@0: var fixedLibrary = _.str.trim(library).replace(this.options.librarySeparatorAlternatives, this.options.librarySeparator).toLowerCase(); Daniel@0: if (!fixedLibrary.length) { Daniel@0: return []; Daniel@0: } else { Daniel@0: return _.map(fixedLibrary.split(this.options.librarySeparator), function(v) {return _.str.trim(v);}); Daniel@0: } Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: _parseLibraryStringToObject: function(library) { Daniel@0: var result = {}; Daniel@0: var libraryAsArray = this._parseLibraryStringToArray(library); Daniel@0: for (var i = 0; i < libraryAsArray.length; i++) { Daniel@0: result[libraryAsArray[i]] = true; Daniel@0: } Daniel@0: return result; Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: _restoreLibraryStringFromArray: function(libraryArray) { Daniel@0: libraryArray.sort(); Daniel@0: return libraryArray.length ? libraryArray.join(this.options.librarySeparator) : ""; Daniel@0: Daniel@0: }, Daniel@0: Daniel@0: _restoreLibraryStringFromObject: function(libraryObject) { Daniel@0: return this._restoreLibraryStringFromArray(_.keys(libraryObject)); Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: _getPresentParameterNamesForLibrary: function(library) { Daniel@0: if (this._cachedPresentParameterNamesByLibrary === undefined) { Daniel@0: this._cachedPresentParameterNamesByLibrary = {}; Daniel@0: } Daniel@0: if (this._cachedPresentParameterNamesByLibrary[library] === undefined) { Daniel@0: var libraries = this._parseLibraryStringToArray(library); Daniel@0: var result = {}; Daniel@0: if (libraries.length) { Daniel@0: for (var parameterName in this.options.presenceOfParameters) { Daniel@0: var fieldPresence = this.options.presenceOfParameters[parameterName]; Daniel@0: if (_.intersection(libraries, fieldPresence).length == libraries.length) { Daniel@0: result[parameterName] = true; Daniel@0: } Daniel@0: } Daniel@0: } Daniel@0: this._cachedPresentParameterNamesByLibrary[library] = result; Daniel@0: } Daniel@0: Daniel@0: return this._cachedPresentParameterNamesByLibrary[library]; Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: // ----------------------------------------------------------------- Daniel@0: // config grid panel - prepare Daniel@0: Daniel@0: prepareConfigGridPanelMainArea: function(configGridPanelView) { Daniel@0: configGridPanelView._$mainArea.data("$libraryLabel_yes", configGridPanelView._$mainArea.find(".cgpma__id_library-label_yes")); Daniel@0: configGridPanelView._$mainArea.data("$libraryLabel_no", configGridPanelView._$mainArea.find(".cgpma__id_library-label_no")); Daniel@0: Daniel@0: // Library tickboxes Daniel@0: for (var i = this.options.availableLibraries.length - 1; i >= 0; --i) { Daniel@0: var availableLibrary = this.options.availableLibraries[i]; Daniel@0: var $tickbox = configGridPanelView._$mainArea.find(".cgpma__id_" + availableLibrary); Daniel@0: configGridPanelView._$mainArea.data("$tickbox_library_" + availableLibrary, $tickbox); Daniel@0: $tickbox.data("libraryId", availableLibrary); Daniel@0: } Daniel@0: Daniel@0: // Parent master's behaviour Daniel@0: RepresentationModule.getMasterById("entity._default").prepareConfigGridPanelMainArea.apply(this, arguments); Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: __panelInputChangeValueHandler: function(event) { Daniel@0: if (event.type == "tickboxchangevalue") { Daniel@0: var $thickbox = $(event.target); Daniel@0: var libraryId = $thickbox.data("libraryId"); Daniel@0: if (libraryId) { Daniel@0: var configGridPanelView = $thickbox.data("configGridPanelView"); Daniel@0: var $mainArea = configGridPanelView._$mainArea; Daniel@0: var master = $thickbox.data("configGridPanelView")._masterBehindMainArea; Daniel@0: if (!$mainArea.data("ignoreChangesInLibraryTickboxes")) { Daniel@0: var plannedLibraries = []; Daniel@0: for (var i = 0; i < master.options.availableLibraries.length; i++) { Daniel@0: var library = master.options.availableLibraries[i]; Daniel@0: if ($mainArea.data("$tickbox_library_" + library).tickbox("option", "value")) { Daniel@0: plannedLibraries.push(library); Daniel@0: } Daniel@0: }; Daniel@0: master.planConfigParameterUpdateWithRespectToValueAndDefaultValue(configGridPanelView._cachedConfig, "library", plannedLibraries.join(";")); Daniel@0: } Daniel@0: return; Daniel@0: }; Daniel@0: } Daniel@0: Daniel@0: // Parent master's behaviour Daniel@0: RepresentationModule.getMasterById("entity._default").__panelInputChangeValueHandler.apply(this, arguments); Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: // ----------------------------------------------------------------- Daniel@0: // config grid panel - sync Daniel@0: Daniel@0: syncConfigGridPanelMainArea: function(configGridPanelView, instant) { Daniel@0: Daniel@0: // bl, charm, ilm tick boxes + field visibility Daniel@0: var library = this.getConfigParameterValueOrDefaultValue(configGridPanelView._cachedConfig, "library").toLowerCase(); Daniel@0: var plannedLibrary = this.getConfigPlannedParameterValueOrDefaultValue(configGridPanelView._cachedConfig, "library").toLowerCase(); Daniel@0: var libraryHash = library + plannedLibrary; Daniel@0: if (configGridPanelView._$mainArea.data("libraryCache") != libraryHash) { Daniel@0: configGridPanelView._$mainArea.data("libraryCache", libraryHash); Daniel@0: //var libraryAsObject = this._parseLibraryStringToObject(library); Daniel@0: var plannedLibraryAsArray = this._parseLibraryStringToArray(plannedLibrary); Daniel@0: var plannedLibraryAsObject = this._parseLibraryStringToObject(plannedLibrary); Daniel@0: Daniel@0: // tick boxes Daniel@0: configGridPanelView._$mainArea.data("ignoreChangesInLibraryTickboxes", true); Daniel@0: for (var i = this.options.availableLibraries.length - 1; i >= 0; --i) { Daniel@0: var availableLibrary = this.options.availableLibraries[i]; Daniel@0: var $tickbox = configGridPanelView._$mainArea.data("$tickbox_library_" + availableLibrary); Daniel@0: var value = (plannedLibraryAsObject[availableLibrary] !== undefined) ? "1" : ""; Daniel@0: var baseValue = (library !== plannedLibrary) Daniel@0: ? (value ? "" : "1") Daniel@0: : (value ? "1" : ""); Daniel@0: Daniel@0: $tickbox.tickbox("option", { Daniel@0: "value": value, Daniel@0: "baseValue": baseValue Daniel@0: }); Daniel@0: } Daniel@0: configGridPanelView._$mainArea.removeData("ignoreChangesInLibraryTickboxes"); Daniel@0: Daniel@0: // show / hide input blocks Daniel@0: var presentParameterNames = _.keys(this._getPresentParameterNamesForLibrary(plannedLibrary)); Daniel@0: var absentParameterNames = _.difference(_.keys(this.options.presenceOfParameters), presentParameterNames); Daniel@0: Daniel@0: for (var i = 0; i < presentParameterNames.length; i++) { Daniel@0: configGridPanelView._$mainArea.data("$inputBlock_" + presentParameterNames[i]).show(); Daniel@0: } Daniel@0: for (var i = 0; i < absentParameterNames.length; i++) { Daniel@0: configGridPanelView._$mainArea.data("$inputBlock_" + absentParameterNames[i]).hide(); Daniel@0: } Daniel@0: Daniel@0: // library label Daniel@0: configGridPanelView._$mainArea.data("$libraryLabel_no") .toggle(plannedLibraryAsArray.length == 0); Daniel@0: configGridPanelView._$mainArea.data("$libraryLabel_yes").toggle(plannedLibraryAsArray.length != 0); Daniel@0: } Daniel@0: Daniel@0: // Parent master's behaviour Daniel@0: RepresentationModule.getMasterById("entity._default").syncConfigGridPanelMainArea.apply(this, arguments); Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: // ================================================================= Daniel@0: // config grid header Daniel@0: Daniel@0: _generateHeaderLabel1: function(viewHeaderView) { Daniel@0: return this._generateCollectionConfigTitle(viewHeaderView.options.config); Daniel@0: }, Daniel@0: Daniel@0: _generateHeaderLabel2: function(viewHeader) { Daniel@0: var rawConfigParameters = viewHeader.options.config.attributes.parameters.attributes; Daniel@0: var attributesOfDefinitionForCollection = viewHeader.dynamicDerivedConfigData.attributes.dynamicDefinitionForCollection.attributes; Daniel@0: var attributesOfDefinitionForOverlayedRecording = viewHeader.dynamicDerivedConfigData.attributes.dynamicDefinitionForOverlayedRecording.attributes; Daniel@0: Daniel@0: var labelParts = []; Daniel@0: Daniel@0: var collectionSize = attributesOfDefinitionForCollection.fullSize; Daniel@0: var sampleSize = attributesOfDefinitionForCollection.sampleSize; Daniel@0: var overlayedRecordingURI = rawConfigParameters.recordingURI; Daniel@0: var overlayedRecordingLabel = attributesOfDefinitionForOverlayedRecording.label; Daniel@0: Daniel@0: // collection size Daniel@0: if (_.isNumber(collectionSize)) { Daniel@0: var collectionSizeAsStr = collectionSize ? _.str.numberFormat(collectionSize) : "no"; Daniel@0: labelParts.push(_.str.sprintf("%s recording%s", collectionSizeAsStr, collectionSize !== 1 ? "s" : "")); Daniel@0: } else if (collectionSize === null) { Daniel@0: labelParts.push("updating..."); Daniel@0: } else { Daniel@0: if (attributesOfDefinitionForCollection.id === false) { Daniel@0: labelParts.push("an error occured"); Daniel@0: } Daniel@0: } Daniel@0: Daniel@0: // sample size Daniel@0: if (_.isNumber(sampleSize) && sampleSize !== collectionSize) { Daniel@0: labelParts.push(" (", sampleSize, " in the sample)"); Daniel@0: } Daniel@0: Daniel@0: // recordingURI Daniel@0: if (overlayedRecordingURI) { Daniel@0: if (_.isString(overlayedRecordingLabel)) { Daniel@0: labelParts.push(", ‘", overlayedRecordingLabel, "’ selected"); Daniel@0: } else if (overlayedRecordingLabel === null) { Daniel@0: //labelParts.push(", updating selected recording"); Daniel@0: } else { Daniel@0: //labelParts.push(", a problem with selected recording"); Daniel@0: } Daniel@0: } Daniel@0: return labelParts.join(""); Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: // ================================================================= Daniel@0: // dynamic derived config data Daniel@0: Daniel@0: __upateMethodOfDynamicDerivedConfigData: function() { Daniel@0: if (this.attributes.dynamicDefinitionForCollection.attributes.errors) { Daniel@0: this.attributes.dynamicDefinitionForCollection.update(true); Daniel@0: } Daniel@0: if (this.attributes.dynamicDefinitionForOverlayedRecording.attributes.errors) { Daniel@0: this.attributes.dynamicDefinitionForOverlayedRecording.update(true); Daniel@0: } Daniel@0: }, Daniel@0: Daniel@0: generateDynamicDerivedConfigData: function(config, configGrid) { Daniel@0: var dynamicDefinitionForCollection = App.dynamicDefinitionProviderForCollections.get(config); Daniel@0: var dynamicDefinitionForOverlayedRecording = App.dynamicDefinitionProviderForRecordings.get(config); Daniel@0: Daniel@0: var dynamicDerivedConfigData = new RepresentationModule.DynamicDerivedConfigData({ Daniel@0: dynamicDefinitionForCollection: dynamicDefinitionForCollection, Daniel@0: dynamicDefinitionForOverlayedRecording: dynamicDefinitionForOverlayedRecording Daniel@0: }); Daniel@0: Daniel@0: dynamicDerivedConfigData.listenTo(dynamicDefinitionForCollection, "change", function() { Daniel@0: dynamicDerivedConfigData.trigger("change:dynamicDefinitionForCollection"); Daniel@0: dynamicDerivedConfigData.trigger("change"); Daniel@0: }); Daniel@0: dynamicDerivedConfigData.listenTo(dynamicDefinitionForOverlayedRecording, "change", function() { Daniel@0: dynamicDerivedConfigData.trigger("change:dynamicDefinitionForOverlayedRecording"); Daniel@0: dynamicDerivedConfigData.trigger("change"); Daniel@0: }); Daniel@0: Daniel@0: dynamicDerivedConfigData.update = this.__upateMethodOfDynamicDerivedConfigData; Daniel@0: Daniel@0: return dynamicDerivedConfigData; Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: // ================================================================= Daniel@0: // dynamic derived vis instance data Daniel@0: Daniel@0: Daniel@0: // ----------------------------------------------------------------- Daniel@0: // dynamic derived vis instance data - base Daniel@0: Daniel@0: __optionsOfDynamicDerivedVisInstanceDataForBase: { Daniel@0: attributesToExcludeFromHash: ["apiResponse"], Daniel@0: customHashSuffixGenerator: function (attributes) { Daniel@0: if (attributes.apiResponse) { Daniel@0: return JSON.stringify(attributes.apiResponse.errors); Daniel@0: } else { Daniel@0: return typeof attributes.apiResponse; Daniel@0: } Daniel@0: } Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: __upateMethodOfDynamicDerivedVisInstanceDataForBase: function(force) { Daniel@0: var visInstanceView = this.options.visInstanceView; Daniel@0: var dynamicDefinitionForCollection = visInstanceView.dynamicDerivedConfigDataForEntity.attributes.dynamicDefinitionForCollection; Daniel@0: if (!dynamicDefinitionForCollection) { // entity kind has changed (e.g. a grid was reset) Daniel@0: return; Daniel@0: } Daniel@0: var collectionId = dynamicDefinitionForCollection.attributes.id; Daniel@0: var requestParams = _.clone(visInstanceView.dynamicDerivedConfigDataForView.attributes.basePerspectiveRequestParams); Daniel@0: Daniel@0: if (!requestParams || !collectionId) { Daniel@0: this.set({ Daniel@0: apiRequestURI: undefined, Daniel@0: apiRequestParamsHash: undefined, Daniel@0: apiResponse: undefined Daniel@0: }); Daniel@0: return; Daniel@0: } Daniel@0: requestParams.cid = collectionId; Daniel@0: Daniel@0: var apiRequestParamsHash = JSON.stringify(requestParams); Daniel@0: Daniel@0: if (!force && apiRequestParamsHash == this.attributes.apiRequestParamsHash) { Daniel@0: return; Daniel@0: } Daniel@0: Daniel@0: var _this = this; Daniel@0: var apiRequestURI = App.DataModule.CliopatriaAPI.request("getCollectionPerspective", requestParams, function(data){ Daniel@0: if (JSON.stringify(requestParams) != _this.attributes.apiRequestParamsHash) { Daniel@0: return; Daniel@0: } Daniel@0: _this.set({ Daniel@0: apiRequestParamsHash: undefined, Daniel@0: apiResponse: data Daniel@0: }); Daniel@0: }); Daniel@0: Daniel@0: this.set({ Daniel@0: apiRequestURI: apiRequestURI, Daniel@0: apiRequestParamsHash: apiRequestParamsHash, Daniel@0: apiResponse: null Daniel@0: }); Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: generateDynamicDerivedVisInstanceDataForBase: function(visInstanceView) { Daniel@0: var optionsForThisDynamicDerivedVisInstanceDataForBase = _.clone(this.__optionsOfDynamicDerivedVisInstanceDataForBase); Daniel@0: optionsForThisDynamicDerivedVisInstanceDataForBase.visInstanceView = visInstanceView; Daniel@0: Daniel@0: var dynamicDerivedVisInstanceDataForBase = new RepresentationModule.DynamicDerivedVisInstanceData({ Daniel@0: apiRequestURI: undefined, Daniel@0: apiRequestParamsHash: undefined, Daniel@0: apiResponse: undefined Daniel@0: }, optionsForThisDynamicDerivedVisInstanceDataForBase); Daniel@0: Daniel@0: dynamicDerivedVisInstanceDataForBase.update = this.__upateMethodOfDynamicDerivedVisInstanceDataForBase; Daniel@0: Daniel@0: dynamicDerivedVisInstanceDataForBase.listenTo(visInstanceView.dynamicDerivedConfigDataForEntity, "change:dynamicDefinitionForCollection", dynamicDerivedVisInstanceDataForBase.update); Daniel@0: dynamicDerivedVisInstanceDataForBase.listenTo(visInstanceView.dynamicDerivedConfigDataForView, "change:basePerspectiveRequestParams", dynamicDerivedVisInstanceDataForBase.update); Daniel@0: Daniel@0: dynamicDerivedVisInstanceDataForBase.update(); Daniel@0: Daniel@0: return dynamicDerivedVisInstanceDataForBase; Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: verifyAllDataForVisInstanceBase: function(visInstanceView) { Daniel@0: this._verifyThatViewIsNotEmptyOrUnknown(visInstanceView); Daniel@0: Daniel@0: // if (visInstanceView.options.entityConfig.getParameterValue("library") == "charm" Daniel@0: // && visInstanceView.options.viewConfig.getParameterValue("kind") == "key-relative-chord-seq") { Daniel@0: // throw new RepresentationModule.Error({type: "api-message_progress_base", derivedDataToUpdate: "base"}); Daniel@0: // } Daniel@0: Daniel@0: Daniel@0: var attributesOfDerivedConfigDataForEntity = visInstanceView.dynamicDerivedConfigDataForEntity.attributes; Daniel@0: var dynamicDefinitionForCollection = attributesOfDerivedConfigDataForEntity.dynamicDefinitionForCollection; Daniel@0: var attributesOfCollection = dynamicDefinitionForCollection ? dynamicDefinitionForCollection.attributes : {}; Daniel@0: Daniel@0: if (attributesOfCollection.id === null) { Daniel@0: throw new RepresentationModule.Error({type: "data-preparing_entity-derived"}); Daniel@0: } Daniel@0: if (attributesOfCollection.id === false) { Daniel@0: throw new RepresentationModule.Error({type: "api-error_entity-derived", apiErrors: attributesOfCollection.errors, coverTapAction: this.__coverTapActionThatUpdatesDynamicDerivedData, derivedDataToUpdate: "entity"}); Daniel@0: } Daniel@0: if (attributesOfCollection.id === "") { Daniel@0: throw new RepresentationModule.Error({type: "collection_no-recordings"}); Daniel@0: } Daniel@0: if (attributesOfCollection.id === undefined) { Daniel@0: throw new RepresentationModule.Error({type: "collection_undefined"}); Daniel@0: } Daniel@0: Daniel@0: var attribytesOfDerivedVisInstanceDataForBase = visInstanceView.dynamicDerivedVisInstanceDataForBase.attributes; Daniel@0: if (!attribytesOfDerivedVisInstanceDataForBase.apiResponse) { Daniel@0: throw new RepresentationModule.Error({type: "data-preparing_base"}); Daniel@0: } Daniel@0: if (attribytesOfDerivedVisInstanceDataForBase.apiResponse.errors) { Daniel@0: if (attribytesOfDerivedVisInstanceDataForBase.apiResponse.errors && attribytesOfDerivedVisInstanceDataForBase.apiResponse.errors[0]) { Daniel@0: var error0 = attribytesOfDerivedVisInstanceDataForBase.apiResponse.errors[0]; Daniel@0: if (error0.code == 11 || error0.code == 12 || error0.code == 13) { Daniel@0: Daniel@0: //FIXME this is a temp hack Daniel@0: var checkEvery = 2000; Daniel@0: var checkEveryRandomComponent = 500; Daniel@0: if (visInstanceView.autoRefreshTimeout) { Daniel@0: clearTimeout(visInstanceView.autoRefreshTimeout); Daniel@0: } Daniel@0: visInstanceView.autoRefreshTimeout = setTimeout(function() { Daniel@0: if (visInstanceView.dynamicDerivedVisInstanceDataForBase.attributes.apiResponse.errors) { Daniel@0: var error0 = attribytesOfDerivedVisInstanceDataForBase.apiResponse.errors[0]; Daniel@0: if (error0.code == 11 || error0.code == 12 || error0.code == 13) { Daniel@0: visInstanceView.dynamicDerivedVisInstanceDataForBase.update(); Daniel@0: } Daniel@0: } Daniel@0: }, checkEvery + Math.round(Math.random() * checkEveryRandomComponent)); Daniel@0: // END FIXME Daniel@0: Daniel@0: throw new RepresentationModule.Error({type: "api-message_progress_base", apiErrors: attribytesOfDerivedVisInstanceDataForBase.apiResponse.errors, coverTapAction: this.__coverTapActionThatUpdatesDynamicDerivedData, derivedDataToUpdate: "base"}); Daniel@0: Daniel@0: // FIXME errors like this should probably go to Master.view.xxx Daniel@0: } else if (error0.code == 20) { Daniel@0: throw new RepresentationModule.Error({type: "ok-count-0", apiErrors: attribytesOfDerivedVisInstanceDataForBase.apiResponse.errors}); Daniel@0: } Daniel@0: } Daniel@0: throw new RepresentationModule.Error({type: "api-error_base", apiErrors: attribytesOfDerivedVisInstanceDataForBase.apiResponse.errors, coverTapAction: this.__coverTapActionThatUpdatesDynamicDerivedData, derivedDataToUpdate: "base"}); Daniel@0: } Daniel@0: Daniel@0: }, Daniel@0: Daniel@0: Daniel@0: // ----------------------------------------------------------------- Daniel@0: // dynamic derived vis instance data - overlay Daniel@0: Daniel@0: Daniel@0: // ----------------------------------------------------------------- Daniel@0: // dynamic derived vis instance data - temp Daniel@0: Daniel@0: }); Daniel@0: }); Daniel@0: }, Logger);