var nameMap = { sizeList: 'size', resourceList: 'resource', consumptionList: 'consumption', dedicatedManagementPort: 'managementPort', ipv4List: 'ipv4', ipv6List: 'ipv6', connectivityList: 'connectivity', ipKvmList: 'ipKvm', }; (function(){ if( serverDef !== undefined && serverDef.consumptionList === undefined && serverDef.consumptionInfo !== undefined ){ var info = serverDef.consumptionInfo; serverDef.consumptionList = []; for(var i = info.min; i <= info.max; i+=info.step){ serverDef.consumptionList.push({ label: 'do '+i+' W', value: i, price: (i - info.included)*info.price, }); } } })(); var predefinedSelection = (function(predefinedSelection){ var predefinedSelection = predefinedSelection || {}; for(var defLabel in nameMap){ var componentLabel = nameMap[defLabel]; if( predefinedSelection[componentLabel] === undefined && serverDef[defLabel] !== undefined && serverDef[defLabel][0] !== undefined && serverDef[defLabel][0].label !== undefined ){ predefinedSelection[componentLabel] = serverDef[defLabel][0].label; } } return predefinedSelection; })(predefinedSelection); var predefinedSliderSelection = ShConfig.Slider.buildPredefinedSelection( predefinedSelection.consumption, serverDef.consumptionList ); var consumptionWatcher = ShConfig.Slider.watcher(); $(function() { ShConfig.Slider.uiInit( $, serverDef.consumptionInfo.min, serverDef.consumptionInfo.max, serverDef.consumptionInfo.step, consumptionWatcher, predefinedSliderSelection.value ); }); var ShHousingOffer = {}; ShHousingOffer.SliderController = (function(predefinedSelection){ var SliderController = function($scope, $http, $rootScope) { $scope.values = {value: 0, price: 0}; $scope.value = {} $scope.value.scope = $scope; $scope.value.loadedValue = predefinedSelection.backup; }; return SliderController; }(predefinedSelection)); ShHousingOffer.ConsumptionController = ShConfig.Slider.ModelController( serverDef.consumptionList, serverDef.consumptionInfo.max, predefinedSliderSelection ); ShHousingOffer.Config = function($scope, $rootScope){ $scope.componentDef = serverDef; $scope.selected = new ShConfig.Selected(); if(tariffResourceCode !== undefined){ $scope.selected.tariffResourceCode = tariffResourceCode; } for(var name in predefinedSelection){ $scope.selected[name] = predefinedSelection[name]; } $scope.selected.update(); $scope.prices = {}; $scope.$emit('SH_CONFIG_EMERGED', $scope.selected.json); $scope.buildPrices = function(serverDef, selected){ var prices = {}; for(var defLabel in nameMap){ var componentDef = serverDef[defLabel]; var selectedName = nameMap[defLabel]; for(var i in componentDef){ if(componentDef[i].label == selected[selectedName]){ prices[selectedName] = componentDef[i].price; } } } return prices; }; $scope.$on('JSON_UPDATE', function(event, shConfig){ $scope.selected.json = shConfig; $scope.$apply(); }); $scope.$watch( function(){return $scope.selected.getForWatch();}, function(oldValue, newValue){ if(JSON.stringify(oldValue) != JSON.stringify(newValue)){ $scope.selected.update(); $scope.$emit('SH_CONFIG_EMERGED', $scope.selected.json); } $scope.prices = $scope.buildPrices($scope.componentDef, $scope.selected); }, true ); var unbind = consumptionWatcher.watch({ value: 0, slide: function(newVal){ for(var i in serverDef.consumptionList){ if(serverDef.consumptionList[i].value == newVal){ this.value = serverDef.consumptionList[i].label; } } }, stop: function(){ $scope.selected.consumption = this.value; $scope.$apply(); }, }); $scope.$on('$destroy', unbind); };