1(function(angie){var declOfNum=function(number,titles){var cases=[2,0,1,1,1,2];return titles[(number%100>4&&number%100<20)?2:cases[(number%10<5)?number%10:5]];};angie.directive('gSelect',function($timeout){return{require:'^ngModel',link:function(scope,element,attrs,ctrl){function init(){element.sjSelect({value_class:attrs.valueClass||'g_select_value',state_class:attrs.stateClass||'g_select_state',options_class:attrs.optionsClass||'g_select_options',option_class:attrs.optionClass||'g_select_option',onSelectOption:function($option){if(scope.$$phase==undefined){scope.$apply(function(){var value=$option.data().value;ctrl.$setViewValue(value);scope.$emit('valueChanged:'+attrs.name,value);scope.$emit('valueChanged',element);});} 2if(!attrs.focusGroup){element.trigger('blur');}},theme:attrs.theme});var watch=function(){element.sjSelect('value',ctrl.$modelValue);};scope.$watch(attrs.ngModel,watch);} 3if(attrs.lazyLoad){$timeout(function(){init();});}else{init();}}};});angie.directive('sjSelect',function(){return{require:'^ngModel',link:function(scope,element,attrs,ctrl){element.sjSelect({value_class:'sj_select_value',state_class:'sj_select_state_value',options_class:'sj_select_dropdown_wr',option_class:'sj_select_option',placeholder:attrs.placeholder,onSelectOption:function($option){if(scope.$$phase==undefined){scope.$apply(function(){var value=$option.data().value;ctrl.$setViewValue(value);scope.$emit('valueChanged:'+attrs.name,value);scope.$emit('valueChanged',element);if($(':input',element).length){$(':input',element).val(value);}});} 4if(!attrs.focusGroup){element.trigger('blur');}},theme:attrs.theme});var watch=function(){element.sjSelect('value',ctrl.$modelValue);};scope.$watch(attrs.ngModel,watch);}};});angie.directive('gButton',function(){return{require:'ngModel',link:function(scope,element,attrs,ctrl){element.sjButtonGroup({type:attrs.gButton,theme:attrs.theme,required:attrs.gButton=='radio'&&attrs.gButtonRequired!=undefined,onValueChange:function(newValue){if(scope.$$phase==undefined){scope.$apply(function(){scope.$emit('valueChanged:'+attrs.name,newValue);scope.$emit('valueChanged',element);ctrl.$setViewValue(newValue);});}}});var watch=function(newValue,oldValue){if(newValue==oldValue){return false;} 5element.sjButtonGroup('setValue',ctrl.$modelValue);};scope.$watch(attrs.ngModel,watch);element.sjButtonGroup('setValue',scope.$eval(attrs.ngModel));}};});angie.directive('sjButtonGroup',function(){return{require:'ngModel',link:function(scope,element,attrs,ctrl){element.sjButtonGroup({item_class:attrs.sjItemClass||'sj_btn_group_item',type:attrs.sjButtonGroup,theme:attrs.theme,required:attrs.sjButtonGroup=='radio'&&attrs.sjButtonGroupRequired!=undefined,input_name:attrs.inputName,onValueChange:function(newValue){if(scope.$$phase==undefined){scope.$apply(function(){scope.$emit('valueChanged:'+attrs.name,newValue);scope.$emit('valueChanged',element);ctrl.$setViewValue(newValue);});}}});var watch=function(newValue,oldValue){if(newValue==oldValue){return false;} 6element.sjButtonGroup('setValue',ctrl.$modelValue);};scope.$watch(attrs.ngModel,watch);element.sjButtonGroup('setValue',scope.$eval(attrs.ngModel));}};});angie.directive('sjBtnGroup',function(){return{scope:true,priority:0,require:['sjBtnGroup','ngModel'],transclude:true,controller:function(){var self=this;this._callbacks=[];this.onValueChange=function(callback){self._callbacks.push(callback);};},link:function(scope,element,attrs,ctrls,transclude){var ngModelCtrl=ctrls[1],sjBtnGroupCtrl=ctrls[0];transclude(scope,function(clone,scope){element.append(clone);});sjBtnGroupCtrl.setValue=function(value,force){sjBtnGroupCtrl.value=value;!force&&scope.$emit('valueChanged:'+attrs.name,value);!force&&scope.$emit('valueChanged',element);!force&&ngModelCtrl.$setViewValue(value);_.each(sjBtnGroupCtrl._callbacks,function(cb){cb.call(null,value);});};scope.$watch(attrs.ngModel,function(val){sjBtnGroupCtrl.setValue(val,true);});}};});angie.directive('sjBtnGroupItem',function(){return{require:'^sjBtnGroup',link:function(scope,element,attrs,sjBtnGroupCtrl){element.html(attrs.sjBtnGroupItem);sjBtnGroupCtrl.onValueChange(function(value){element.toggleClass('m_active',(value==attrs.value));});element.on('click',function(){scope.$apply(function(){sjBtnGroupCtrl.setValue(element.hasClass('m_active')?null:attrs.value);});});}};});angie.directive('gRoundCheckbox',function(){return{require:'ngModel',link:function(scope,element,attrs,ctrl){element.sjCheckbox({elementName:attrs.name,onValueChange:function(newValue){scope.$apply(function(){ctrl.$setViewValue(newValue);});}});var watch=function(newValue,oldValue){if(newValue==oldValue){return false;} 7element.sjCheckbox('setValue',ctrl.$modelValue);};scope.$watch(attrs.ngModel,watch);element.sjCheckbox('setValue',scope.$eval(attrs.ngModel));}};});angie.constant('sjElementsConf',{state:{checked:'m_checked',disabled:'m_disabled'},event:'click'});angie.controller('sjElementsCtrl',['$scope','sjElementsConf',function($scope,sjElementsConf){this.checked=sjElementsConf.state.checked;this.disabled=sjElementsConf.state.disabled;this.event=sjElementsConf.event;}]);angie.directive('sjStyledCheckbox',['$log',function($log){return{restrict:'A',link:function($scope,$element,$attrs){var $input=$element.find('input');$input.css({position:'absolute',width:0,height:0,visibility:'hidden'});$element.addClass('sj_checkbox m_blue');function doCheck(){if($input.is(':checked')){$element.addClass('m_checked');}else{$element.removeClass('m_checked');}} 8doCheck();$input.on('change',function(){doCheck();});}};}]);angie.directive('sjCheckbox',function(){return{restrict:'EA',require:['sjCheckbox','ngModel'],controller:'sjElementsCtrl',template:''+'<span tabindex="0" class="sj_checkbox">'+' <input type="checkbox" value="" style="display:none" />'+'</span>',replace:true,link:function(scope,element,attrs,ctrls){var sjElementsCtrl=ctrls[0];var ngModel=ctrls[1];var $input=element.find('input');var disabled=false;var label=element.parent('label').eq(0)||(attrs.id&&document.querySelector('label[for="'+attrs.id+'"]'));var trueValue=(typeof attrs.ngTrueValue!=='undefined')?attrs.ngTrueValue:'1';var falseValue=(typeof attrs.ngFalseValue!=='undefined')?attrs.ngFalseValue:'';$input.attr(_.pick(attrs,'name','id'));ngModel.$render=function render(){element.toggleClass(sjElementsCtrl.checked,ngModel.$modelValue==trueValue);$input.val(ngModel.$modelValue==trueValue?trueValue:falseValue);if(ngModel.$modelValue==trueValue){$input.attr('checked','true');}else{$input.removeAttr('checked');}};function setValue(e){e.stopPropagation();e.preventDefault();if(disabled){return;} 9ngModel.$setViewValue(ngModel.$modelValue==trueValue?falseValue:trueValue);ngModel.$render();if(e&&document.activeElement!==element[0]){element.focus();} 10scope.$digest();} 11function labelHandler(e){e.stopPropagation();e.preventDefault();element.trigger('click');} 12element.on('click',setValue);label&&$(label).on('click',labelHandler);if(attrs.ngDisabled){scope.$watch(attrs.ngDisabled,function(val){disabled=Boolean(val);element.toggleClass(sjElementsCtrl.disabled,disabled);});}}};});angie.directive('gRoundRadio',function(){return{require:'ngModel',link:function(scope,element,attrs,ctrl){element.sjRoundRadio({value:attrs.value,elementName:attrs.name,onValueChange:function(newValue){scope.$apply(function(){ctrl.$setViewValue(newValue);});}});var watch=function(newValue,oldValue){if(newValue==oldValue){return false;} 13element.sjRoundRadio('setValue',ctrl.$modelValue);};scope.$watch(attrs.ngModel,watch);element.sjRoundRadio('setValue',scope.$eval(attrs.ngModel));}};});angie.directive('gSuggest',function(){var nativePlaceholders='placeholder'in document.createElement('input');return{restrict:'A',replace:true,scope:{model:'=',options:'=gSuggest',placeholder:'@placeholder',noPlaceholder:'='},template:'<input ng-model="model" class="g_suggest_input" type="text" data-sj-placeholder="{% placeholder %}" data-set-placeholder="{% !noPlaceholder %}">',link:function(scope,element,attrs){var options=scope.options;if(!options.url&&!options._source){return false;} 14element.sjSuggest(options);}};});angie.directive('gBranchFilterTree',[function(){return{restrict:'E',replace:true,scope:{search:'=',items:'=',selected:'=',limitReached:'='},template:'<div class="g_branch_filter">'+'<div class="sj_block m_b_1" ng-repeat="item in items | filter:matchCategory">'+'<div class="g_branch_item sj_block m_b_1 m_t_1" data-branch="{% item.key %}">'+'{% item.title %}'+'<span class="g_branch_item_counter">{% getCategoryCounter(item) %}</span>'+'</div>'+'<div class="g_branch_categories_list sj_block m_l_1" ng-repeat="pos in item.positions | filter:matchPosition">'+'<label class="g_branch_category" ng-class="{m_disabled: isDisabled(pos)}">'+'<input ng-disabled="isDisabled(pos)" ng-checked="isSelected(pos)" name="category[]" ng-click="handlePositionChange(pos)" type="checkbox" class="g_branch_checkbox">'+'{% pos.title %}'+'</label>'+'</div>'+'</div>'+'</div>',controller:function($scope){$scope.isSelected=function(pos){return isAmong($scope.selected,pos);};$scope.isDisabled=function(pos){return $scope.limitReached&&!$scope.isSelected(pos);};$scope.handlePositionChange=function(pos){if($scope.isSelected(pos)){var position=_.indexOf($scope.selected.map((cat)=>cat.id),$scope.category.key);$scope.selected.splice(position,1);}else{$scope.selected.push(pos.key);}};$scope.getCategoryCounter=function(category){if(category.positions.length===0){return'';} 15var count=_.filter(category.positions,function(pos){return isAmong($scope.selected,pos);}).length;return count>0?'('+count+')':'';};$scope.matchPosition=function(item){var q=$scope.search._q;return isAmong($scope.selected,item)||Boolean(item.title.toLowerCase().match(q));};$scope.matchCategory=function(item){var matchedPositions=_.filter(item.positions,$scope.matchPosition);return matchedPositions.length>0;};}};}]);angie.directive('gBranchFilter',['$timeout',function($timeout){return{restrict:'E',replace:true,scope:{search:'='},template:'<div class="sj_block m_b_1 m_t_1 m_l_1 m_r_1">'+'<span class="sj_input">'+'<input type="text" maxlength="100" placeholder="{% getPlaceholder() %}" ng-model="search.q" ng-change="handleChange()" />'+'</span>'+'</div>',controller:function($scope,$element,$attrs){$scope.getPlaceholder=function(){return $attrs.placeholder;};$scope.handleChange=function(){var value=$scope.search.q.replace(/^\s+|\s+$/gm,'').toLowerCase();$scope.search._q=value;};}};}]);angie.directive('gBranch',['$timeout','$rootScope',function($timeout,$rootScope){return{restrict:'EA',replace:true,scope:{model:'=',theme:'@',data:'=',show:'=',hidePrime:'='},template:'<div class="g_branch js-branch {% theme %}" data-ng-class="{m_focus: show}" ng-cloak>'+'<div class="g_branch_toggle" ng-click="show = !show">'+'<span class="g_ico m_category g_branch_ico"></span>'+'<span class="g_branch_state" title="{% getTitle() %}">{% getTitle() %}</span>'+'<span class="g_branch_validation_ico"></span>'+'</div>'+'<div class="g_branch_options {% theme %}" popup="show" ng-switch="currentRenderer()">'+'<div class="g_branch_list">'+'<g-branch-filter ng-show="withFilter()" search="search" placeholder="ÐведиÑе ÑпеÑиализаÑÐ¸Ñ Ð¸ вÑбеÑиÑе из ÑпиÑка"></g-branch-filter>'+'<div ng-switch-when="asFilteredTree">'+'<div class="g_categories_title" ng-show="isCategoryLimitReached()">ÐÑ Ð²ÑбÑали макÑималÑное колиÑеÑÑво ({% maxSelected %}) каÑегоÑий</div>'+'<g-branch-filter-tree items="items" search="search" selected="model" limit-reached="isCategoryLimitReached()"></g-branch-filter-tree>'+'</div>'+'<div ng-switch-when="asTree">'+'<div>'+'<div class="g_branch_title" ng-show="showRecommended()">РекомендованнÑе</div>'+'<g-branch-item ng-repeat="item in items | filter:recommended" item="item" selected="model"></g-branch-item>'+'<div class="g_branch_line" ng-show="showRecommended()"></div>'+'<g-branch-item ng-repeat="item in items | filter:nonRecommended" item="item" selected="model"></g-branch-item>'+'</div>'+'<div class="g_branch_categories">'+'<div class="g_categories_title" ng-show="isCategoryLimitReached()">ÐÑ Ð²ÑбÑали макÑималÑное колиÑеÑÑво ({% maxSelected %}) каÑегоÑий</div>'+'<div class="g_branch_categories_list" ng-repeat="item in items" data-item-id="{% item.key %}" style="display: none">'+'<g-branch-category hide-prime="hidePrime" ng-repeat="category in item.positions" category="category" selected="model" limit-reached="isCategoryLimitReached()"></g-branch-category>'+'</div>'+'</div>'+'</div>'+'</div>'+'</div>'+'</div>',controller:function($scope,$element,$attrs){$scope.maxSelected=$attrs.max;$scope.recommendedItems=[];$scope.items=[];$scope.search={q:'',_q:''};$scope.$watch('search.q',function(q){if(q.length===0){$scope.updateElements();}});$scope.currentRenderer=function(){return $scope.search.q.length>0?'asFilteredTree':'asTree';};$scope.withFilter=function(){return Boolean($attrs.withFilter);};$scope.nonRecommended=function(item,flag){return!isAmong($scope.recommendedItems,item);};$scope.recommended=function(item){return isAmong($scope.recommendedItems,item);};$scope.showRecommended=function(){return $scope.recommendedItems.length>0;};$scope.getTitle=function(){if($scope.model.length===0){return $attrs.gBranchTitle||'СпеÑиализаÑиÑ';} 16var selectedCategories=$scope.model.sort(cat=>cat.prime?-1:1).map(cat=>cat.id);var titles=_.chain($scope.items).reduce(function(result,item){return result.concat(item.positions);},[]).filter(function(item){return isAmong($scope.model,item);}).sort(function(item,prevItem){var itemIndex=_.indexOf(selectedCategories,item.key);var prevItemIndex=_.indexOf(selectedCategories,prevItem.key);return itemIndex-prevItemIndex;}).map(function(item){return item.title;}
16).value();return titles.join(', ');};$scope.declOfNum=function(number,titles){return declOfNum(number,titles);};$scope.isCategoryLimitReached=function(){return $scope.model.length>=$scope.maxSelected;};$scope.updateElements=function(){$timeout(function(){var $options=$('.g_branch_options',$element);var $categories=$('.g_branch_categories',$element);$categories.css({left:$options.width()});});};},link:function(scope,element,attrs){var loadData=function(responseData){scope.items=_.toArray(responseData);scope.updateElements();};if(angular.isObject(scope.data)){$timeout(function(){loadData(scope.data);});}else{$.getJSON(attrs.url,loadData);}}};}]);angie.directive('gBranchItem',['$timeout',function($timeout){var timer;return{restrict:'E',replace:true,scope:{item:'=',selected:'='},template:'<div class="g_branch_item" data-branch="{% item.key %}">'+'{% item.title %}'+'<span class="g_branch_item_counter"> {% getCounterLabel() %}</span>'+'</div>',controller:function($scope){$scope.getCounterLabel=function(){var picked=_.chain($scope.item.positions).map(function(item){return convertToString(item.key);}).intersection($scope.selected.map(cat=>cat.id)).value();if(picked.length===0){return'';} 17return'('+picked.length+')';};},link:function(scope,element,attrs,ctrl){element.on('mouseenter',function(e){var $parentElement=$(this).closest('.g_branch_options');var $selectedElement=$('.g_branch_categories_list[data-item-id='+scope.item.key+']',$parentElement);var $categories=$('.g_branch_categories',$parentElement);if($selectedElement.is(':visible')){return false;} 18timer=$timeout(function(){$('.g_branch_item',$parentElement).removeClass('m_hover');element.addClass('m_hover');$categories.show();$('.g_branch_categories_list',$parentElement).hide();$selectedElement.show();if($parentElement.outerHeight()<$categories.outerHeight()){$categories.css('top','0');}else if($parentElement.outerHeight()<($categories.outerHeight()+element.position().top)){$categories.css('top',$parentElement.outerHeight()-$categories.outerHeight());}else{$categories.css('top',(element.position().top-1));}},100);}).on('mouseleave',function(){$timeout.cancel(timer);});}};}]);angie.directive('gBranchCategory',['$rootScope',function($rootScope){return{restrict:'E',replace:true,scope:{category:'=',selected:'=',hidePrime:'=',limitReached:'='},template:'<div class="g_branch_category">'+'<label ng-class="{m_disabled: isDisabled()}">'+'<input ng-disabled="isDisabled()" ng-checked="isSelected()" name="category[]" ng-click="handleCategoryPick()" type="checkbox" class="g_branch_checkbox">'+'{% category.title %}'+'</label>'+'<label class="g_branch_category_prime" ng-class="{g_branch_category_prime_checked: isPrime()}" ng-if="!hidePrime && isSelected()">'+'<input type="checkbox" ng-checked="isPrime()" name="category_prime[]" ng-click="handleCategoryPrime()" type="checkbox" class="g_branch_checkbox">'+'ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð´ÐµÑÑелÑноÑÑÑ'+'</label>'+'</div>',controller:function($scope){$scope.isSelected=function(){return isAmong($scope.selected,$scope.category);};$scope.isPrime=function(){return isAmong($scope.selected.filter((cat)=>cat.prime),$scope.category);};$scope.isDisabled=function(){return $scope.limitReached&&!$scope.isSelected();};var updateSelectedCategory=function(category,fields){for(var field in fields){category[field]=fields[field];} 19var position=_.indexOf($scope.selected.map(cat=>cat.id),category.id);$scope.selected.splice(position,1);$scope.selected.push(category);};$scope.handleCategoryPrime=function(){var ptimeCurrentValue=$scope.isPrime();var primeCategories=$scope.selected.filter(cat=>cat.prime);primeCategories.map(cat=>updateSelectedCategory(cat,{prime:false}));var category=$scope.selected.filter(cat=>cat.id===$scope.category.key)[0];updateSelectedCategory(category,{prime:!ptimeCurrentValue});};$scope.handleCategoryPick=function(){if($scope.isSelected()){var position=_.indexOf($scope.selected.map((cat)=>cat.id),$scope.category.key);$scope.selected.splice(position,1);}else{$scope.selected.push({id:$scope.category.key,prime:false});} 20if($scope.selected.length===1&&!$scope.hidePrime){updateSelectedCategory($scope.selected[0],{prime:true});}};}};}]);function isAmong(rawCatalogues,item){var catalogues=rawCatalogues.map((cat)=>convertToString(cat.id));var catalogue=convertToString(item.key);return _.indexOf(catalogues,catalogue)!==-1;} 21function convertToString(integer){return String(integer);} 22angie.directive('autosize',['$timeout',function($timeout){return{link:function(scope,element){element.autosize();$timeout(function(){element.trigger('autosize.resize');});scope.$on('Autosize:RefreshSize',function(){element.trigger('autosize.resize');});}};}]);angie.directive('gFocus',function(){return{link:function(scope,element,attrs){var elFocus=attrs.gFocus=='target-self'?element:element.parent();element.on('focus',function(){elFocus.addClass('m_focus');});element.on('blur',function(){elFocus.removeClass('m_focus');});}};});angie.directive('gValidationIcon',function(){return{require:'ngModel',link:function(scope,element,attrs,ngModelCtrl){function getElementForStyling(){return attrs.gValidationIcon=='target-self'?element:element.parent();}
23scope.$watch(function(){return ngModelCtrl.$invalid;},function(isInvalid){if(isInvalid){getElementForStyling().addClass('m_invalid');}else{getElementForStyling().removeClass('m_invalid');}});scope.$watch(function(){return((ngModelCtrl.validationPassed&&ngModelCtrl.$viewValue&&ngModelCtrl.$viewValue.toString().length>0||(attrs.dropdownSelect||attrs.dropdownSelectSj))&&ngModelCtrl.$valid&&ngModelCtrl.$dirty);},function(showAsValid){if(showAsValid){getElementForStyling().addClass('m_valid');}else{getElementForStyling().removeClass('m_valid');}});}};});angie.directive('gValidationMessageFor',function(){return{require:'^form',scope:{},template:'<div class="g_alert_msg m_red" data-ng-if="show && message">'+'<span class="g_alert_ico" data-ng-if="showIcon"></span>'+'<span data-ng-bind-html="message | unsafe"></span>'+'</div>',replace:true,link:function(scope,element,attrs,formCtrl){var control=formCtrl[attrs.gValidationMessageFor];scope.show=false;scope.showIcon=Boolean(attrs.withIcon);scope.message='';scope.$watch(function(){return control.$invalid&&control.error_msg.join('').length;},function(isInvalid){scope.show=isInvalid;});scope.$watch(function(){return control.error_msg;},function(isInvalid){scope.message=isInvalid?control.error_msg[0]:'';});}};});angie.directive('gValidationMessage',function(){return{require:'^form',scope:{},template:'<div class="sj_error" data-ng-if="show && message" >'+'<div class="sj_error_wr">'+'<div class="sj_error_txt" data-ng-bind-html="message | unsafe"></div>'+'</div>'+'</div>',replace:true,link:function(scope,element,attrs,formCtrl){scope.show=false;scope.showIcon=Boolean(attrs.withIcon);scope.message='';scope.$watch(function(){return formCtrl[attrs.gValidationMessage]&&formCtrl[attrs.gValidationMessage].$invalid&&formCtrl[attrs.gValidationMessage].error_msg.join('').length;},function(isInvalid){scope.show=isInvalid;});scope.$watch(function(){if(formCtrl[attrs.gValidationMessage]){return formCtrl[attrs.gValidationMessage].error_msg;} 24return'';},function(isInvalid){scope.message=isInvalid&&formCtrl[attrs.gValidationMessage]?formCtrl[attrs.gValidationMessage].error_msg[0]:'';});}};});angie.directive('gSubmitButton',function(){return{require:'^form',link:function(scope,element,attrs,form){var options=attrs.gSubmitButton?scope.$eval(attrs.gSubmitButton):{};scope.$watch(function(){return _.isEmpty(form.$sjInvalidControls)&&(!options.dirtyOnly||form.$dirty);},function(showSubmit){if(showSubmit){element.removeClass('m_disabled');if(options.reallyLock){element.prop('disabled',false);}}else{element.addClass('m_disabled');if(options.reallyLock){element.prop('disabled',true);}}});}};});angie.directive('gSubmitButtonSpinner',function(){return{require:'^form',template:'<span class="h_position_relative" data-ng-transclude></span>',transclude:true,link:function(scope,element,attrs,form){var spinner=angular.element('<i class="fa-li fa fa-spinner fa-spin"></i>');scope.showSpinner=false;var transclude=element.find('.ng-scope');scope.$watch(function(){return form.$sjShowSpinner;},function(showSpinner){if(showSpinner){element.children(0).prepend(spinner);transclude.addClass('sj_btn_text');}else{spinner.detach();transclude.removeClass('sj_btn_text');}});}};});angie.directive('gNumber',function(){return{require:'ngModel',link:function(scope,element){element.bind('keydown',function(event){if(event.keyCode==46||event.keyCode==8||event.keyCode==9||event.keyCode==27||event.keyCode==13||(event.keyCode==65&&event.ctrlKey===true)||(event.keyCode>=35&&event.keyCode<=39)||event.shiftKey||event.keyCode==61||event.keyCode==107){return;} 25if((event.keyCode<48||event.keyCode>57)&&(event.keyCode<96||event.keyCode>105)){return false;}});element.on('input propertychange',function(){this.value.match(/[^\s\d+()-]/g)&&(this.value='');return false;});}};});angie.directive('setPlaceholder',function(){var nativePlaceholders='placeholder'in document.createElement('input');return{restrict:'A',link:function(scope,element,attributes){if(nativePlaceholders){return;} 26if(attributes.setPlaceholder=='false'){return;} 27var $el=$(element);var elRealTop=0;var $fakeEl=null;elRealTop=$el.position().top;
27if(!$el.is(':visible')){$fakeEl=$el.parent().clone().appendTo('body').wrap('<div class="en0ne" style="position: absolute; top: -9000px; left: -9000px;"></div>').parent();elRealTop=$fakeEl.find($el.prop('tagName')).position().top;$fakeEl.remove();} 28element.placeholder({inputWrapper:'',color:'#858a90',placeholderCSS:{'font-face':$el.css('font-face'),'font-size':$el.css('font-size'),'line-height':$el.css('font-size'),top:(elRealTop+parseInt($el.css('padding-top')))+'px',left:$el.css('padding-left'),width:'90%'}});}};});angie.directive('sjPlaceholder',function(){'use strict';return{restrict:'A',priority:100,link:function(scope,element,attrs){$(element).attr('placeholder',attrs.sjPlaceholder);}};});angie.directive('usersMultiSelect',function(){var template=' \ 29 <div class="sj_multi_select" ng-class="{m_focus: isFocus}"> \ 30 <div ng-click="showDropdown = !showDropdown"> \ 31 {% getTitle() %} \ 32 <span class="sj_multi_select_arrow"></span> \ 33 </div> \ 34 <div class="sj_multi_select_dropdown" popup="showDropdown"> \ 35 <div class="sj_block sj_multi_select_label" ng-click="toggleAll()"> \ 36 <input type="checkbox" class="sj_multi_select_checkbox" ng-checked="isAllChecked()"> \ 37 ÐÑбÑаÑÑ Ð²ÑÐµÑ \ 38 </div> \ 39 <div class="sj_line m_l_n1 m_r_n1"></div> \ 40 <div \ 41 ng-repeat="user in users" \ 42 ng-click="toggleUser(user.id)" \ 43 class="sj_block sj_multi_select_label" \ 44 > \ 45 <input \ 46 type="checkbox" \ 47 class="sj_multi_select_checkbox" \ 48 ng-checked="user.checked" \ 49 > \ 50 {% user.name %} \ 51 </div> \ 52 </div> \ 53 </div> \ 54 ';return{scope:{users:'='},controller:function($scope){$scope.isFocus=false;$scope.$watch('users',function(newValue,oldValue){$scope.selectedUsersQty=_.filter($scope.users,function(user){return user.checked===true;}).length;},true);$scope.getTitle=function(){if($scope.selectedUsersQty===0){return'Ðе вÑбÑано';} 55return declOfNum($scope.selectedUsersQty,['ÐÑбÑан','ÐÑбÑано','ÐÑбÑано'])+' '+$scope.selectedUsersQty+' '+ 56declOfNum($scope.selectedUsersQty,['полÑзоваÑелÑ','полÑзоваÑелÑ','полÑзоваÑелей']);};$scope.toggleUser=function(id){var clickedUser=_.find($scope.users,function(user){return user.id==id;});clickedUser.checked=!clickedUser.checked;};$scope.toggleAll=function(){_.forEach($scope.users,function(user,index){if($scope.selectedUsersQty!==$scope.users.length){user.checked=true;}else{user.checked=false;}});};$scope.isAllChecked=function(){return $scope.selectedUsersQty===$scope.users.length;};},restrict:'E',replace:true,template:template,link:function(scope,element,attrs){var keyDownEvent='keydown.usersMultiSelect';element.on('focus',function(){scope.isFocus=true;$(document).on(keyDownEvent,handleKeys);});element.on('blur',function(){scope.isFocus=false;scope.showDropdown=false;scope.$apply();$(document).off(keyDownEvent);});function handleKeys(e){switch(e.which){case 40:scope.showDropdown=true;scope.$apply();return false;case 27:scope.showDropdown=false;return false;default:return;}}}};});}(angular.module('angie')));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.