Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. define(['app'], function (app) {
  2. app.register.directive('portalSectors', ['$translate', function($translate, $timeout) {
  3. return {
  4. restrict: 'A',
  5. replace: true,
  6. template: '<div id="criterion0" class="search-criteria main-container"><div class="wrapper-sectors cf"><ul class="column first level-1"></ul></div></div>',
  7. scope: {
  8. data: '=sectors',
  9. selectedValueInit: '=',
  10. popularSectors: '='
  11. },
  12.  
  13. controller: function($scope, $timeout, $rootScope){
  14. var $noResultStr = '';
  15. var checkedSectorsInput;
  16.  
  17. $translate("global.no-matching-sector").then(function (val) {
  18. $noResultStr = '<span class="no-result">' + val + '</span>';
  19. });
  20.  
  21.  
  22.  
  23. var init = function(value){
  24. var selectedVal = [];
  25. var selectedValJustIds = [];
  26.  
  27. var updateSelectedSectors = function(){
  28. $timeout(function(){
  29. $scope.selectedSectors = checkedSectorsInput.selectedIds.slice(0);
  30. $rootScope.$broadcast('trigger/event', 'change');
  31. });
  32. };
  33.  
  34. if($scope.selectedValueInit){
  35. selectedVal = $scope.selectedValueInit.split(',');
  36.  
  37. selectedValJustIds = $scope.selectedValueInit.split(",").map(function(v){
  38. return parseInt(v.split("_")[1]);
  39. });
  40. }
  41.  
  42. gdm.mediadatabase.searchCriteria.init(value.criteria, $('.search-criteria ul'), selectedVal, {
  43. modelClass : 'Criterion',
  44. searchSectorNoResultCallback : function(){
  45. var $searchContainer = jQuery('.search-container');
  46. var $noResult = $searchContainer.find('.no-result');
  47.  
  48. if($noResult.length == 0){
  49. $searchContainer.append($noResultStr);
  50. $noResult = $searchContainer.find('.no-result');
  51. }
  52.  
  53. $noResult.show();
  54.  
  55. $timeout(function(){
  56. $noResult.hide();
  57. }, 3000);
  58. }
  59. });
  60.  
  61. checkedSectorsInput = new gdm.mediadatabase.advancedSearch.view.CheckedSectorsInput(jQuery('#sector'), selectedValJustIds);
  62. checkedSectorsInput.render();
  63.  
  64. gdm.mediadatabase.searchCriteria.bindObserversOfCheckableCriteria([checkedSectorsInput]);
  65. gdm.mediadatabase.searchCriteria.bindObserversOfSelectableCriteria([{
  66. onSelected: function(selectedId) {
  67. var $selectedColumn = $('#' + selectedId + ' .column'),
  68. $panelSectors = $('.search-criteria.main-container'),
  69. panelSectorsHeight = $panelSectors.height();
  70.  
  71. $selectedColumn.css('height', 'auto');
  72.  
  73. var selectedColumnHeight = $selectedColumn.height();
  74. if(selectedColumnHeight > panelSectorsHeight) {
  75. $panelSectors.height(selectedColumnHeight+2);
  76. }
  77.  
  78. $selectedColumn.css('height', '100%');
  79.  
  80. updateSelectedSectors();
  81. }
  82. }, {
  83. onUnchecked: updateSelectedSectors
  84. }]);
  85.  
  86. updateSelectedSectors();
  87. };
  88.  
  89. $scope.$watch('data', function(value){
  90. if (!value) return;
  91. init(value);
  92. });
  93.  
  94. $scope.$watch('selectedSectors', function(value){
  95. if(!value) return;
  96.  
  97. var cachedCriteriaById = gdm.mediadatabase.advancedSearch.model.cachedCriteriaById;
  98.  
  99. _.each($scope.popularSectors, function(item){
  100.  
  101. if(item.sectorIds.length == 0) return;
  102.  
  103. var checked = 0;
  104. var hasHalfChecked = false
  105.  
  106. _.each(item.sectorIds, function(id){
  107. if(cachedCriteriaById['journalistSectors_' + id]
  108. && cachedCriteriaById['journalistSectors_' + id].checked == true){
  109.  
  110. if(cachedCriteriaById['journalistSectors_' + id].isHalfChecked()) {
  111. hasHalfChecked = true;
  112. }
  113.  
  114. checked++;
  115. }
  116. });
  117.  
  118. item.selected = checked == item.sectorIds.length;
  119. item.halfChecked = !item.selected && checked < item.sectorIds.length && checked !== 0 || hasHalfChecked;
  120. });
  121. });
  122.  
  123.  
  124. }
  125. }
  126. }]);
  127. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement