Mercurial > hg > dml-open-vis
diff src/DML/MainVisBundle/Resources/assets/marionette/modules/MainRegionModule/MainRegionModule.20-ConfigGridPanelView.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/MainRegionModule/MainRegionModule.20-ConfigGridPanelView.js Tue Feb 09 20:54:02 2016 +0100 @@ -0,0 +1,271 @@ +"use strict"; + +App.module("MainRegionModule", function (MainRegionModule, App, Backbone, Marionette, $, _, Logger) { + + MainRegionModule.ConfigGridPanelView = MainRegionModule.ConfigGridChildView.extend({ + + options: { + dimension: null, // entity | view + configGrid: null, + parentState: null, + parentConfigGridView: null + }, + + _cachedConfigGridType: null, + _cachedConfig: null, + _cachedBorderRadiusFixerSize: null, + + initialize: function(options) { + var _this = this; + _this.options = _.defaults(options || {}, this.options);; + + _this.listenTo(_this.options.configGrid, "change_selection", _this.renderIfParentConfigGridIsVisible); + + // Cached attributes + _this._cachedConfigGridType = this.options.configGrid.getType(); + + // Init border radius fixer (sits under the background and fills white space if the currently selected entity / view is near the corner) + _this._$borderRadiusFixer = $.bem.generateElement("config-grid-panel", "border-radius-fixer"); + _this._$borderRadiusFixerContainer = $.bem.generateElement("config-grid-panel", "border-radius-fixer-container"); + _this._$borderRadiusFixerContainer.append(_this._$borderRadiusFixer); + _this.$el.prepend(_this._$borderRadiusFixerContainer); + _this._cachedBorderRadiusFixerSize = _this._$borderRadiusFixerContainer.width(); + _this.updateRadiusFixer(null, null); + + // Init main area + _this._$mainAreaWrapper = $.bem.generateElement("config-grid-panel", "main-area-wrapper"); + _this._$mainArea = $.bem.generateElement("config-grid-panel", "main-area"); + _this._$mainArea.addClass("cgpma"); // this element is also a block + _this._$mainArea.appendTo(_this._$mainAreaWrapper); + _this._$mainAreaWrapper.appendTo(_this.$el); + + // Init commands + _this._$commands = _this.$(".config-grid-panel__commands"); + _this._$commandClone = _this.$(".config-grid-panel__command_action_clone"); + _this._$commandDelete = _this.$(".config-grid-panel__command_action_delete"); + _this._$commandApply = _this.$(".config-grid-panel__command_action_apply"); + _this._$commandDiscard = _this.$(".config-grid-panel__command_action_discard"); + + // Assign functions to the commands + _this._$commandClone.click(function() { + if (_this._cachedConfig && _this._$commandClone.hasClass("config-grid-panel__command_state_enabled")) { + var clonedConfig = _this._cachedConfig.clone(); + if (_this.options.dimension == "entity") { + _this.options.configGrid.addEntityAndSelectIt(clonedConfig, _this.options.configGrid.getNextEntityNeighbour(_this._cachedConfig)); + } else { + _this.options.configGrid.addViewAndSelectIt(clonedConfig, _this.options.configGrid.getNextViewNeighbour(_this._cachedConfig)); + } + } + }); + _this._$commandDelete.click(function() { + if (_this._cachedConfig && _this._$commandDelete.hasClass("config-grid-panel__command_state_enabled")) { + if (_this.options.dimension == "entity") { + _this.options.configGrid.removeEntityAndSelectNeighbour(_this._cachedConfig); + } else { + _this.options.configGrid.removeViewAndSelectNeighbour(_this._cachedConfig); + } + } + }); + + _this._$commandApply.click(function() { + if (_this._cachedConfig && _this._$commandApply.hasClass("config-grid-panel__command_state_enabled")) { + _this._masterBehindMainArea.cleanConfigPlannedParameterValuesAndApplyThem(_this._cachedConfig); + } + }); + + _this._$commandDiscard.click(function() { + if (_this._cachedConfig && _this._$commandDiscard.hasClass("config-grid-panel__command_state_enabled")) { + _this._cachedConfig.cancelPlannedParameterUpdates(); + } + }); + + _this._$commandClone .attr("title", " "); + _this._$commandDelete .attr("title", " "); + _this._$commandApply .attr("title", " "); + _this._$commandDiscard.attr("title", " "); + App.TooltipModule.convertTitlesToTooltips(_this.$el); + _this._updateTooltips(); + + _this._$commands.disableSelection(); + }, + + render: function (deep, instant) { + var _this = this; + + var selectedConfig = null; + if (_this.options.dimension == "entity") { + selectedConfig = _this.options.configGrid.getSelectedEntityConfig(); + } else { + selectedConfig = _this.options.configGrid.getSelectedViewConfig(); + } + + var configWasReplaced = false; + if (_this._cachedConfig != selectedConfig) { + + if (_this._cachedConfig) { + _this.stopListening(_this._cachedConfig, "change", _this.renderIfParentConfigGridIsVisible); + }; + + _this._cachedConfig = selectedConfig; + + if (_this._cachedConfig) { + _this.listenTo(_this._cachedConfig, "change", _this.renderIfParentConfigGridIsVisible); + }; + + configWasReplaced = true; + _this._updateTooltips(); + } + + var dynamicDerivedConfigData = App.dynamicDerivedConfigDataProvider.get(_this._cachedConfig); + if (_this._cachedDynamicDerivedConfigData != dynamicDerivedConfigData) { + if (_this._cachedDynamicDerivedConfigData) { + this.stopListening(_this._cachedDynamicDerivedConfigData, "change", _this.renderIfParentConfigGridIsVisible); + } + + _this._cachedDynamicDerivedConfigData = dynamicDerivedConfigData; + + if (_this._cachedDynamicDerivedConfigData) { + _this.listenTo(_this._cachedDynamicDerivedConfigData, "change", _this.renderIfParentConfigGridIsVisible); + }; + } + + _this._setupMainArea(deep, instant); + + var hashForData = null; + if (_this._cachedConfig) { + hashForData = _this._cachedConfig.getHash() + + _this._cachedDynamicDerivedConfigData.getHash(); + } + if (configWasReplaced || _this._cachedHashForData !== hashForData) { + _this._cachedHashForData = hashForData; + if (_this._masterBehindMainArea) { + _this._masterBehindMainArea.syncConfigGridPanelMainArea(_this, instant); + } + _this._renderApplyDiscardCommands(deep, instant); + } + + if (configWasReplaced || deep) { + _this._renderCloneDeleteCommands(deep, instant); + } + }, + + updateRadiusFixer: function(selectedConfigGridOffsetStart, selectedConfigGridSize) { + var _this = this; + var coordinate = selectedConfigGridOffsetStart; + var size = selectedConfigGridSize; + + if (_.isNumber(size) && !_.isNaN(size) && size > 0) { + if (coordinate + size <= 0) { + coordinate = null; + } + if (coordinate > _this._cachedBorderRadiusFixerSize) { + coordinate = null; + } else if (coordinate < 0) { + coordinate = 0; + } else if (coordinate + size > _this._cachedBorderRadiusFixerSize) { + size = _this._cachedBorderRadiusFixerSize - coordinate; + } + } else { + coordinate = null; + size = null; + } + if (coordinate !== null) { + if (_this.options.dimension == "entity") { + _this._$borderRadiusFixer.css({"left": coordinate, "width": size}); + } else { + _this._$borderRadiusFixer.css({"top": coordinate, "height": size}); + } + } else { + if (_this.options.dimension == "entity") { + _this._$borderRadiusFixer.css({"left": 0, "width": 0}); + } else { + _this._$borderRadiusFixer.css({"top": 0, "height": 0}); + } + } + }, + + _updateTooltips: function() { + var _this = this; + if (! this._cachedConfig) { + _this._$commandClone .attr("tooltip-title", ""); + _this._$commandDelete .attr("tooltip-title", ""); + _this._$commandApply .attr("tooltip-title", ""); + _this._$commandDiscard.attr("tooltip-title", ""); + } else { + var tooltipTemplate = null; + try { + tooltipTemplate = Marionette.TemplateCache.get("#config-grid-panel__command-titles_" + _this._cachedConfigGridType + "_" + this._cachedConfig.getDimension() + "_" + _.str.trim(this._cachedConfig.getParameterValue("kind"))); + } catch (e) { + tooltipTemplate = Marionette.TemplateCache.get("#config-grid-panel__command-titles_" + _this._cachedConfigGridType + "_" + this._cachedConfig.getDimension()); + } + var tooltips = tooltipTemplate().split("|"); + _this._$commandClone .attr("tooltip-title", tooltips[0]); + _this._$commandDelete .attr("tooltip-title", tooltips[1]); + _this._$commandApply .attr("tooltip-title", tooltips[2]); + _this._$commandDiscard.attr("tooltip-title", tooltips[3]); + } + }, + + _renderCloneDeleteCommands: function(deep, instant) { + var _this = this; + //var cloneEnabled = !!(_this._cachedConfig && !(_this.options.dimension == "entity" && _this._cachedConfigGridType == "recording")); + var cloneEnabled = !! _this._cachedConfig; + var deleteEnabled = !! _this._cachedConfig; + _this._$commandClone .toggleClass("config-grid-panel__command_state_enabled", cloneEnabled); + _this._$commandDelete.toggleClass("config-grid-panel__command_state_enabled", deleteEnabled); + }, + + _renderApplyDiscardCommands: function(deep, instant) { + var _this = this; + var enabled = !!(_this._cachedConfig && _this._cachedConfig.hasPlannedParameterUpdates()); + _this._$commandApply .toggleClass("config-grid-panel__command_state_enabled", enabled); + _this._$commandDiscard.toggleClass("config-grid-panel__command_state_enabled", enabled); + }, + + + + _setupMainArea: function(deep, instant) { + var _this = this; + + var master = null; + if (_this._cachedConfig) { + master = App.RepresentationModule.getMasterForConfig(_this._cachedConfig, true); + } + + var configHasChanged = _this._configBehindMainArea !== _this._cachedConfig; + var masterHasChanged = _this._masterBehindMainArea !== master; + + if (configHasChanged || masterHasChanged) { + if (_this._masterBehindMainArea) { + _this._masterBehindMainArea.destroyConfigGridPanelMainArea(this); + } + + if (!_this._cachedConfig) { + _this._configBehindMainArea = null; + _this._masterBehindMainArea = null; + _this._$mainArea.html(Backbone.Marionette.TemplateCache.get("#cgpma_" + _this._cachedConfigGridType + "_" + this.options.dimension + "__empty")); + } else { + + _this._configBehindMainArea = _this._cachedConfig; + _this._masterBehindMainArea = master; + + _this._$mainArea.empty(); + _this._$mainArea.removeData(); + + try { + _this._$mainArea.html(Backbone.Marionette.TemplateCache.get("#cgpma_" + _this._cachedConfigGridType + "_" + this.options.dimension + "_" + master.id.split(".")[2])); + } catch (e) { + _this._$mainArea.html(Backbone.Marionette.TemplateCache.get("#cgpma_" + _this._cachedConfigGridType + "_" + this.options.dimension + "__unknown")); + } + _this._masterBehindMainArea.prepareConfigGridPanelMainArea(_this); + } + + var masterKind = undefined; + if (_this._masterBehindMainArea) { + masterKind = _this._masterBehindMainArea.id.split(".")[2]; + } + this.$el.setMod("config-grid-panel", "master-kind", masterKind ? masterKind : false); + } + }, + }); +}, Logger); \ No newline at end of file