Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- define(['app'], function (app) {
- app.register.directive('portalSectors', ['$translate', function($translate, $timeout) {
- return {
- restrict: 'A',
- replace: true,
- template: '<div id="criterion0" class="search-criteria main-container"><div class="wrapper-sectors cf"><ul class="column first level-1"></ul></div></div>',
- scope: {
- data: '=sectors',
- selectedValueInit: '=',
- popularSectors: '='
- },
- controller: function($scope, $timeout, $rootScope){
- var $noResultStr = '';
- var checkedSectorsInput;
- $translate("global.no-matching-sector").then(function (val) {
- $noResultStr = '<span class="no-result">' + val + '</span>';
- });
- var init = function(value){
- var selectedVal = [];
- var selectedValJustIds = [];
- var updateSelectedSectors = function(){
- $timeout(function(){
- $scope.selectedSectors = checkedSectorsInput.selectedIds.slice(0);
- $rootScope.$broadcast('trigger/event', 'change');
- });
- };
- if($scope.selectedValueInit){
- selectedVal = $scope.selectedValueInit.split(',');
- selectedValJustIds = $scope.selectedValueInit.split(",").map(function(v){
- return parseInt(v.split("_")[1]);
- });
- }
- gdm.mediadatabase.searchCriteria.init(value.criteria, $('.search-criteria ul'), selectedVal, {
- modelClass : 'Criterion',
- searchSectorNoResultCallback : function(){
- var $searchContainer = jQuery('.search-container');
- var $noResult = $searchContainer.find('.no-result');
- if($noResult.length == 0){
- $searchContainer.append($noResultStr);
- $noResult = $searchContainer.find('.no-result');
- }
- $noResult.show();
- $timeout(function(){
- $noResult.hide();
- }, 3000);
- }
- });
- checkedSectorsInput = new gdm.mediadatabase.advancedSearch.view.CheckedSectorsInput(jQuery('#sector'), selectedValJustIds);
- checkedSectorsInput.render();
- gdm.mediadatabase.searchCriteria.bindObserversOfCheckableCriteria([checkedSectorsInput]);
- gdm.mediadatabase.searchCriteria.bindObserversOfSelectableCriteria([{
- onSelected: function(selectedId) {
- var $selectedColumn = $('#' + selectedId + ' .column'),
- $panelSectors = $('.search-criteria.main-container'),
- panelSectorsHeight = $panelSectors.height();
- $selectedColumn.css('height', 'auto');
- var selectedColumnHeight = $selectedColumn.height();
- if(selectedColumnHeight > panelSectorsHeight) {
- $panelSectors.height(selectedColumnHeight+2);
- }
- $selectedColumn.css('height', '100%');
- updateSelectedSectors();
- }
- }, {
- onUnchecked: updateSelectedSectors
- }]);
- updateSelectedSectors();
- };
- $scope.$watch('data', function(value){
- if (!value) return;
- init(value);
- });
- $scope.$watch('selectedSectors', function(value){
- if(!value) return;
- var cachedCriteriaById = gdm.mediadatabase.advancedSearch.model.cachedCriteriaById;
- _.each($scope.popularSectors, function(item){
- if(item.sectorIds.length == 0) return;
- var checked = 0;
- var hasHalfChecked = false
- _.each(item.sectorIds, function(id){
- if(cachedCriteriaById['journalistSectors_' + id]
- && cachedCriteriaById['journalistSectors_' + id].checked == true){
- if(cachedCriteriaById['journalistSectors_' + id].isHalfChecked()) {
- hasHalfChecked = true;
- }
- checked++;
- }
- });
- item.selected = checked == item.sectorIds.length;
- item.halfChecked = !item.selected && checked < item.sectorIds.length && checked !== 0 || hasHalfChecked;
- });
- });
- }
- }
- }]);
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement