{"version":3,"file":"poodll_minimalmediaskin.min.js","sources":["../src/poodll_minimalmediaskin.js"],"sourcesContent":["/* jshint ignore:start */\ndefine(['jquery',  'core/log', 'filter_poodll/utils_amd', 'filter_poodll/upskin_cssradial',\n    'filter_poodll/speech_poodll', 'filter_poodll/dlg_devicesettings', 'filter_poodll/audioplayer_minimal'],\n    function ($, log, utils, upskin, speechrecognition, settings,audioplayer_minimal) {\n\n    \"use strict\"; // jshint ;_;\n\n    log.debug('PoodLL Minimal Skin: initialising');\n\n    return {\n\n        instanceprops: null,\n        pmr: null,\n        devsettings: null,\n        currentvisualmode: '',\n\n\n        //for making multiple instances\n        clone: function () {\n            return $.extend(true, {}, this);\n        },\n\n        init: function (ip, pmr) {\n            this.instanceprops = ip;\n            this.pmr = pmr;\n            this.devsettings = settings.clone();\n            this.devsettings.init(pmr, ip);\n        },\n\n\n        fetch_instanceprops: function () {\n            return this.instanceprops;\n        },\n\n\n        onUploadSuccess: function (controlbarid) {\n            //playback mode\n            this.set_visual_mode('playbackmode', controlbarid);\n            log.debug('now playback mode');\n        },\n\n        onUploadFailure: function (controlbarid) {\n            return;\n        },\n\n        fetch_status_bar: function (skin) {\n            var status = '<div class=\"poodll_status_' + skin + '\" width=\"320\" height=\"50\">00:00:00</div>';\n            return status;\n        },\n\n        fetch_preview_audio: function (skin) {\n            var preview = '<audio class=\"poodll_preview_' + skin + ' hide\" playsinline=\"playsinline\" ></audio>';\n            return preview;\n        },\n        fetch_preview_video: function (skin) {\n            var preview = '<video class=\"poodll_preview_' + skin + '\" width=\"320\" height=\"240\" playsinline=\"playsinline\" muted></video>';\n            return preview;\n        },\n        fetch_resource_audio: function (skin) {\n            var resourceplayer = '<audio class=\"poodll_resourceplayer_' + skin + ' hide\" playsinline=\"playsinline\"></audio>';\n            return resourceplayer;\n        },\n        fetch_resource_video: function (skin) {\n            var resourceplayer = '<video class=\"poodll_resourceplayer_' + skin + ' hide\" playsinline=\"playsinline\"></video>';\n            return resourceplayer;\n        },\n\n        fetch_uploader_skin: function (controlbarid, element) {\n            var ip = this.fetch_instanceprops();\n            var theupskin = upskin.clone();\n            theupskin.init(ip.config, element, ip.controlbar.uploadbutton);\n            return theupskin;\n        },\n\n        onMediaError: function (e) {\n            console.error('media error', e);\n        },\n\n        onMediaSuccess_video: function (controlbarid) {\n            var ip = this.fetch_instanceprops(controlbarid);\n            this.set_visual_mode('recordingmode', controlbarid);\n        },\n\n        onMediaSuccess_audio: function (controlbarid) {\n            var ip = this.fetch_instanceprops(controlbarid);\n            ip.controlbar.preview.attr('src', null);\n\n            //clear messages\n            ip.uploader.Output('');\n\n            //wave animation\n            ip.controlbar.animaton.addClass('animation_running');\n\n            //timer and status bar\n            ip.timer.reset();\n            ip.timer.start();\n            this.update_status(controlbarid);\n\n            //visuals\n            this.set_visual_mode('recordingmode', controlbarid);\n        },\n\n        handle_timer_update: function (controlbarid) {\n            var ip = this.fetch_instanceprops(controlbarid);\n            ip.controlbar.status.html(ip.timer.fetch_display_time());\n            if (ip.timer.seconds == 0 && ip.timer.initseconds > 0) {\n                ip.controlbar.stopbutton.click();\n            }\n        },\n\n        update_status: function (controlbarid) {\n            var ip = this.fetch_instanceprops(controlbarid);\n            ip.controlbar.status.html(ip.timer.fetch_display_time());\n            if(ip.config.timelimit > 0){\n                ip.controlbar.preview.data('duration', ip.config.timelimit - ip.timer.seconds);\n            }else {\n                ip.controlbar.preview.data('duration', ip.timer.seconds);\n            }\n        },\n\n        //set visuals for different states (ie recording or playing)\n        set_visual_mode: function (mode, controlbarid) {\n            var self = this;\n            var ip = this.fetch_instanceprops(controlbarid);\n\n\n            switch (mode) {\n\n                case 'startmode':\n                    self.enable_button(ip.controlbar.status);\n                    self.enable_button(ip.controlbar.startbutton);\n                    self.disable_button(ip.controlbar.playbutton);\n                    self.disable_button(ip.controlbar.stopbutton);\n                    self.disable_button(ip.controlbar.animaton);\n                    self.disable_button(ip.controlbar.restartbutton);\n                    self.disable_button(ip.controlbar.uploadbutton);\n                    ip.controlbar.playback.hide();\n                    break;\n\n\n                case 'recordingmode':\n                    self.enable_button(ip.controlbar.status);\n                    self.enable_button(ip.controlbar.stopbutton);\n                    self.enable_button(ip.controlbar.animaton);\n                    self.disable_button(ip.controlbar.startbutton);\n                    self.disable_button(ip.controlbar.playbutton);\n                    self.disable_button(ip.controlbar.restartbutton);\n                    self.disable_button(ip.controlbar.uploadbutton);\n                    ip.controlbar.playback.hide();\n\n                    break;\n\n                case 'uploadmode':\n                    self.enable_button(ip.controlbar.status);\n                    self.enable_button(ip.controlbar.uploadbutton);\n                    self.disable_button(ip.controlbar.stopbutton);\n                    self.disable_button(ip.controlbar.animaton);\n                    self.disable_button(ip.controlbar.startbutton);\n                    self.disable_button(ip.controlbar.playbutton);\n                    self.disable_button(ip.controlbar.restartbutton);\n                    ip.controlbar.playback.hide();\n\n                    break;\n\n                case 'playbackmode':\n                    self.disable_button(ip.controlbar.status);\n                    self.disable_button(ip.controlbar.uploadbutton);\n                    self.disable_button(ip.controlbar.stopbutton);\n                    self.disable_button(ip.controlbar.animaton);\n                    self.disable_button(ip.controlbar.startbutton);\n                    self.disable_button(ip.controlbar.playbutton);\n                    self.enable_button(ip.controlbar.restartbutton);\n                    ip.controlbar.playback.show();\n                    if (ip.blobs && ip.blobs.length > 0) {\n                        utils.doConcatenateBlobs(ip.blobs, function (concatenatedBlob) {\n                            var mediaurl = URL.createObjectURL(concatenatedBlob);\n                            ip.controlbar.preview.removeAttr('src');\n                            ip.controlbar.preview[0].src = mediaurl;\n                            ip.controlbar.preview[0].load();\n                        });\n                    }\n                    break;\n\n                case 'playingmode':\n\n                    self.disable_button(ip.controlbar.status);\n                    self.disable_button(ip.controlbar.stopbutton);\n                    self.disable_button(ip.controlbar.animaton);\n                    self.disable_button(ip.controlbar.startbutton);\n                    self.disable_button(ip.controlbar.playbutton);\n                    self.disable_button(ip.controlbar.restartbutton);\n                    self.disable_button(ip.controlbar.uploadbutton);\n                    ip.controlbar.playback.show();\n                    break;\n            }\n            self.currentvisualmode = mode;\n\n        },\n\n        //insert the control bar and return it to be reused\n        insert_controlbar_video: function (element, controlbarid, preview, resource) {\n            var controlbar = this.prepare_controlbar(element, controlbarid, preview, resource, 'video');\n            return controlbar;\n        },\n\n        //insert the control bar and return it to be reused\n        insert_controlbar_audio: function (element, controlbarid, preview, resource) {\n            var controlbar = this.prepare_controlbar(element, controlbarid, preview, resource, 'audio');\n            return controlbar;\n        },\n\n        //insert the control bar and return it to be reused\n        prepare_controlbar: function (element, controlbarid, preview, resource, mediatype) {\n            var ip = this.fetch_instanceprops(controlbarid);\n            var skin_style = ip.config.media_skin_style;\n\n            var recorder_class = mediatype === 'video' ? 'poodll_mediarecorder_video' : 'poodll_mediarecorder_audio';\n\n            var size_class = 'poodll_mediarecorder_size_auto';\n            switch (ip.config.size) {\n                case 'small':\n                    size_class = 'poodll_mediarecorder_size_small';\n                    break;\n                case 'big':\n                    size_class = 'poodll_mediarecorder_size_big';\n                    break;\n                case 'auto':\n                    size_class = 'poodll_mediarecorder_size_auto';\n            }\n\n            var ss = this.pmr.fetch_strings();\n\n            var controls = '<div class=\"poodll_mediarecorderholder_minimal '\n                + recorder_class + '\" id=\"holder_' + controlbarid + '\">';\n\n            controls += '<div class=\"poodll_mediarecorderbox_minimal\" id=\"' + controlbarid + '\">';\n            controls += this.devsettings.fetch_dialogue_box();\n            controls += ip.downloaddialog.fetch_dialogue_box();\n            controls += ip.errordialog.fetch_dialogue_box();\n            controls += '<div class=\"style-holder ' + skin_style + '\">';\n            var status = this.fetch_status_bar('minimal');\n            controls += status;\n            controls += preview;\n            controls += '<div class=\"settingsicon\" id=\"settingsicon_' + controlbarid + '\"><button type=\"button\" class=\"btn btn-info btn-lg\" data-toggle=\"modal\" data-target=\"#myModal\"><i class=\"fa fa-cogs\" aria-hidden=\"true\"></i></button></div>';\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_minimal poodll_mediarecorder_minimal_start_button\"></button>';\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_minimal poodll_mediarecorder_minimal_animaton\"></button>';\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_minimal poodll_mediarecorder_minimal_stop_button\"></button>';\n            controls += ' <button type=\"button\" class=\"poodll_mediarecorder_button_minimal poodll_mediarecorder_minimal_upload_button\"></button>';\n            controls += ' <button type=\"button\" class=\"poodll_mediarecorder_button_minimal poodll_mediarecorder_minimal_play_button\"><i class=\"fa fa-play\" aria-hidden=\"true\"></i></button>';\n            controls += ' <div class=\"poodll_playback_minimal\"></div>';\n            controls += '<div class=\"minimal-restart-button-wrapper\"><a class=\"poodll_restart_minimal \" ><i class=\"fa fa-repeat fa-flip-horizontal\" aria-hidden=\"true\"></i></a></div>';\n            controls += '</div></div></div>';\n\n            $(element).prepend(controls);\n            var controlbar = {\n                settingsdialog: $('#' + controlbarid + ' .poodll_dialogue_box_settings'),\n                downloaddialog: $('#' + controlbarid + ' .poodll_dialogue_box_download'),\n                errorsdialog: $('#' + controlbarid + ' .poodll_dialogue_box_errors'),\n                settingsicon: $('#' + controlbarid + ' .settingsicon'),\n                status: $('#' + controlbarid + ' .poodll_status_minimal'),\n                preview: $('#' + controlbarid + ' .poodll_preview_minimal'),\n                playback: $('#' + controlbarid + ' .poodll_playback_minimal'),\n                startbutton: $('#' + controlbarid + ' .poodll_mediarecorder_minimal_start_button'),\n                stopbutton: $('#' + controlbarid + ' .poodll_mediarecorder_minimal_stop_button'),\n                animaton: $('#' + controlbarid + ' .poodll_mediarecorder_minimal_animaton'),\n                stopplayingbutton: $('#' + controlbarid + ' .poodll_stop-playing_minimal'),\n                uploadbutton: $('#' + controlbarid + ' .poodll_mediarecorder_minimal_upload_button'),\n                playbutton: $('#' + controlbarid + ' .poodll_mediarecorder_minimal_play_button'),\n                restartbutton: $('#' + controlbarid + ' .poodll_restart_minimal')\n            };\n            //settings and error and download dialogs\n            //settings is on 'this' because it is shown from skkn events, but errors are from pmr stuff\n            ip.downloaddialog.set_dialogue_box(controlbar.downloaddialog);\n            ip.errordialog.set_dialogue_box(controlbar.errorsdialog);\n            this.devsettings.set_dialogue_box(controlbar.settingsdialog);\n\n            //set up audio player\n            var opts ={'player_element': '#' + controlbarid + ' .poodll_preview_minimal', 'autoid': controlbarid};\n            var playerhtml='<div id=\"' + controlbarid + '_fpminimal_audioplayer\" class=\"fpminimal_audioplayer\">\\n' +\n                '    <button type=\"button\" class=\"fpminimal_audioplayer_play_button\"></button>\\n' +\n                '    <div class=\"fpminimal_audioplayer_skip_buttons\">\\n' +\n                '        <button type=\"button\" class=\"fpminimal_audioplayer_skip_button_back\">15</button>\\n' +\n                '        <button type=\"button\" class=\"fpminimal_audioplayer_skip_button_forward\">15</button>\\n' +\n                '    </div>\\n' +\n                '    <div class=\"fpminimal_audioplayer_bar\">\\n' +\n                '        <div class=\"fpminimal_audioplayer_bar_behind\"></div>\\n' +\n                '        <div class=\"fpminimal_audioplayer_bar_front\"></div>\\n' +\n                '    </div>\\n' +\n                '    <div class=\"fpminimal_audioplayer_time\">00:45</div>\\n' +\n                '</div>';\n            $('#' + controlbarid + ' .poodll_playback_minimal').html(playerhtml);\n            audioplayer_minimal.init(opts);\n\n            return controlbar;\n        }, //end of fetch_control_bar_minimal\n\n\n        register_controlbar_events_video: function (onMediaSuccess, controlbarid) {\n            return this.register_controlbar_events_audio(onMediaSuccess, controlbarid);\n        },\n\n        register_controlbar_events_audio: function (onMediaSuccess, controlbarid) {\n\n            var self = this;\n            var pmr = this.pmr;\n            var ip = this.fetch_instanceprops(controlbarid);\n\n            //set visual mode\n            this.set_visual_mode('startmode', controlbarid);\n\n            //recording animation, initially marked up  but not started\n            ip.controlbar.stopbutton.addClass('poodll_mediarecorder_minimal_animation');\n\n\n            ip.controlbar.settingsicon.click(function () {\n                if (!self.uploaded) {\n                    self.devsettings.open();\n                } else {\n                    ip.downloaddialog.open();\n                }\n            });\n\n\n            //Start button click\n            ip.controlbar.startbutton.click(function () {\n                pmr.do_start_audio(ip, onMediaSuccess);\n                log.debug('starting audio recording');\n\n            });\n\n            //Restart link clicked\n            ip.controlbar.restartbutton.click(function () {\n                //visuals\n                self.set_visual_mode('startmode', controlbarid);\n                ip.timer.reset();\n                self.update_status(controlbarid);\n                //fetch new uploader url\n                ip.uploader.fetchNewUploadDetails();\n                self.uploaded=false;\n            });\n\n            //Stop button click\n            ip.controlbar.stopbutton.click(function () {\n\n                if(self.currentvisualmode==='playbackmode'){\n                    return;\n                }\n\n                //stop recording\n                pmr.do_stop_audio(ip);\n                log.debug('stopping audio recording');\n\n                //stop previewing (if that is what we are doing)\n                /*\n                var preview = ip.controlbar.preview.get(0);\n                preview.pause();\n                */\n\n                //wave animation\n                ip.controlbar.animaton.removeClass('animation_running');\n\n                //timer and status bar\n                ip.timer.stop();\n                self.update_status(controlbarid);\n\n\n                //call upload right away\n                self.set_visual_mode('uploadmode', controlbarid);\n                log.debug('now uploading mode');\n                //but we have to do it this lame deferred way because some mediastreamrecorders return a single\n                //blob shortly after we stop. We init like that too, to make sure we do not truncate a users recording\n                //if the mini blobs did not arrive\n                var doDeferredUpload = function () {\n                    if (ip.blobs && ip.blobs.length > 0) {\n                        pmr.do_save_audio(ip);\n                        ip.uploaded = true;\n                        self.disable_button(ip.controlbar.startbutton);\n                    } else {\n                        setTimeout(doDeferredUpload, 200);\n                    }\n                }\n                setTimeout(doDeferredUpload, 200);\n\n            });\n\n            //Play button click\n            /*\n            ip.controlbar.playbutton.click(function () {\n\n                //commence playback\n                var preview = ip.controlbar.preview.get(0);\n                pmr.do_play_audio(ip, preview);\n\n                //init and run radial progress animation\n                rprogress.clear();\n                rprogress.fetchCurrent = function () {\n                    var ct = ip.controlbar.preview.prop('currentTime');\n                    var duration = ip.controlbar.preview.prop('duration');\n                    if (!isFinite(duration)) {\n                        duration = ip.timer.finalseconds;\n                    }\n                    return ct / duration;\n                };\n                rprogress.start();\n\n                //set visuals\n                self.set_visual_mode('playingmode', controlbarid);\n\n            });\n            */\n\n\n\n\n            //Save audio\n            var saveaudio= function () {\n\n                if (ip.blobs && ip.blobs.length > 0) {\n                    pmr.do_save_audio(ip);\n                    ip.uploaded = true;\n                } else {\n                    ip.uploader.Output(M.util.get_string('recui_nothingtosaveerror', 'filter_poodll'));\n                }//end of if self.blobs\n            }\n\n        }, //end of register_control_bar_events_minimal\n\n        enable_button: function (button) {\n            $(button).attr('disabled', false);\n            $(button).removeClass('pmr_disabled');\n            $(button).show();\n        },\n        disable_button: function (button) {\n            $(button).attr('disabled', true);\n            $(button).addClass('pmr_disabled');\n            $(button).hide();\n        },\n\n\n\n    };//end of returned object\n});//total end\n"],"names":["define","$","log","utils","upskin","speechrecognition","settings","audioplayer_minimal","debug","instanceprops","pmr","devsettings","currentvisualmode","clone","extend","this","init","ip","fetch_instanceprops","onUploadSuccess","controlbarid","set_visual_mode","onUploadFailure","fetch_status_bar","skin","fetch_preview_audio","fetch_preview_video","fetch_resource_audio","fetch_resource_video","fetch_uploader_skin","element","theupskin","config","controlbar","uploadbutton","onMediaError","e","console","error","onMediaSuccess_video","onMediaSuccess_audio","preview","attr","uploader","Output","animaton","addClass","timer","reset","start","update_status","handle_timer_update","status","html","fetch_display_time","seconds","initseconds","stopbutton","click","timelimit","data","mode","enable_button","startbutton","disable_button","playbutton","restartbutton","playback","hide","show","blobs","length","doConcatenateBlobs","concatenatedBlob","mediaurl","URL","createObjectURL","removeAttr","src","load","insert_controlbar_video","resource","prepare_controlbar","insert_controlbar_audio","mediatype","skin_style","media_skin_style","recorder_class","size","fetch_strings","controls","fetch_dialogue_box","downloaddialog","errordialog","prepend","settingsdialog","errorsdialog","settingsicon","stopplayingbutton","set_dialogue_box","opts","playerhtml","register_controlbar_events_video","onMediaSuccess","register_controlbar_events_audio","self","uploaded","open","do_start_audio","fetchNewUploadDetails","do_stop_audio","removeClass","stop","doDeferredUpload","do_save_audio","setTimeout","button"],"mappings":"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"}