@openveo/publish
Version:
OpenVeo video publication plugin
1 lines • 6.16 kB
JavaScript
;angular.module("ov.multirange",["ov.multirange.lite","ov.utils"]).directive("ovMultirange",["ovMultirangeViews",function(n){return{required:"ngModel",scope:{ngModel:"=",_views:"=views",_view:"=view",duration:"=duration",onSelect:"=",onMouserelease:"=",onEnablemouseover:"="},template:'<div class="ov-multirange-mk2-container"><ov-multirange-labels render="renderedStyle" duration="duration" on-enablemouseover="onEnablemouseover" on-select="onSelect" ng-model="ranges"></ov-multirange-labels><ov-multirange-lite ng-model="ranges" duration="duration" on-enablemouseover="onEnablemouseover" on-select="onSelect" on-mouserelease="onMouserelease" ng-style="renderedStyle.multirange" step="step"></ov-multirange-lite><ov-multirange-hairlines render="renderedStyle" ng-model="units"></ov-multirange-hairlines></div>',link:function(t){function e(){void 0!==t.duration&&(t.ranges=t.ngModel)}t.ranges=[],t.$watch("duration",e),t.$watch("ngModel",e),t.getPercent=function(e){return 100*e+"%"},t.changeView=function(e){var n;void 0!==e&&void 0!==t.views&&(n=t.views.length-1,void 0!==(e=t.views[e=e<0?0:n<e?n:e])&&(t.zoom=e.zoom,t.step=e.step,t.units=e.units,t.renderer()))},t.$watch("_view",function(e){t.changeView(e)}),t.$watch("_views",function(e){t.views=e,t.view=0,t.changeView(0)}),t.renderer=function(){if(void 0!==t.zoom){var e={container:{},content:{},multirange:{width:t.getPercent(t.zoom),display:"block",margin:"auto"}};return t.zoom<1?(e.content.margin="2 auto",e.content.width="calc("+t.getPercent(t.zoom)+" - 10px)",e.container.marginLeft="0"):(e.content.margin="2 0",e.content.width="calc("+t.getPercent(t.zoom)+" - "+(10-5*t.zoom)+"px)",e.container.marginLeft="5px"),t.renderedStyle=e}},void 0===t.views&&(t.views=n.DEFAULT,t.view=0,t.changeView(0))}}}]).directive("ovMultirangeLabels",function(){return{restrict:"E",scope:{ngModel:"=",render:"=",duration:"=",onSelect:"=",onEnablemouseover:"="},template:'<div class="ov-multirange-mk2-labels-container" ng-style="render.container"><ul class="ov-multirange-mk2-labels" ng-style="render.content"><li class="ov-multirange-mk2-label" ng-class="{\'active\':range.select}" ng-repeat="range in ngModel" ng-style="renderRange(range)" ng-mouseover="mouseover(range, onSelect, onEnablemouseover)" ><span ng-if="range.name && !range.type">{{ range.name }}</span><span ng-if="!range.name && !range.type"><div class="glyphicon glyphicon-map-marker"></div></span><span ng-if="range.type && range.type==\'begin\'" ng-class="range.type"><div class="glyphicon glyphicon-log-out"></div></span><span ng-if="range.type && range.type==\'end\'" ng-class="range.type"><div class="glyphicon glyphicon-log-in"></div></span></li></ul></div>',link:function(n){n.renderRange=function(e){return{left:e.value/n.duration*100+"%",zIndex:e._depth}},n.mouseover=function(e,n,t){!e.select&&t&&n(e)}}}}).directive("ovMultirangeHairlines",function(){return{restrict:"E",scope:{ngModel:"=",render:"="},template:'<div class="ov-multirange-mk2-hairlines-container" ng-style="render.container"><ul class="ov-multirange-mk2-hairlines" ng-style="render.content"><li class="ov-multirange-mk2-hairline" ng-repeat="hairline in hairlines" ng-style="hairline.render"><span>{{ hairline.label }}</span></li></ul></div>',link:function(a){a.$watch("ngModel",function(e){if(void 0!==e){a.hairlines=[];for(var n,t,o,r=e.length,i=0;i<r;i++)for(o=e[i],t=0;(1<t?Math.round(1e3*t)/1e3:t)<=1;t=parseFloat((t+o.value).toFixed(8)))n={render:{height:12*(1-i/r),left:100*t+"%"}},"function"==typeof o.labeller?n.label=o.labeller(t):void 0!==o.labeller&&(n.label=t),a.hairlines.push(n)}})}}}).factory("ovMultirangeViews",["ovUtils",function(e){var i=e.time.fromTimeToValue,a=e.time.fromValueToTime;return{TIME:function(n){for(var e=[],t=0,t=36e5<n?1:18e5<n?2:6e5<n?3:4,o=function(e){e=a(e,n);return(0!=e.hours?e.hours+"h":"")+e.minutes+"m"},r=[.9,2,4,8];t<=4;t++)1==t&&e.push({zoom:r[e.length],step:i(0,1,0,n),units:[{value:i(0,20,0,n),labeller:o},{value:i(0,5,0,n)}]}),2==t&&e.push({zoom:r[e.length],step:i(0,0,10,n),units:[{value:i(0,10,0,n),labeller:o},{value:i(0,2,0,n)}]}),3==t&&e.push({zoom:r[e.length],step:i(0,0,1,n),units:[{value:i(0,5,0,n),labeller:o},{value:i(0,1,0,n)}]}),4==t&&e.push({zoom:r[e.length],step:i(0,0,1,n),units:[{value:i(0,2,0,n),labeller:o},{value:i(0,0,30,n)}]});return e}}}]),angular.module("ov.multirange.lite",[]).directive("ovMultirangeLite",function(){return{required:"ngModel",scope:{ngModel:"=",step:"=",duration:"=",onSelect:"=",onMouserelease:"=",onEnablemouseover:"="},template:'<div class="ov-multirange-container" ng-mousemove="onMouseMove($event, onEnablemouseover)"><div class="ov-multirange-track"></div><div class="ov-multirange-wrapper" ng-repeat="range in ngModel" ng-style="computeDepth(range)" ng-mouseup="mouserelease(onMouserelease, range)" ng-mouseover="mouseover(range, onSelect, onEnablemouseover)" ><ov-range class="ov-multirange" duration="duration" ng-class="{\'active\':range.select}" position="range.value" min="0" max="{{ duration }}" step="{{ preciseStep }}"></div></div>',link:function(n,t){var o;n.precision=n.duration,n.preciseStep=1e3,n.onMouseMove=function(e,n){n&&(n=t[0].getBoundingClientRect(),o=Math.min((e.pageX-n.left)/n.width,1))},n.mouserelease=function(e,n){e(n)},n.mouseover=function(e,n,t){!e.select&&t&&n(e)},n.computeDepth=function(e){return e._depth=100-Math.round(100*Math.abs(o-e.value/n.duration)),{zIndex:e._depth}}}}}).directive("ovRange",function(){return{template:'<input type="range" ng-model="position">',require:["?ngModel"],restrict:"E",replace:!0,scope:{position:"="},link:function(e,n,t,o){o[0].$parsers.push(function(e){return parseInt(e)}),n.bind("click",function(e){e.preventDefault(),e.stopPropagation()})}}}),angular.module("ov.utils",[]).factory("ovUtils",function(){return{time:{fromTimeToValue:function(e,n,t,o){var r=new Date(0);return r.setUTCHours(e),r.setUTCMinutes(n),r.setUTCSeconds(t),r.getTime()/o},fromValueToTime:function(e,n){e=new Date(Math.round(n*e));return{hours:e.getUTCHours()+24*(e.getUTCDate()-1),minutes:e.getUTCMinutes(),seconds:e.getUTCSeconds()}}},format:{padZeroes:function(e,n){e="000000000"+e;return e.substr(e.length-n)}}}});