@project-sunbird/collection-editor
Version:
Collection Editor to support content types like Book, Collection, Course, Lesson Plan
1 lines • 348 kB
JavaScript
!function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){n(2),n(3),n(5),n(6),n(9),n(12),n(15),n(18),n(19),n(20),n(23),e.exports=n(26)},function(e,t){(function(){$.fn.treePicker=function(e){var t,n,i,r,o,a,s,c,l,u,d,p,f,h,g,v,m,y,b,w,C,k,E,x;return x=$(this),f=[],d=[],w={},0!=$("#"+e.nodeName).length&&$("#"+e.nodeName).remove(),c=$("<div id="+e.nodeName+' class="ui tree-picker small modal">\n <div class="header">\n '+e.name+'\n\n <div class="ui menu">\n <a class="active tree item">\n <i class="list icon"></i> Concepts\n </a>\n <a class="picked item">\n <i class="checkmark icon"></i> Selected Concepts <span class="count"></span>\n </a>\n </div>\n </div>\n <div class="ui search form">\n <div class="field">\n <div class="ui icon input">\n <input type="text" placeholder="Search">\n <i class="search icon"></i>\n </div>\n </div>\n </div>\n <div class="content">\n <div class="ui active inverted dimmer"><div class="ui text loader">Loading data</div></div>\n <div class="tree-tab">\n <div style="height: 300px"></div>\n </div>\n\n <div class="search-tab">\n </div>\n\n <div class="picked-tab">\n </div>\n </div>\n <div class="actions">\n <a class="pick-search"><i class="checkmark icon"></i> Choose All</a>\n <a class="unpick-search"><i class="remove icon"></i> Remove All</a>\n <a class="unpick-picked"><i class="remove icon"></i> Remove All</a>\n \n <a class="ui button close cancel">Cancel</a>\n<a class="ui blue button accept">Done</a>\n </div>\n</div>').modal({duration:200,closable:!1,allowMultiple:!0,onDeny:function(){return n.onCancel&&n.onCancel(),!0}}),i=$(".count",c),w={tree:$(".tree-tab",c),search:$(".search-tab",c),picked:$(".picked-tab",c)},t={pickSearch:$(".actions .pick-search",c),unpickSearch:$(".actions .unpick-search",c),unpickPicked:$(".actions .unpick-picked",c)},n={childrenKey:"nodes",singlePick:!1,minSearchQueryLength:3,hidden:function(e){return!1},disabled:function(e){return!1},displayFormat:function(t){return e.name+" (Выбрано "+t.length+")"},onCancel:function(){return!1}},$.extend(n,e),r=function(){return console.log("Concept selector initializing...."),n.data&&(d=n.data),n.picked?n.picked=n.picked:x.attr("data-picked-ids")&&x.attr("data-picked-ids").split(","),n.picked?d.length?(E(),x.html(n.displayFormat(f))):x.html(n.displayFormat(n.picked)):x.html(n.displayFormat([])),x.unbind("click"),x.on("click",function(e){return console.log("click event received",d),c.modal("show"),b(),d.length?($(".ui.active.dimmer",c).removeClass("active"),a(d)):n.url?s(n.url,{},function(e){return $(".ui.active.dimmer",c).removeClass("active"),a(e)}):void 0}),$(".actions .accept",c).on("click",function(e){return c.modal("hide"),n.onSubmit&&n.onSubmit(f),x.html(n.displayFormat(f))}),t.pickSearch.on("click",function(e){return $(".search-tab .node:not(.picked) .name",c).trigger("click")}),t.unpickSearch.on("click",function(e){return $(".search-tab .node.picked .name",c).trigger("click")}),t.unpickPicked.on("click",function(e){var t;$(".node.picked",c).removeClass("picked"),f=n.picked=[],k(),t=v([],{height:"300px",overflowY:"auto"}),w.picked.show().html(t)}),$(".menu .tree",c).on("click",function(e){return b()}),$(".menu .picked",c).on("click",function(e){return m()}),console.log("Concept selector initialized"),$(".search input",c).on("keyup",function(e){return y($(this).val())})},s=function(e,t,n){return null==t&&(t={}),$.get(e,t,function(e){return d=e.constructor===String?$.parseJSON(e):e,n(d)})},a=function(e){var t;return E(),t=v(e,{height:"300px",overflowY:"auto"}),w.tree.html(t),o(t)},E=function(){var e,t,i,r,o,a;if(n.picked){for(f=[],o=[],e=0,i=(r=n.picked).length;e<i;e++)t=r[e],(a=h(d,function(e){return""+e.id==""+t})).length?o.push(f.push(a[0])):o.push(void 0);return o}},b=function(){return $(".menu .item",c).removeClass("active"),$(".menu .tree",c).addClass("active"),w.tree.show(),w.search.hide(),w.picked.hide(),c.attr("data-mode","tree")},y=function(e){var t,i,r=[];return null!==e&&e.length>=n.minSearchQueryLength?(t=h(d,function(t){return t.name&&t.name.toLowerCase().indexOf(e.toLowerCase())>-1}),ecEditor._.forEach(t,function(e){"selectable"===e.selectable&&r.push(e)}),i=g(t=r,{height:"300px",overflowY:"auto"}),$(".menu .item",c).removeClass("active"),w.search.show().html(i),w.tree.hide(),w.picked.hide(),c.attr("data-mode","search"),o(i),$(".name",i).each(function(){var t,n;return t=$(this).text(),n=RegExp("("+e+")","gi"),t=t.replace(n,"<strong class='search-query'>$1</strong>"),$(this).html(t)})):b()},m=function(){var e;return e=g(f,{height:"300px",overflowY:"auto"}),$(".menu .item",c).removeClass("active"),$(".menu .picked",c).addClass("active"),w.picked.show().html(e),w.tree.hide(),w.search.hide(),c.attr("data-mode","picked"),initializeNodeListForSelected(e)},v=function(e,t){var i,r,o,a,s;for(null==t&&(t={}),s=$('<div class="ui tree-picker tree"></div>').css(t),i=0,r=e.length;i<r;i++)o=e[i],n.hidden(o)||(a=$('<div class="node" data-id="'+o.id+'" data-name="'+o.name+'">\n <div class="head '+o.selectable+'">\n <i class="add circle icon"></i>\n <i class="minus circle icon"></i>\n <i class="radio icon"></i>\n <a class="name">'+o.name+'</a>\n <i class="checkmark icon"></i>\n </div>\n <div class="content"></div>\n</div>').appendTo(s),n.disabled(o)&&a.addClass("disabled"),o[n.childrenKey]&&o[n.childrenKey].length?$(".content",a).append(v(o[n.childrenKey])):a.addClass("childless"));return s},g=function(e,t){var i,r,o,a,s;for(null==t&&(t={}),o=$('<div class="ui tree-picker list"></div>').css(t),i=0,r=e.length;i<r;i++)a=e[i],n.hidden(a)||(s=$('<div class="node" data-id="'+a.id+'" data-name="'+a.name+'">\n <div class="head '+a.selectable+'">\n <a class="name">'+a.name+'</a>\n <i class="checkmark icon"></i>\n </div>\n <div class="content"></div>\n</div>').appendTo(o),n.disabled(a)&&s.addClass("disabled"));return o},o=function(e){return $(".node",e).each(function(){var e,t,n;return n=$(this),clickHead=$(">.head.selectable",n),t=$(">.head",n),e=$(">.content",n),$(">.name",clickHead).on("click",function(e){return l(n)}),u(n)&&n.addClass("picked"),n.hasClass("childless")||(t.hasClass("selectable")?$(">.icon",t).on("click",function(t){return n.toggleClass("opened"),e.slideToggle()}):$(t).on("click",function(t){return n.toggleClass("opened"),e.slideToggle()})),k()})},initializeNodeListForSelected=function(e){return $(".node",e).each(function(){var e,t,n;return n=$(this),clickHead=$(">.head",n),t=$(">.head",n),e=$(">.content",n),$(">.name",clickHead).on("click",function(e){return l(n)}),u(n)&&n.addClass("picked"),n.hasClass("childless")||$(">.icon",t).on("click",function(t){return n.toggleClass("opened"),e.slideToggle()}),k()})},l=function(e){if(!e.hasClass("disabled"))return n.singlePick&&($(".node.picked",c).removeClass("picked"),f=[]),e.toggleClass("picked"),e.hasClass("picked")?p(e):C(e)},p=function(e){var t;return n.picked=null,t=e.attr("data-id"),f.push({id:t,name:e.attr("data-name")}),k(),$(".node[data-id="+t+"]",c).addClass("picked")},C=function(e){var t;return n.picked=null,t=e.attr("data-id"),f=f.filter(function(e){return""+e.id!=""+t}),k(),$(".node[data-id="+t+"]",c).removeClass("picked")},u=function(e){return f.filter(function(t){return""+t.id===e.attr("data-id")}).length},k=function(){return x.attr("data-picked-ids",f.map(function(e){return e.id})),f.length?(i.closest(".item").addClass("highlighted"),i.html("("+f.length+")")):(i.closest(".item").removeClass("highlighted"),i.html(""))},h=function(e,t){var i,r,o,a;for(a=[],i=0,r=e.length;i<r;i++)t(o=e[i])&&a.push({id:o.id,name:o.name,selectable:o.selectable}),o[n.childrenKey]&&o[n.childrenKey].length&&(a=a.concat(h(o[n.childrenKey],t)));return a},r()}}).call(this),org.ekstep.pluginframework.pluginManager.registerPlugin({id:"org.ekstep.conceptselector",ver:"1.1",author:"Santhosh Vasabhaktula",title:"Concept Selector Plugin",description:"",publishedDate:"",editor:{main:"editor/plugin.js",dependencies:[{type:"js",src:"editor/semantic-ui-tree-picker.js"},{type:"css",src:"editor/semantic-ui-tree-picker.css"}]}},org.ekstep.contenteditor.basePlugin.extend({conceptData:void 0,callback:void 0,limit:500,selectors:[],concepts:[],initialize:function(){ecEditor.addEventListener(this.manifest.id+":init",this.initConceptBrowser,this)},initData:function(e,t){e=e||this;var n=[];function i(e,t){var n=[];return ecEditor._.forEach(t,function(r){if(null!=r.parent&&r.parent[0]==e){var o={};o.id=r.identifier,o.name=r.name,o.selectable="selectable",o.nodes=i(r.identifier,t),n.push(o)}}),ecEditor._.uniqBy(n,"id")}ecEditor.getService("search").search({request:{filters:{objectType:["Dimension","Domain"]}}},function(r,o){!r&&o.data&&o.data.result&&ecEditor._.isArray(o.data.result.domains)&&ecEditor._.forEach(o.data.result.domains,function(t){var r={};r.id=t.identifier,r.name=t.name;var a=[];ecEditor._.forEach(i(t.identifier,o.data.result.dimensions),function(t){var n={};n.id=t.id,n.name=t.name,n.nodes=i(t.id,e.concepts),a.push(n)}),r.nodes=a,n.push(r)}),t&&t()}),this.conceptData=n},getConcept:function(e,t,n,i){n=n||this;var r={request:{filters:{objectType:["Concept"]},offset:e=e||0,limit:t}};ecEditor.getService("search").search(r,function(r,o){!r&&o.data&&o.data.result&&ecEditor._.isArray(o.data.result.concepts)&&(ecEditor._.forEach(o.data.result.concepts,function(e){n.concepts.push(e)}),o.data.result.count>o.data.result.concepts.length+e&&(e+=o.data.result.concepts.length)!==o.data.result.count?n.getConcept(e,t,n,i):i(n))})},initConceptBrowser:function(e,t){var n=this;n.concepts.length?-1==n.selectors.indexOf(t.element)&&setTimeout(function(){ecEditor.jQuery("#"+t.element).treePicker({data:n.conceptData,name:"Concepts",picked:t.selectedConcepts,onSubmit:function(e){t.callback(e),t.selectedConcepts=_.map(e,"id"),n.generateTelemetry({type:"click",subtype:"submit",target:"ConceptSelectorSubmit"})},onCancel:function(){n.initConceptBrowser(e,t)},nodeName:"conceptSelector_"+t.element,minSearchQueryLength:1})},1e3):n.getConcept(0,n.limit,n,function(){n.initData(n,function(){-1==n.selectors.indexOf(t.element)&&setTimeout(function(){ecEditor.jQuery("#"+t.element).treePicker({data:n.conceptData,name:"Concepts",picked:t.selectedConcepts,onSubmit:function(e){t.callback(e),t.selectedConcepts=_.map(e,"id"),n.generateTelemetry({type:"click",subtype:"submit",target:"ConceptSelectorSubmit"})},onCancel:function(){n.initConceptBrowser(e,t)},nodeName:"conceptSelector_"+t.element,minSearchQueryLength:1})},1e3)})})},generateTelemetry:function(e){e&&ecEditor.getService("telemetry").interact({type:e.type,subtype:e.subtype,id:e.target,pageid:org.ekstep.contenteditor.api.getCurrentStage().id||"",target:{id:e.targetid||"",type:"plugin",ver:""},plugin:{id:this.manifest.id,ver:this.manifest.ver,category:"core"},ver:"3.0"})}}))},function(e,t,n){var i,r,o,a;a=this,void 0===(o=function(){return a.WaveSurfer=function(){"use strict";var e,t={defaultParams:{height:120,waveColor:"#999",progressColor:"#31ADE0",cursorColor:"#333",cursorWidth:1,skipLength:2,minPxPerSec:20,pixelRatio:window.devicePixelRatio||screen.deviceXDPI/screen.logicalXDPI,fillParent:!0,scrollParent:!1,hideScrollbar:!1,normalize:!1,audioContext:null,container:null,dragSelection:!0,loopSelection:!0,audioRate:1,interact:!0,splitChannels:!1,mediaContainer:null,mediaControls:!1,renderer:"Canvas",backend:"WebAudio",mediaType:"audio",autoCenter:!0},init:function(e){if(this.params=t.util.extend({},this.defaultParams,e),this.container="string"==typeof e.container?document.querySelector(this.params.container):this.params.container,!this.container)throw new Error("Container element not found");if(null==this.params.mediaContainer?this.mediaContainer=this.container:"string"==typeof this.params.mediaContainer?this.mediaContainer=document.querySelector(this.params.mediaContainer):this.mediaContainer=this.params.mediaContainer,!this.mediaContainer)throw new Error("Media Container element not found");this.savedVolume=0,this.isMuted=!1,this.tmpEvents=[],this.createDrawer(),this.createBackend()},createDrawer:function(){var e=this;this.drawer=Object.create(t.Drawer[this.params.renderer]),this.drawer.init(this.container,this.params),this.drawer.on("redraw",function(){e.drawBuffer(),e.drawer.progress(e.backend.getPlayedPercents())}),this.drawer.on("click",function(t,n){setTimeout(function(){e.seekTo(n)},0)}),this.drawer.on("scroll",function(t){e.fireEvent("scroll",t)})},createBackend:function(){var e=this;this.backend&&this.backend.destroy(),"AudioElement"==this.params.backend&&(this.params.backend="MediaElement"),"WebAudio"!=this.params.backend||t.WebAudio.supportsWebAudio()||(this.params.backend="MediaElement"),this.backend=Object.create(t[this.params.backend]),this.backend.init(this.params),this.backend.on("finish",function(){e.fireEvent("finish")}),this.backend.on("play",function(){e.fireEvent("play")}),this.backend.on("pause",function(){e.fireEvent("pause")}),this.backend.on("audioprocess",function(t){e.fireEvent("audioprocess",t)})},startAnimationLoop:function(){var e=this,t=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,n=function(){if(!e.backend.isPaused()){var i=e.backend.getPlayedPercents();e.drawer.progress(i),e.fireEvent("audioprocess",e.getCurrentTime()),t(n)}};n()},getDuration:function(){return this.backend.getDuration()},getCurrentTime:function(){return this.backend.getCurrentTime()},play:function(e,t){this.backend.play(e,t),this.startAnimationLoop()},pause:function(){this.backend.pause()},playPause:function(){this.backend.isPaused()?this.play():this.pause()},isPlaying:function(){return!this.backend.isPaused()},skipBackward:function(e){this.skip(-e||-this.params.skipLength)},skipForward:function(e){this.skip(e||this.params.skipLength)},skip:function(e){var t=this.getCurrentTime()||0,n=this.getDuration()||1;t=Math.max(0,Math.min(n,t+(e||0))),this.seekAndCenter(t/n)},seekAndCenter:function(e){this.seekTo(e),this.drawer.recenter(e)},seekTo:function(e){var t=this.backend.isPaused(),n=this.params.scrollParent;t&&(this.params.scrollParent=!1),this.backend.seekTo(e*this.getDuration()),this.drawer.progress(this.backend.getPlayedPercents()),t||(this.backend.pause(),this.backend.play()),this.params.scrollParent=n,this.fireEvent("seek",e)},stop:function(){this.pause(),this.seekTo(0),this.drawer.progress(0)},setVolume:function(e){this.backend.setVolume(e)},setPlaybackRate:function(e){this.backend.setPlaybackRate(e)},toggleMute:function(){this.isMuted?(this.backend.setVolume(this.savedVolume),this.isMuted=!1):(this.savedVolume=this.backend.getVolume(),this.backend.setVolume(0),this.isMuted=!0)},toggleScroll:function(){this.params.scrollParent=!this.params.scrollParent,this.drawBuffer()},toggleInteraction:function(){this.params.interact=!this.params.interact},drawBuffer:function(){var e=Math.round(this.getDuration()*this.params.minPxPerSec*this.params.pixelRatio),t=this.drawer.getWidth(),n=e;this.params.fillParent&&(!this.params.scrollParent||t>e)&&(n=t);var i=this.backend.getPeaks(n);this.drawer.drawPeaks(i,n),this.fireEvent("redraw",i,n)},zoom:function(e){this.params.minPxPerSec=e,this.params.scrollParent=!0,this.drawBuffer(),this.seekAndCenter(this.getCurrentTime()/this.getDuration()),this.fireEvent("zoom",e)},loadArrayBuffer:function(e){this.decodeArrayBuffer(e,function(e){this.loadDecodedBuffer(e)}.bind(this))},loadDecodedBuffer:function(e){this.backend.load(e),this.drawBuffer(),this.fireEvent("ready")},loadBlob:function(e){var t=this,n=new FileReader;n.addEventListener("progress",function(e){t.onProgress(e)}),n.addEventListener("load",function(e){t.loadArrayBuffer(e.target.result)}),n.addEventListener("error",function(){t.fireEvent("error","Error reading file")}),n.readAsArrayBuffer(e),this.empty()},load:function(e,t){switch(this.params.backend){case"WebAudio":return this.loadBuffer(e);case"MediaElement":return this.loadMediaElement(e,t)}},loadBuffer:function(e){return this.empty(),this.getArrayBuffer(e,this.loadArrayBuffer.bind(this))},loadMediaElement:function(e,t){this.empty(),this.backend.load(e,this.mediaContainer,t),this.tmpEvents.push(this.backend.once("canplay",function(){this.drawBuffer(),this.fireEvent("ready")}.bind(this)),this.backend.once("error",function(e){this.fireEvent("error",e)}.bind(this))),!t&&this.backend.supportsWebAudio()&&this.getArrayBuffer(e,function(e){this.decodeArrayBuffer(e,function(e){this.backend.buffer=e,this.drawBuffer()}.bind(this))}.bind(this))},decodeArrayBuffer:function(e,t){this.backend.decodeArrayBuffer(e,this.fireEvent.bind(this,"decoded"),this.fireEvent.bind(this,"error","Error decoding audiobuffer")),this.tmpEvents.push(this.once("decoded",t))},getArrayBuffer:function(e,n){var i=this,r=t.util.ajax({url:e,responseType:"arraybuffer"});return this.tmpEvents.push(r.on("progress",function(e){i.onProgress(e)}),r.on("success",n),r.on("error",function(e){i.fireEvent("error","XHR error: "+e.target.statusText)})),r},onProgress:function(e){if(e.lengthComputable)var t=e.loaded/e.total;else t=e.loaded/(e.loaded+1e6);this.fireEvent("loading",Math.round(100*t),e.target)},exportPCM:function(e,t,n){e=e||1024,t=t||1e4,n=n||!1;var i=this.backend.getPeaks(e,t),r=[].map.call(i,function(e){return Math.round(e*t)/t}),o=JSON.stringify(r);return n||window.open("data:application/json;charset=utf-8,"+encodeURIComponent(o)),o},clearTmpEvents:function(){this.tmpEvents.forEach(function(e){e.un()})},empty:function(){this.backend.isPaused()||(this.stop(),this.backend.disconnectSource()),this.clearTmpEvents(),this.drawer.progress(0),this.drawer.setWidth(0),this.drawer.drawPeaks({length:this.drawer.getWidth()},0)},destroy:function(){this.fireEvent("destroy"),this.clearTmpEvents(),this.unAll(),this.backend.destroy(),this.drawer.destroy()},create:function(e){var n=Object.create(t);return n.init(e),n}};return t.util={extend:function(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){Object.keys(t).forEach(function(n){e[n]=t[n]})}),e},getId:function(){return"wavesurfer_"+Math.random().toString(32).substring(2)},ajax:function(e){var n=Object.create(t.Observer),i=new XMLHttpRequest,r=!1;return i.open(e.method||"GET",e.url,!0),i.responseType=e.responseType||"json",i.addEventListener("progress",function(e){n.fireEvent("progress",e),e.lengthComputable&&e.loaded==e.total&&(r=!0)}),i.addEventListener("load",function(e){r||n.fireEvent("progress",e),n.fireEvent("load",e),200==i.status||206==i.status?n.fireEvent("success",i.response,e):n.fireEvent("error",e)}),i.addEventListener("error",function(e){n.fireEvent("error",e)}),i.send(),n.xhr=i,n}},t.Observer={on:function(e,t){this.handlers||(this.handlers={});var n=this.handlers[e];return n||(n=this.handlers[e]=[]),n.push(t),{name:e,callback:t,un:this.un.bind(this,e,t)}},un:function(e,t){if(this.handlers){var n=this.handlers[e];if(n)if(t)for(var i=n.length-1;i>=0;i--)n[i]==t&&n.splice(i,1);else n.length=0}},unAll:function(){this.handlers=null},once:function(e,t){var n=this,i=function(){t.apply(this,arguments),setTimeout(function(){n.un(e,i)},0)};return this.on(e,i)},fireEvent:function(e){if(this.handlers){var t=this.handlers[e],n=Array.prototype.slice.call(arguments,1);t&&t.forEach(function(e){e.apply(null,n)})}}},t.util.extend(t,t.Observer),t.WebAudio={scriptBufferSize:256,PLAYING_STATE:0,PAUSED_STATE:1,FINISHED_STATE:2,supportsWebAudio:function(){return!(!window.AudioContext&&!window.webkitAudioContext)},getAudioContext:function(){return t.WebAudio.audioContext||(t.WebAudio.audioContext=new(window.AudioContext||window.webkitAudioContext)),t.WebAudio.audioContext},getOfflineAudioContext:function(e){return t.WebAudio.offlineAudioContext||(t.WebAudio.offlineAudioContext=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,2,e)),t.WebAudio.offlineAudioContext},init:function(e){this.params=e,this.ac=e.audioContext||this.getAudioContext(),this.lastPlay=this.ac.currentTime,this.startPosition=0,this.scheduledPause=null,this.states=[Object.create(t.WebAudio.state.playing),Object.create(t.WebAudio.state.paused),Object.create(t.WebAudio.state.finished)],this.createVolumeNode(),this.createScriptNode(),this.createAnalyserNode(),this.setState(this.PAUSED_STATE),this.setPlaybackRate(this.params.audioRate)},disconnectFilters:function(){this.filters&&(this.filters.forEach(function(e){e&&e.disconnect()}),this.filters=null,this.analyser.connect(this.gainNode))},setState:function(e){this.state!==this.states[e]&&(this.state=this.states[e],this.state.init.call(this))},setFilter:function(){this.setFilters([].slice.call(arguments))},setFilters:function(e){this.disconnectFilters(),e&&e.length&&(this.filters=e,this.analyser.disconnect(),e.reduce(function(e,t){return e.connect(t),t},this.analyser).connect(this.gainNode))},createScriptNode:function(){this.ac.createScriptProcessor?this.scriptNode=this.ac.createScriptProcessor(this.scriptBufferSize):this.scriptNode=this.ac.createJavaScriptNode(this.scriptBufferSize),this.scriptNode.connect(this.ac.destination)},addOnAudioProcess:function(){var e=this;this.scriptNode.onaudioprocess=function(){var t=e.getCurrentTime();t>=e.getDuration()?(e.setState(e.FINISHED_STATE),e.fireEvent("pause")):t>=e.scheduledPause?(e.setState(e.PAUSED_STATE),e.fireEvent("pause")):e.state===e.states[e.PLAYING_STATE]&&e.fireEvent("audioprocess",t)}},removeOnAudioProcess:function(){this.scriptNode.onaudioprocess=null},createAnalyserNode:function(){this.analyser=this.ac.createAnalyser(),this.analyser.connect(this.gainNode)},createVolumeNode:function(){this.ac.createGain?this.gainNode=this.ac.createGain():this.gainNode=this.ac.createGainNode(),this.gainNode.connect(this.ac.destination)},setVolume:function(e){this.gainNode.gain.value=e},getVolume:function(){return this.gainNode.gain.value},decodeArrayBuffer:function(e,t,n){this.offlineAc||(this.offlineAc=this.getOfflineAudioContext(this.ac?this.ac.sampleRate:44100)),this.offlineAc.decodeAudioData(e,function(e){t(e)}.bind(this),n)},getPeaks:function(e){for(var t=this.buffer.length/e,n=~~(t/10)||1,i=this.buffer.numberOfChannels,r=[],o=[],a=0;i>a;a++)for(var s=r[a]=[],c=this.buffer.getChannelData(a),l=0;e>l;l++){for(var u=~~(l*t),d=~~(u+t),p=c[0],f=c[0],h=u;d>h;h+=n){var g=c[h];g>f&&(f=g),p>g&&(p=g)}s[2*l]=f,s[2*l+1]=p,(0==a||f>o[2*l])&&(o[2*l]=f),(0==a||p<o[2*l+1])&&(o[2*l+1]=p)}return this.params.splitChannels?r:o},getPlayedPercents:function(){return this.state.getPlayedPercents.call(this)},disconnectSource:function(){this.source&&this.source.disconnect()},destroy:function(){this.isPaused()||this.pause(),this.unAll(),this.buffer=null,this.disconnectFilters(),this.disconnectSource(),this.gainNode.disconnect(),this.scriptNode.disconnect(),this.analyser.disconnect()},load:function(e){this.startPosition=0,this.lastPlay=this.ac.currentTime,this.buffer=e,this.createSource()},createSource:function(){this.disconnectSource(),this.source=this.ac.createBufferSource(),this.source.start=this.source.start||this.source.noteGrainOn,this.source.stop=this.source.stop||this.source.noteOff,this.source.playbackRate.value=this.playbackRate,this.source.buffer=this.buffer,this.source.connect(this.analyser)},isPaused:function(){return this.state!==this.states[this.PLAYING_STATE]},getDuration:function(){return this.buffer?this.buffer.duration:0},seekTo:function(e,t){return this.scheduledPause=null,null==e&&(e=this.getCurrentTime())>=this.getDuration()&&(e=0),null==t&&(t=this.getDuration()),this.startPosition=e,this.lastPlay=this.ac.currentTime,this.state===this.states[this.FINISHED_STATE]&&this.setState(this.PAUSED_STATE),{start:e,end:t}},getPlayedTime:function(){return(this.ac.currentTime-this.lastPlay)*this.playbackRate},play:function(e,t){this.createSource();var n=this.seekTo(e,t);e=n.start,t=n.end,this.scheduledPause=t,this.source.start(0,e,t-e),this.setState(this.PLAYING_STATE),this.fireEvent("play")},pause:function(){this.scheduledPause=null,this.startPosition+=this.getPlayedTime(),this.source&&this.source.stop(0),this.setState(this.PAUSED_STATE),this.fireEvent("pause")},getCurrentTime:function(){return this.state.getCurrentTime.call(this)},setPlaybackRate:function(e){e=e||1,this.isPaused()?this.playbackRate=e:(this.pause(),this.playbackRate=e,this.play())}},t.WebAudio.state={},t.WebAudio.state.playing={init:function(){this.addOnAudioProcess()},getPlayedPercents:function(){var e=this.getDuration();return this.getCurrentTime()/e||0},getCurrentTime:function(){return this.startPosition+this.getPlayedTime()}},t.WebAudio.state.paused={init:function(){this.removeOnAudioProcess()},getPlayedPercents:function(){var e=this.getDuration();return this.getCurrentTime()/e||0},getCurrentTime:function(){return this.startPosition}},t.WebAudio.state.finished={init:function(){this.removeOnAudioProcess(),this.fireEvent("finish")},getPlayedPercents:function(){return 1},getCurrentTime:function(){return this.getDuration()}},t.util.extend(t.WebAudio,t.Observer),t.MediaElement=Object.create(t.WebAudio),t.util.extend(t.MediaElement,{init:function(e){this.params=e,this.media={currentTime:0,duration:0,paused:!0,playbackRate:1,play:function(){},pause:function(){}},this.mediaType=e.mediaType.toLowerCase(),this.elementPosition=e.elementPosition,this.setPlaybackRate(this.params.audioRate)},load:function(e,t,n){var i=this,r=document.createElement(this.mediaType);r.controls=this.params.mediaControls,r.autoplay=this.params.autoplay||!1,r.preload="auto",r.src=e,r.style.width="100%",r.addEventListener("error",function(){i.fireEvent("error","Error loading media element")}),r.addEventListener("canplay",function(){i.fireEvent("canplay")}),r.addEventListener("ended",function(){i.fireEvent("finish")}),r.addEventListener("timeupdate",function(){i.fireEvent("audioprocess",i.getCurrentTime())});var o=t.querySelector(this.mediaType);o&&t.removeChild(o),t.appendChild(r),this.media=r,this.peaks=n,this.onPlayEnd=null,this.buffer=null,this.setPlaybackRate(this.playbackRate)},isPaused:function(){return!this.media||this.media.paused},getDuration:function(){var e=this.media.duration;return e>=1/0&&(e=this.media.seekable.end()),e},getCurrentTime:function(){return this.media&&this.media.currentTime},getPlayedPercents:function(){return this.getCurrentTime()/this.getDuration()||0},setPlaybackRate:function(e){this.playbackRate=e||1,this.media.playbackRate=this.playbackRate},seekTo:function(e){null!=e&&(this.media.currentTime=e),this.clearPlayEnd()},play:function(e,t){this.seekTo(e),this.media.play(),t&&this.setPlayEnd(t),this.fireEvent("play")},pause:function(){this.media&&this.media.pause(),this.clearPlayEnd(),this.fireEvent("pause")},setPlayEnd:function(e){var t=this;this.onPlayEnd=function(n){n>=e&&(t.pause(),t.seekTo(e))},this.on("audioprocess",this.onPlayEnd)},clearPlayEnd:function(){this.onPlayEnd&&(this.un("audioprocess",this.onPlayEnd),this.onPlayEnd=null)},getPeaks:function(e){return this.buffer?t.WebAudio.getPeaks.call(this,e):this.peaks||[]},getVolume:function(){return this.media.volume},setVolume:function(e){this.media.volume=e},destroy:function(){this.pause(),this.unAll(),this.media&&this.media.parentNode&&this.media.parentNode.removeChild(this.media),this.media=null}}),t.AudioElement=t.MediaElement,t.Drawer={init:function(e,t){this.container=e,this.params=t,this.width=0,this.height=t.height*this.params.pixelRatio,this.lastPos=0,this.createWrapper(),this.createElements()},createWrapper:function(){this.wrapper=this.container.appendChild(document.createElement("wave")),this.style(this.wrapper,{display:"block",position:"relative",userSelect:"none",webkitUserSelect:"none",height:this.params.height+"px"}),(this.params.fillParent||this.params.scrollParent)&&this.style(this.wrapper,{width:"100%",overflowX:this.params.hideScrollbar?"hidden":"auto",overflowY:"hidden"}),this.setupWrapperEvents()},handleEvent:function(e){e.preventDefault();var t=this.wrapper.getBoundingClientRect();return(e.clientX-t.left+this.wrapper.scrollLeft)/this.wrapper.scrollWidth||0},setupWrapperEvents:function(){var e=this;this.wrapper.addEventListener("click",function(t){var n=e.wrapper.offsetHeight-e.wrapper.clientHeight;if(0!=n){var i=e.wrapper.getBoundingClientRect();if(t.clientY>=i.bottom-n)return}e.params.interact&&e.fireEvent("click",t,e.handleEvent(t))}),this.wrapper.addEventListener("scroll",function(t){e.fireEvent("scroll",t)})},drawPeaks:function(e,t){this.resetScroll(),this.setWidth(t),this.params.barWidth?this.drawBars(e):this.drawWave(e)},style:function(e,t){return Object.keys(t).forEach(function(n){e.style[n]!==t[n]&&(e.style[n]=t[n])}),e},resetScroll:function(){null!==this.wrapper&&(this.wrapper.scrollLeft=0)},recenter:function(e){var t=this.wrapper.scrollWidth*e;this.recenterOnPosition(t,!0)},recenterOnPosition:function(e,t){var n=this.wrapper.scrollLeft,i=~~(this.wrapper.clientWidth/2),r=e-i,o=r-n,a=this.wrapper.scrollWidth-this.wrapper.clientWidth;0!=a&&(!t&&o>=-i&&i>o&&(r=n+(o=Math.max(-5,Math.min(5,o)))),(r=Math.max(0,Math.min(a,r)))!=n&&(this.wrapper.scrollLeft=r))},getWidth:function(){return Math.round(this.container.clientWidth*this.params.pixelRatio)},setWidth:function(e){e!=this.width&&(this.width=e,this.params.fillParent||this.params.scrollParent?this.style(this.wrapper,{width:""}):this.style(this.wrapper,{width:~~(this.width/this.params.pixelRatio)+"px"}),this.updateSize())},setHeight:function(e){e!=this.height&&(this.height=e,this.style(this.wrapper,{height:~~(this.height/this.params.pixelRatio)+"px"}),this.updateSize())},progress:function(e){var t=1/this.params.pixelRatio,n=Math.round(e*this.width)*t;if(n<this.lastPos||n-this.lastPos>=t){if(this.lastPos=n,this.params.scrollParent&&this.params.autoCenter){var i=~~(this.wrapper.scrollWidth*e);this.recenterOnPosition(i)}this.updateProgress(e)}},destroy:function(){this.unAll(),this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=null)},createElements:function(){},updateSize:function(){},drawWave:function(e,t){},clearWave:function(){},updateProgress:function(e){}},t.util.extend(t.Drawer,t.Observer),t.Drawer.Canvas=Object.create(t.Drawer),t.util.extend(t.Drawer.Canvas,{createElements:function(){var e=this.wrapper.appendChild(this.style(document.createElement("canvas"),{position:"absolute",zIndex:1,left:0,top:0,bottom:0}));if(this.waveCc=e.getContext("2d"),this.progressWave=this.wrapper.appendChild(this.style(document.createElement("wave"),{position:"absolute",zIndex:2,left:0,top:0,bottom:0,overflow:"hidden",width:"0",display:"none",boxSizing:"border-box",borderRightStyle:"solid",borderRightWidth:this.params.cursorWidth+"px",borderRightColor:this.params.cursorColor})),this.params.waveColor!=this.params.progressColor){var t=this.progressWave.appendChild(document.createElement("canvas"));this.progressCc=t.getContext("2d")}},updateSize:function(){var e=Math.round(this.width/this.params.pixelRatio);this.waveCc.canvas.width=this.width,this.waveCc.canvas.height=this.height,this.style(this.waveCc.canvas,{width:e+"px"}),this.style(this.progressWave,{display:"block"}),this.progressCc&&(this.progressCc.canvas.width=this.width,this.progressCc.canvas.height=this.height,this.style(this.progressCc.canvas,{width:e+"px"})),this.clearWave()},clearWave:function(){this.waveCc.clearRect(0,0,this.width,this.height),this.progressCc&&this.progressCc.clearRect(0,0,this.width,this.height)},drawBars:function(e,t){if(e[0]instanceof Array){var n=e;if(this.params.splitChannels)return this.setHeight(n.length*this.params.height*this.params.pixelRatio),void n.forEach(this.drawBars,this);e=n[0]}[].some.call(e,function(e){return 0>e})&&(e=[].filter.call(e,function(e,t){return t%2==0}));var i=.5/this.params.pixelRatio,r=this.width,o=this.params.height*this.params.pixelRatio,a=o*t||0,s=o/2,c=e.length,l=this.params.barWidth*this.params.pixelRatio,u=Math.max(this.params.pixelRatio,~~(l/2)),d=l+u,p=1;this.params.normalize&&(p=Math.max.apply(Math,e));var f=c/r;this.waveCc.fillStyle=this.params.waveColor,this.progressCc&&(this.progressCc.fillStyle=this.params.progressColor),[this.waveCc,this.progressCc].forEach(function(t){if(t)for(var n=0;r>n;n+=d){var o=Math.round(e[Math.floor(n*f)]/p*s);t.fillRect(n+i,s-o+a,l+i,2*o)}},this)},drawWave:function(e,t){if(e[0]instanceof Array){var n=e;if(this.params.splitChannels)return this.setHeight(n.length*this.params.height*this.params.pixelRatio),void n.forEach(this.drawWave,this);e=n[0]}if(![].some.call(e,function(e){return 0>e})){for(var i=[],r=0,o=e.length;o>r;r++)i[2*r]=e[r],i[2*r+1]=-e[r];e=i}var a=.5/this.params.pixelRatio,s=this.params.height*this.params.pixelRatio,c=s*t||0,l=s/2,u=~~(e.length/2),d=1;this.params.fillParent&&this.width!=u&&(d=this.width/u);var p=1;if(this.params.normalize){var f=Math.max.apply(Math,e),h=Math.min.apply(Math,e);p=-h>f?-h:f}this.waveCc.fillStyle=this.params.waveColor,this.progressCc&&(this.progressCc.fillStyle=this.params.progressColor),[this.waveCc,this.progressCc].forEach(function(t){if(t){t.beginPath(),t.moveTo(a,l+c);for(var n=0;u>n;n++){var i=Math.round(e[2*n]/p*l);t.lineTo(n*d+a,l-i+c)}for(n=u-1;n>=0;n--){i=Math.round(e[2*n+1]/p*l);t.lineTo(n*d+a,l-i+c)}t.closePath(),t.fill(),t.fillRect(0,l+c-a,this.width,a)}},this)},updateProgress:function(e){var t=Math.round(this.width*e)/this.params.pixelRatio;this.style(this.progressWave,{width:t+"px"})}}),e=function(){var e=document.querySelectorAll("wavesurfer");Array.prototype.forEach.call(e,function(e){var n=t.util.extend({container:e,backend:"MediaElement",mediaControls:!0},e.dataset);e.style.display="block";var i=t.create(n);if(e.dataset.peaks)var r=JSON.parse(e.dataset.peaks);i.load(e.dataset.url,r)})},"complete"===document.readyState?e():window.addEventListener("load",e),t}()}.apply(t,r=[]))||(e.exports=o),function(){"use strict";var e,t,n,i;window.cancelAnimationFrame=window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame,window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,angular.module("angularAudioRecorder",["angularAudioRecorder.config","angularAudioRecorder.services","angularAudioRecorder.controllers","angularAudioRecorder.directives"]),angular.module("angularAudioRecorder.config",[]).constant("recorderScriptUrl",(e=document.getElementsByTagName("script"),t=e[e.length-1].getAttribute("src"),n=t.substr(0,t.lastIndexOf("/")+1),i=document.createElement("a"),i.href=n,i.href)).constant("recorderPlaybackStatus",{STOPPED:0,PLAYING:1,PAUSED:2}),angular.module("angularAudioRecorder.controllers",["angularAudioRecorder.config","angularAudioRecorder.services"]);var r=function(e,t,n,i,r,o,a){var s=function(e){var t=i.$root.$$phase;if("$apply"!==t&&"$digest"!==t)return i.$apply(e)},c=this,l={recorder:null,url:null,player:null},u=null,d="recorded-audio-"+c.id,p={isRecording:!1,playback:a.STOPPED,isDenied:null,isSwfLoaded:null,isConverting:!1,get isPlaying(){return p.playback===a.PLAYING},get isStopped(){return p.playback===a.STOPPED},get isPaused(){return p.playback===a.PAUSED}},f=angular.isDefined(c.convertMp3)?!!c.convertMp3:t.shouldConvertToMp3(),h=f?new MP3Converter(t.getMp3Config()):null;c.timeLimit=c.timeLimit||0,c.status=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&Object.defineProperty(t,n,{get:function(t){var i=n;return function(){return e[i]}}(),enumerable:!0,configurable:!0});return t}(p),c.isAvailable=t.isAvailable(),c.elapsedTime=0,c.id||(c.id=n.generateUuid(),e.attr("id",c.id)),t.isHtml5||t.isCordova||(p.isSwfLoaded=t.swfIsLoaded(),i.$watch(function(){return t.swfIsLoaded()},function(e){p.isSwfLoaded=e})),t.setController(c.id,this);var g=function(){p.playback=a.STOPPED,c.onPlaybackComplete(),s()},v=function(){p.playback=a.PAUSED,c.onPlaybackPause()},m=function(){p.playback=a.PLAYING,c.onPlaybackStart()},$=function(){p.playback=a.PLAYING,c.onPlaybackResume()},y=function(t){if(null==document.getElementById(d)){e.append('<audio type="audio/mp3" id="'+d+'"></audio>');var n=document.getElementById(d);c.showPlayer&&n.setAttribute("controls",""),n.addEventListener("ended",g),n.addEventListener("pause",function(e){this.duration!==this.currentTime&&(v(),s())}),n.addEventListener("playing",function(e){p.isPaused?$():m(),s()})}t?function(e,t){var n=new FileReader;n.onload=function(e){!function(e){document.getElementById(d).src=e}(e.target.result)},n.readAsDataURL(e)}(t):document.getElementById(d).removeAttribute("src")};c.getAudioPlayer=function(){return t.isCordova?l.player:document.getElementById(d)},c.startRecord=function(){if(t.isAvailable()){p.isPlaying&&(c.playbackPause(),p.playback=a.STOPPED),c.audioModel=null;var e=c.id,r=t.getHandler(),d=function(){if(t.isCordova)l.url=n.cordovaAudioUrl(c.id),l.recorder=new Media(l.url,function(){console.log("Media successfully played")},function(e){console.log("Media could not be launched"+e.code,e)}),console.log("CordovaRecording"),l.recorder.startRecord();else if(t.isHtml5){if(!r)return;console.log("HTML5Recording"),r.clear(),r.record()}else{if(!t.isReady)return;console.log("FlashRecording"),r.record(e,"audio.wav")}p.isRecording=!0,c.onRecordStart(),c.elapsedTime=0,u=o(function(){++c.elapsedTime,c.timeLimit&&c.timeLimit>0&&c.elapsedTime>=c.timeLimit&&c.stopRecord()},1e3)};t.isCordova||r?d():p.isDenied||t.showPermission({onDenied:function(){p.isDenied=!0,i.$apply()},onAllowed:function(){p.isDenied=!1,r=t.getHandler(),d(),s()}})}},c.stopRecord=function(){var e=c.id;if(!t.isAvailable()||!p.isRecording)return!1;var n=t.getHandler(),i=function(e){o.cancel(u),p.isRecording=!1;var t,n,i=function(e){c.audioModel=e,y(e)};f?(t=e,n=i,h&&(p.isConverting=!0,h.convert(t,function(e){p.isConverting=!1,n&&n(e),s(c.onConversionComplete)},function(){p.isConverting=!1}),c.onConversionStart())):i(e),y(null),c.onRecordComplete()};t.isCordova?(l.recorder.stopRecord(),window.resolveLocalFileSystemURL(l.url,function(e){e.file(function(e){i(e)})},function(e){console.log("Could not retrieve file, error code:",e.code)})):t.isHtml5?(n.stop(),n.getBuffer(function(){n.exportWAV(function(e){i(e),s()})})):(n.stopRecording(e),i(n.getBlob(e)))},c.playbackRecording=function(){if(p.isPlaying||!t.isAvailable()||p.isRecording||!c.audioModel)return!1;t.isCordova?(l.player=new Media(l.url,g,function(){console.log("Playback failed")}),l.player.play(),m()):c.getAudioPlayer().play()},c.playbackPause=function(){if(!p.isPlaying||!t.isAvailable()||p.isRecording||!c.audioModel)return!1;c.getAudioPlayer().pause(),t.isCordova&&v()},c.playbackResume=function(){if(p.isPlaying||!t.isAvailable()||p.isRecording||!c.audioModel)return!1;p.isPaused?(c.getAudioPlayer().play(),t.isCordova&&$()):c.playbackRecording()},c.save=function(e){if(!t.isAvailable()||p.isRecording||!c.audioModel)return!1;e||(e="audio_recording_"+c.id+(c.audioModel.type.indexOf("mp3")>-1?"mp3":"wav"));var n=window.URL.createObjectURL(c.audioModel),i=document.createElement("a");i.href=n,i.target="_blank",i.download=e;var r=document.createEvent("Event");r.initEvent("click",!0,!0),i.dispatchEvent(r)},c.isHtml5=function(){return t.isHtml5},c.autoStart&&r(function(){c.startRecord()},1e3),e.on("$destroy",function(){o.cancel(u)})};r.$inject=["$element","recorderService","recorderUtils","$scope","$timeout","$interval","recorderPlaybackStatus"],angular.module("angularAudioRecorder.controllers").controller("recorderController",r),angular.module("angularAudioRecorder.directives",["angularAudioRecorder.config","angularAudioRecorder.services","angularAudioRecorder.controllers"]),angular.module("angularAudioRecorder.directives").directive("ngAudioRecorderAnalyzer",["recorderService","recorderUtils",function(e,t){return{restrict:"E",require:"^ngAudioRecorder",template:'<div ng-if="!hide" class="audioRecorder-analyzer"><canvas class="analyzer" width="1200" height="400" style="max-width: 100%;"></canvas></div>',link:function(n,i,r,o){if(e.isHtml5){var a,s,c,l,u,d=e.$html5AudioProps;i.on("$destroy",function(){f()}),o.onRecordStart=(u=o.onRecordStart,function(){u.apply(),p()}),t.appendActionToCallback(o,"onRecordStart",p,"analyzer"),t.appendActionToCallback(o,"onRecordComplete",f,"analyzer")}else n.hide=!0;function p(e){if(!l){var t=i.find("canvas")[0];r.width&&!isNaN(r.width)&&(t.width=r.width),r.height&&!isNaN(r.height)&&(t.height=parseInt(r.height)),a=t.width,s=t.height,l=t.getContext("2d")}var n=Math.round(a/3),o=new Uint8Array(d.analyserNode.frequencyBinCount);d.analyserNode.getByteFrequencyData(o),l.clearRect(0,0,a,s),l.lineCap="round";for(var u=d.analyserNode.frequencyBinCount/n,f=0;f<n;++f){for(var h=0,g=Math.floor(f*u),v=0;v<u;v++)h+=o[g+v];h/=u,o[f*u],r.waveColor?l.fillStyle=r.waveColor:l.fillStyle="hsl( "+Math.round(360*f/n)+", 100%, 50%)",l.fillRect(3*f,s,1,-h)}c=window.requestAnimationFrame(p)}function f(){window.cancelAnimationFrame(c),c=null}}}}]),angular.module("angularAudioRecorder.directives").directive("ngAudioRecorderWaveView",["recorderService","recorderUtils","$log",function(e,t,n){return{restrict:"E",require:"^ngAudioRecorder",link:function(e,i,r,o){if(window.WaveSurfer){var a;i.html('<div class="waveSurfer"></div>');var s=angular.extend({container:i.find("div")[0]},r),c=WaveSurfer.create(s);c.setVolume(0),t.appendActionToCallback(o,"onPlaybackStart|onPlaybackResume",function(){c.play()},"waveView"),t.appendActionToCallback(o,"onPlaybackComplete|onPlaybackPause",function(){c.pause()},"waveView"),t.appendActionToCallback(o,"onRecordComplete",function(){a||(a=o.getAudioPlayer()).addEventListener("seeking",function(e){var t=a.currentTime/a.duration;c.seekTo(t)})},"waveView"),e.$watch(function(){return o.audioModel},function(e){e instanceof Blob&&c.loadBlob(e)})}else n.warn("WaveSurfer was found.")}}}]),angular.module("angularAudioRecorder.directives").directive("ngAudioRecorder",["recorderService","$timeout",function(e,t){return{restrict:"EA",scope:{audioModel:"=",id:"@",onRecordStart:"&",onRecordComplete:"&",onPlaybackComplete:"&",onPlaybackStart:"&",onPlaybackPause:"&",onPlaybackResume:"&",onConversionStart:"&",onConversionComplete:"&",showPlayer:"=?",autoStart:"=?",convertMp3:"=?",timeLimit:"=?"},controllerAs:"recorder",bindToController:!0,template:function(e,t){return'<div class="audioRecorder"><div style="width: 250px; margin: 0 auto;"><div id="audioRecorder-fwrecorder"></div></div>'+e.html()+"</div>"},controller:"recorderController",link:function(n,i,r){t(function(){!e.isAvailable||e.isHtml5||e.isCordova||swfobject.embedSWF(e.getSwfUrl(),"audioRecorder-fwrecorder","0","0","11.0.0","",{save_text:""},{allowscriptaccess:"always"},{id:"recorder-app",name:"recorder-app"})},100)}}}]),angular.module("angularAudioRecorder.services",["angularAudioRecorder.config"]),angular.module("angularAudioRecorder.services").provider("recorderService",["recorderScriptUrl",function(e){var t=null,n={isHtml5:!1,isReady:!1},i={onDenied:null,onClosed:null,onAllow:null},r=!1,o=e+"../lib/recorder.swf",a=!1,s={bitRate:92,lameJsUrl:e+"../lib/lame.min.js"},c={isAvailable:!1,loaded:!1,configureMic:function(){FWRecorder.isReady&&(FWRecorder.configure(44,100,0,2e3),FWRecorder.setUseEchoSuppression(!1),FWRecorder.setLoopBack(!1))},allowed:!1,externalEvents:function(e){switch(arguments[1],arguments[0]){case"ready":parseInt(arguments[1]),parseInt(arguments[2]),FWRecorder.connect("recorder-app",0),FWRecorder.recorderOriginalWidth=1,FWRecorder.recorderOriginalHeight=1,c.loaded=!0;break;case"microphone_user_request":FWRecorder.showPermissionWindow({permanent:!0});break;case"microphone_connected":console.log("Permission to use MIC granted"),c.allowed=!0;break;case"microphone_not_connected":console.log("Permission to use MIC denied"),c.allowed=!1;break;case"permission_panel_closed":c.allowed?c.setAllowed():c.setDeclined(),FWRecorder.defaultSize(),angular.isFunction(i.onClosed)&&i.onClosed();break;case"recording":case"recording_stopped":FWRecorder.hide();break;case"playing":break;case"playback_started":arguments[2];break;case"save_pressed":FWRecorder.updateForm();break;case"saving":break;case"saved":$.parseJSON(arguments[2]).saved;break;case"save_failed":arguments[2];break;case"save_progress":arguments[2],arguments[3]}},isInstalled:function(){return swfobject.getFlashPlayerVersion().major>0},init:function(){n.isHtml5=!1,c.isInstalled()?(c.isAvailable=!0,window.fwr_event_handler=c.externalEvents,window.configureMicrophone=c.configureMic):console.log("Flash is not installed, application cannot be initialized")},setAllowed:function(){n.isReady=!0,t=FWRecorder,angular.isFunction(i.onAllowed)&&i.onAllowed()},setDeclined:function(){n.isReady=!1,t=null,angular.isFunction(i.onDenied)&&i.onDenied()},getPermission:function(){c.isAvailable&&(FWRecorder.isMicrophoneAccessible()?(c.allowed=!0,setTimeout(function(){c.setAllowed()},100)):FWRecorder.showPermissionWindow({permanent:!0}))}},l={audioContext:null,inputPoint:null,audioInput:null,audioRecorder:null,analyserNode:null},u={gotStream:function(e){var r=l.audioContext;l.audioInput=r.createMediaStreamSource(e),l.audioInput.connect(l.inputPoint=r.createGain()),l.analyserNode=r.createAnalyser(),l.analyserNode.fftSize=2048,l.inputPoint.connect(l.analyserNode),l.audioRecorder=new Recorder(l.audioInput);var o=r.createGain();o.gain.value=0,l.inputPoint.connect(o),o.connect(r.destination),n.isReady=!0,t=l.audioRecorder,angular.isFunction(i.onAllowed)&&("https:"==window.location.protocol&&localStorage.setItem("permission","given"),i.onAllowed())},failStream:function(e){angular.isDefined(i.onDenied)&&i.onDenied()},getPermission:function(){navigator.getUserMedia({audio:!0},u.gotStream,u.failStream)},init:function(){n.isHtml5=!0;var e=window.AudioContext||window.webkitAudioContext;e&&!l.audioContext&&(l.audioContext=new e),null!==localStorage.getItem("permission")&&u.getPermission()}};navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia,n.isCordova=!1;var d={};n.controller=function(e){return d[e]},n.getSwfUrl=function(){return o},n.setController=function(e,t){d[e]=t},n.isAvailable=function(){if(n.isCordova){if(!("Media"in window))throw new Error('The Media plugin for cordova is required for this library, add plugin using "cordova plugin add cordova-plugin-media"');return!0}return n.isHtml5||c.isInstalled()},n.getHandler=function(){return t},n.showPermission=function(e){n.isAvailable()?(e&&angular.extend(i,e),n.isHtml5?u.getPermission():c.getPermission()):console.warn("Neither HTML5 nor SWF is supported.")},n.swfIsLoaded=function(){return c.loaded},n.shouldConvertToMp3=function(){return a},n.getMp3Config=function(){return s},n.$html5AudioProps=l;var p={$get:["recorderUtils",function(e){return"cordova"in window?n.isCordova=!0:!r&&navigator.getUserMedia?u.init():c.init(),n}],forceSwf:function(e){return r=e,p},setSwfUrl:function(e){return o=e,p},withMp3Conversion:function(e,t){return a=!!e,s=angular.extend(s,t||{}),p}};return p}]),angular.module("angularAudioRecorder.services").factory("recorderUtils",[function(){return{generateUuid:function(){function e(e){var t=(Math.random().toString(16)+"000000000").substr(2,8);return e?"-"+t.substr(0,4)+"-"+t.substr(4,4):t}return e()+e(!0)+e(!0)+e()},cordovaAudioUrl:function(e){if(!window.cordova)return"record-audio"+e+".wav";var t=cordova.file.tempDirectory||cordova.file.externalApplicationStorageDirectory||cordova.file.sharedDirectory;switch(t+=Date.now()+"_recordedAudio_"+e.replace("/[^A-Za-z0-9_-]+/gi","-"),window.cordova.platformId){case"ios":t+=".wav";break;case"android":t+=".amr";break;case"wp":t+=".wma";break;default:t+=".mp3"}return t},appendActionToCallback:function(e,t,n,i){t.split(/\|/).forEach(function(t){if(!(angular.isObject(e)&&angular.isFunction(n)&&t in e&&angular.isFunction(e[t])))throw new Error("One or more parameter supplied is not valid");"$$appendTrackers"in e||(e.$$appendTrackers=[]);var r,o=t+"|"+i;e.$$appendTrackers.indexOf(o)>-1?console.log("Already appended: ",o):(e[t]=(r=e[t],function(){r.apply(e,arguments),n.apply(e,arguments)}),e.$$appendTrackers.push(o))})}}}])}(),function(e){"use strict";var t;t={recorder:null,recorderOriginalWidth:0,recorderOriginalHeight:0,uploadFormId:null,uploadFieldName:null,isReady:!1,connect:function(e,n){if(-1!=navigator.appName.indexOf("Microsoft")?t.recorder=window[e]:t.recorder=document[e],!(n>=40))if(t.recorder&&t.recorder.init){if(t.recorderOriginalWidth=t.recorder.width,t.recorderOriginalHeight=t.recorder.height,t.uploadFormId&&$){var i=$(t.uploadFormId);t.recorder.init(i.attr("action").toString(),t.uploadFieldName,i.serializeArray())}}else setTimeout(function(){t.connect(e,n+1)},100)},playBack:function(e){t.recorder.playBack(e)},pausePlayBack:function(e){t.recorder.pausePlayBack(e)},playBackFrom:function(e,n){t.recorder.playBackFrom(e,n)},record:function(e,n){t.recorder.record(e,n)},stopRecording:function(){t.recorder.stopRecording()},stopPlayBack:function(){t.recorder.stopPlayBack()},observeLevel:function(){t.recorder.observeLevel()},stopObservingLevel:function(){t.recorder.stopObservingLevel()},observeSamples:function(){t.recorder.observeSamples()},stopObservingSamples:function(){t.reco