Mercurial > hg > dml-open-vis
diff src/DML/MainVisBundle/Resources/assets/marionette/modules/RepresentationModule/RepresentationModule.10-Master.js @ 0:493bcb69166c
added public content
author | Daniel Wolff |
---|---|
date | Tue, 09 Feb 2016 20:54:02 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/DML/MainVisBundle/Resources/assets/marionette/modules/RepresentationModule/RepresentationModule.10-Master.js Tue Feb 09 20:54:02 2016 +0100 @@ -0,0 +1,120 @@ +"use strict"; + +App.module("RepresentationModule", function(RepresentationModule, App, Backbone, Marionette, $, _, Logger) { + + /** + * Masters are "extensions" that know how to represent particular views and entities + * They determine: + * - which controls are located in the panels + * - what labels do columns and rows have + * - how high the rows are + * - which data sit behind vis instances + * - how vis instances render themselves + */ + RepresentationModule.addInitializer(function(options){ + + RepresentationModule.MasterPrototypes = {}; + RepresentationModule.masters = {}; + + /** + * Registers a new master + */ + RepresentationModule.registerMaster = function(masterDefinition) { + var MasterPrototype; + var inheritId = masterDefinition.inherit ? masterDefinition.inherit : ""; + var id = masterDefinition.id; + if (!id) { + throw _.str.sprintf("Master definition does not contain an id"); + } + var masterWithThisId = null; + try { + masterWithThisId = RepresentationModule.getMasterById(id); + } catch (e) { + } + if (masterWithThisId) { + throw _.str.sprintf("Master with id \"%s\" already exists", id); + } + + var prototypeOptions = {}; + var prototypeDefaultConfigParameterValues = {}; + //var prototypeErrorsToVisInstanceCoverParams = {}; + if (!inheritId) { + MasterPrototype = Marionette.Object; + } else { + try { + MasterPrototype = RepresentationModule.getMasterPrototypeById(inheritId); + var parentMaster = RepresentationModule.getMasterById(inheritId); + prototypeOptions = parentMaster.options; + prototypeDefaultConfigParameterValues = parentMaster.defaultConfigParameterValues; + //prototypeErrorsToVisInstanceCoverParams = parentMaster.errorsToVisInstanceCoverParams; + } catch (e) { + throw _.str.sprintf("Master with id \"%s\" could not be inherited from master with id \"%s\" (it does not exist)", id, inheritId); + } + } + + var combinedOptions = masterDefinition.options + ? _.defaults({}, masterDefinition.options, prototypeOptions) + : _.clone(prototypeOptions); + for (var key in masterDefinition.options) { + if (masterDefinition.options.hasOwnProperty(key) && masterDefinition.options[key] === undefined) { + delete combinedOptions[key]; + } + } + masterDefinition.options = combinedOptions; + + var combinedDefaultConfigParameterValues = masterDefinition.defaultConfigParameterValues + ? _.defaults({}, masterDefinition.defaultConfigParameterValues, prototypeDefaultConfigParameterValues) + : _.clone(prototypeDefaultConfigParameterValues); + for (var key in masterDefinition.defaultConfigParameterValues) { + if (masterDefinition.defaultConfigParameterValues.hasOwnProperty(key) && masterDefinition.defaultConfigParameterValues[key] === undefined) { + delete combinedDefaultConfigParameterValues[key]; + } + } + masterDefinition.defaultConfigParameterValues = combinedDefaultConfigParameterValues; + + // masterDefinition.errorsToVisInstanceCoverParams = masterDefinition.errorsToVisInstanceCoverParams + // ? _.defaults(masterDefinition.errorsToVisInstanceCoverParams, prototypeErrorsToVisInstanceCoverParams) + // : prototypeErrorsToVisInstanceCoverParams; + + var Master = MasterPrototype.extend(masterDefinition); + RepresentationModule.MasterPrototypes[id] = Master; + RepresentationModule.masters[id] = new Master(); + }; + + RepresentationModule.getMasterPrototypeById = function(id) { + var MasterPrototype = RepresentationModule.MasterPrototypes[id]; + if (!MasterPrototype) { + throw _.str.sprintf("MasterPrototype with id \"%s\" not found.", id); + } + return MasterPrototype; + }; + + RepresentationModule.getMasterById = function(id) { + var master = RepresentationModule.masters[id]; + if (!master) { + throw _.str.sprintf("Master with id \"%s\" not found.", id); + } + return master; + }; + + RepresentationModule.getMasterForConfig = function(config, lookAtPlanned) { + var dimension = config.getDimension(); + var configGridType = config.getConfigGridType(); + var configKind = lookAtPlanned ? config.getPlannedParameterValue("kind") : config.getParameterValue("kind"); + configKind = _.str.trim(configKind); + if (!configKind) { + configKind = "default"; + } + var id = [dimension, configGridType, configKind].join("."); + var master = RepresentationModule.masters[id]; + if (!master) { + try { + master = RepresentationModule.getMasterById([dimension, "_unknown"].join(".")); + } catch (e) { + throw _.str.sprintf("Master for config \"%s\" not found (master with id \"%s\" does not exist).", JSON.stringify(config.serialize()), id); + } + } + return master; + }; + }); +}, Logger);