UNPKG

time-targeting-component

Version:
1 lines 9.38 kB
!function(){"use strict";angular.module("timeTargetingModule",[]).service("defaultTimeAdapter",[function(){return{caps:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",objToString:function(e,t){var n,o="",s=0;t=t||!1;for(var i in e)if(e.hasOwnProperty(i)){s++,n="";for(var a in e[i])e[i][a]&&(n+=this.caps.charAt(a));if(8==s&&n.length){var r=this.caps.slice(this.caps.indexOf(n[0]),this.caps.indexOf(n[n.length-1])+1);if(n!=r&&t){for(var l=this.caps.indexOf(n[0]);l<this.caps.indexOf(n[n.length-1])+1;l++)e[i][l]=1;n=r}}n.length&&(o+=s+n)}return o},stringToObj:function(e,t){function n(e){return!isNaN(parseFloat(e))&&isFinite(e)}for(var o in t)for(var s in t[o])t[o][s]&&(t[o][s]=!1);if(e.length)for(var i in e)if(e.hasOwnProperty(i)&&n(e[i]))for(var a=i;a<e.length;a++)if(a!=i){if(n(e[a]))break;t[e[i]-1][this.caps.indexOf(e[a])]=1}},isHolidaysValid:function(e){var t,n=!1,o=0;for(var s in e)if(8==++o){t="";for(var i in e[s])e[s][i]&&(t+=this.caps.charAt(i));t.length?t==this.caps.slice(this.caps.indexOf(t[0]),this.caps.indexOf(t[t.length-1])+1)&&(n=!0):n=!0}return n}}}]).service("extendedTimeAdapter",[function(){return{caps:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",low:"abcdefghijklmnopqrstubwxyz",objToString:function(e,t){var n,o,s="",i=0,a=0,r=0,l=0,c=!1;t=t||!1;for(var d in e)if(e.hasOwnProperty(d)){i++,n="",o="";for(var p in e[d])e[d][p]&&(n+=this.caps.charAt(p),o+=this.caps.charAt(p),e[d][p]>0&&e[d][p]<100&&(n+=this.low.charAt(e[d][p]/10)));if(8==i&&n.length){for(var u=this.caps.slice(this.caps.indexOf(n[0]),this.caps.indexOf(n[n.length-1])+1),h=this.caps.indexOf(o[0]);h<this.caps.indexOf(o[o.length-1])+1;h++)a=a||e[d][h],0!=e[d][h]&&(r++,l+=e[d][h],a!=e[d][h]&&(c=!0));if(n!=u&&t){for(h=this.caps.indexOf(o[0]);h<this.caps.indexOf(o[o.length-1])+1;h++)e[d][h]=10*Math.round(l/r/10);n=u}if(c&&t)return this.objToString(e,!0)}n.length&&(s+=i+n)}return s},stringToObj:function(e,t){function n(e){return!isNaN(parseFloat(e))&&isFinite(e)}for(var o in t)for(var s in t[o])t[o][s]&&(t[o][s]=0);if(e.length)for(var i in e)if(e.hasOwnProperty(i)&&n(e[i]))for(var a=i;a<e.length;a++)if(a!=i){if(n(e[a]))break;e[a+1]&&e.charCodeAt(a+1)>96?(t[e[i]-1][this.caps.indexOf(e[a])]=10*this.low.indexOf(e[a+1]),a++):t[e[i]-1][this.caps.indexOf(e[a])]=100}},isHolidaysValid:function(e){var t,n=!1,o=0;for(var s in e)if(8==++o){t="";for(var i in e[s])e[s][i]&&(t+=this.caps.charAt(i));t.length?t==this.caps.slice(this.caps.indexOf(t[0]),this.caps.indexOf(t[t.length-1])+1)&&(n=!0):n=!0}return n},isHolidaysOneValue:function(e){var t=0,n=0;for(var o in e)if(8==++t){"";for(var s in e[o])if(e[o][s]&&e[o][s]&&(n=n||e[o][s])&&n!=e[o][s])return!1}return!0}}}]).component("timeTargetingComponent",{bindings:{model:"=",options:"<"},template:'<div class="time-targeting-wrapper" ng-class="{\'extended\': $ctrl.options.extended}"><div class="row time-targeting" ng-init="$ctrl.options.buttons.length && $ctrl.selectTimeTargeting($ctrl.options.defaultButtonSelected);"><div class="form-group"><div class="form-line"><div class="btn-group"><a class="btn btn-outline" ng-class="{\'btn-active\': button.selected}" ng-click="$ctrl.selectTimeTargeting($index);" ng-repeat="button in $ctrl.options.buttons track by $index">{{button.name}}</a> <a ng-show="$ctrl.options.reload == true" ng-click="$ctrl.selectByButton(-1);" class="undo"><span class="undo-icon"><i class="f-ico i-refresh"></i></span> <span class="undo-text">Сбросить</span></a></div></div></div><table class="checkbox-zone"><thead><tr><th></th><th class="noselect" ng-click="$ctrl.selectColumn($index);" ng-repeat="hour in $ctrl.options.hours track by $index"><span>{{hour}}</span></th></tr></thead><tbody ng-mouseup="$ctrl.selectEnd();" nng-mo="$ctrl.selectEnd();"><tr ng-repeat-start="day in $ctrl.options.days track by $index"><th ng-click="$ctrl.selectRow($index);" class="noselect"><span title="{{$ctrl.options.daysHint[$index]}}">{{day}}</span></th><td ng-repeat="hour in $ctrl.options.hours track by $index" ng-mousedown="$ctrl.selectStart($parent.$index, $index);" ng-mouseup="$ctrl.selectEnd();" ng-mouseenter="$ctrl.selectEnter($parent.$index, $index);" draggable="false" class="unsel"><div class="form-check" ng-show="!$ctrl.options.extended"><input type="checkbox" class="checkbox" id="wd-{{$parent.$index}}-h-{{$index}}" ng-model="$ctrl.model[$parent.$index][$index]" ng-change="$ctrl.options.onChange()" ng-init="0" ng-false-value="0" ng-true-value="1"> <label for="wd-{{$parent.$index}}-h-{{$index}}"><span class="form-check-control"></span></label></div><div class="form-check-extended unsel" ng-show="$ctrl.options.extended" draggable="false"><div class="extended-item unsel ext-val{{$ctrl.model[$parent.$index][$index]}}" ng-model="$ctrl.model[$parent.$index][$index]" ng-click="$ctrl.extendedChange($parent.$index, $index)" draggable="false"><span class="noselect unsel" ng-show="$ctrl.model[$parent.$index][$index] > 0 && $ctrl.model[$parent.$index][$index] < 100" draggable="false">{{$ctrl.model[$parent.$index][$index]}}</span></div></div></td></tr><tr ng-repeat-end ng-if="$ctrl.options.spacing.indexOf($index) != -1" class="time-targeting-spacing"></tr></tbody></table></div><div class="extended-block" ng-show="$ctrl.options.extended"><h3>{{$ctrl.options.extendedTitle}}</h3><div class="extended-values"><div ng-repeat="extendedValue in $ctrl.options.extendedValues track by $index"><div ng-click="$ctrl.selectValue = extendedValue" class="ext-val{{extendedValue}}" ng-class="{\'current\': extendedValue == $ctrl.selectValue}"></div><span>{{extendedValue}} <span ng-show="extendedValue">%</span></span></div></div></div></div>',controller:["$timeout",function(e){var t=this;t.selectValue=0,t.selectStartDay="",t.selectStartHour="",t.selectStartDayFor=0,t.selectEndDayFor=0,t.selectStartHourFor=0,t.selectEndHourFor=0,t.defaultSelectValue=1,t.externalModel="",t.onInnerChange=function(){t.externalModel=t.options.timeAdapter.objToString(t.model);for(var e=0;e<t.options.buttons.length;e++)if(t.externalModel==t.options.buttons[e].model||""==t.options.buttons[e].model){t.options.buttons[e].selected=!0;for(var n=0;n<t.options.buttons.length;n++)n!=e&&(t.options.buttons[n].selected=!1);return 0}},t.$onInit=function(){t.options=t.options||{},t.options.days=t.options.days||["пн","вт","ср","чт","пт","сб","вс","пр"],t.options.daysHint=t.options.daysHint||["пн","вт","ср","чт","пт","сб","вс","праздничные дни"],t.options.hours=t.options.hours||["00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"],t.options.buttons=t.options.buttons||[],t.options.defaultButtonSelected=t.options.defaultButtonSelected||1,t.options.reload=t.options.reload||!0,t.options.spacing=t.options.spacing||[4,6],t.options.extended&&(t.options.extendedTitle=t.options.extendedTitle||"Ставка",t.options.extendedValues=t.options.extendedValues||[100,90,80,70,60,50,40,30,20,10,0],t.options.extendedDefaultValue=t.options.extendedDefaultValue||100);for(var e=0;e<t.options.days.length;e++){t.model[e]={};for(var n=0;n<t.options.hours.length;n++)t.model[e][n]=0}t.options.extendedDefaultValue&&(t.selectValue=t.options.extendedDefaultValue),t.options.onInit&&t.options.onInit()},t.extendedChange=function(e,n){t.model[e][n]=t.model[e][n]?t.model[e][n]!=t.selectValue?t.selectValue:0:t.selectValue,t.options.onChange(),t.onInnerChange()},t.selectStart=function(e,n){t.selectStartDay=e,t.selectStartHour=n,t.options.extended?t.model[e][n]==t.selectValue&&(t.selectValue=0):t.model[e][n]?t.selectValue=0:t.selectValue=1,angular.element(document).one("mouseup",function(){t.selectEnd()})},t.selectEnter=function(e,n){if(t.selectStartDay>e?(t.selectStartDayFor=e,t.selectEndDayFor=t.selectStartDay):(t.selectStartDayFor=t.selectStartDay,t.selectEndDayFor=e),t.selectStartHour>n?(t.selectStartHourFor=n,t.selectEndHourFor=t.selectStartHour):(t.selectStartHourFor=t.selectStartHour,t.selectEndHourFor=n),""!==t.selectStartDay)for(var o=t.selectStartDayFor;o<=t.selectEndDayFor;o++)for(var s=t.selectStartHourFor;s<=t.selectEndHourFor;s++)t.model[o][s]=t.selectValue},t.selectColumn=function(e){for(var n=1,o=0;o<t.options.days.length;o++)if(0==t.model[o][e]){n=0;break}for(o=0;o<t.options.days.length;o++)t.model[o][e]=n?0:t.options.extended?t.selectValue:1;t.options.onChange&&t.options.onChange(),t.onInnerChange()},t.selectRow=function(e){for(var n=1,o=0;o<t.options.hours.length;o++)if(0==t.model[e][o]){n=0;break}for(o=0;o<t.options.hours.length;o++)t.model[e][o]=n?0:t.options.extended?t.selectValue:1;t.options.onChange&&t.options.onChange(),t.onInnerChange()},t.selectByButton=function(e){if(-1!=e&&t.options.buttons[e].noclear)return t.options.onChange&&t.options.onChange(),void t.onInnerChange();for(var n=0;n<t.options.days.length;n++)for(var o=0;o<t.options.hours.length;o++)t.model[n][o]=0;if(-1===e)return t.options.onChange&&t.options.onChange(),void t.onInnerChange();t.options.buttons[e].model&&t.options.timeAdapter.stringToObj(t.options.buttons[e].model,t.model),t.options.onChange&&t.options.onChange(),t.onInnerChange()},t.selectEnd=function(){t.selectStartDay="",t.selectStartHour="",t.options.onChange&&t.options.onChange(),e(function(){t.onInnerChange()},0)},t.selectTimeTargeting=function(e){for(var n=0;n<t.options.buttons.length;n++)t.options.buttons[n].selected=!1;t.options.buttons[e].selected=!0,t.selectByButton(e)}}]})}();