{"version":3,"file":"poodll_screenmediaskin.min.js","sources":["../src/poodll_screenmediaskin.js"],"sourcesContent":["define(['jquery',  'core/log', 'filter_poodll/utils_amd', 'filter_poodll/anim_progress_bar', 'filter_poodll/speech_poodll', 'filter_poodll/dlg_devicesettings', 'filter_poodll/upskin_bar'],\r\n    function ($,  log, utils, anim_progress_bar, browserrecognition, settings, upskin_bar) {\r\n    /* jshint ignore:start */\r\n\r\n    \"use strict\"; // jshint ;_;\r\n\r\n    log.debug('PoodLL ScreenRecorder Skin: initialising');\r\n\r\n    return {\r\n\r\n        instanceprops: null,\r\n        pmr: null,\r\n        stage: 'none',\r\n        uploaded: false,\r\n        devsettings: null,\r\n\r\n        //for making multiple instances\r\n        clone: function () {\r\n            return $.extend(true, {}, this);\r\n        },\r\n\r\n        init: function (ip, pmr) {\r\n            this.instanceprops = ip;\r\n            this.pmr = pmr;\r\n            this.devsettings = settings.clone();\r\n            this.devsettings.init(pmr, ip);\r\n            //we do not actually want to show the video camera selection\r\n            this.devsettings.set_media_type('audio');\r\n        },\r\n\r\n\r\n        fetch_instanceprops: function () {\r\n            return this.instanceprops;\r\n        },\r\n\r\n\r\n        onUploadSuccess: function (controlbarid) {\r\n            $('#' + controlbarid + ' > .poodll_save-recording').hide();\r\n            $('#' + controlbarid + ' > .poodll_savedsuccessfully').show();\r\n        },\r\n\r\n        onUploadFailure: function (controlbarid) {\r\n            return;\r\n        },\r\n\r\n        fetch_status_bar: function (skin) {\r\n            var status = '<div class=\"poodll_status_' + skin + '\" height=\"50\">00:00:00</div>';\r\n            return status;\r\n        },\r\n\r\n        fetch_preview_audio: function (skin) {\r\n            var preview = '<audio class=\"audio_preview_screen poodll_preview_' + skin + '\" style=\"display: none;\" width=\"100%\" height=\"100%\" controls playsinline=\"playsinline\" muted></audio>';\r\n            return preview;\r\n        },\r\n        fetch_preview_video: function (skin) {\r\n            var preview = '<video class=\"video_preview_screen poodll_preview_' + skin + '\" width=\"100%\" height=\"300px\" playsinline=\"playsinline\" muted></video>';\r\n            return preview;\r\n        },\r\n        fetch_resource_audio: function (skin) {\r\n            var resourceplayer = '<audio class=\"poodll_resourceplayer_' + skin + '\" style=\"display: none;\" playsinline=\"playsinline\"></audio>';\r\n            return resourceplayer;\r\n        },\r\n        fetch_resource_video: function (skin) {\r\n            var resourceplayer = '<video class=\"poodll_resourceplayer_' + skin + '\" style=\"display: none;\" playsinline=\"playsinline\"></video>';\r\n            return resourceplayer;\r\n        },\r\n        fetch_uploader_skin: function (controlbarid, element) {\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n            var upskin = upskin_bar.clone();\r\n            upskin.init(ip.config, element, ip.controlbar.progresscanvas, ip.controlbar.timer);\r\n            return upskin;\r\n        },\r\n\r\n\r\n        onMediaError: function (e) {\r\n            console.error('media error', e);\r\n        },\r\n\r\n        onMediaSuccess_video: function (controlbarid) {\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n\r\n            //clear messages\r\n            ip.uploader.Output('');\r\n\r\n            this.set_visual_mode('recordmode', controlbarid);\r\n            //timer and status bar\r\n            ip.timer.reset();\r\n            ip.timer.start();\r\n            this.update_status(controlbarid);\r\n\r\n            //set recording stage\r\n            this.stage = \"recorded\";\r\n        },\r\n\r\n\r\n        handle_timer_update: function (controlbarid) {\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n            ip.controlbar.status.html(ip.timer.fetch_display_time());\r\n            if (ip.timer.seconds == 0 && ip.timer.initseconds > 0) {\r\n                ip.controlbar.stoprecbutton.click();\r\n            }\r\n        },\r\n\r\n        update_status: function (controlbarid) {\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n            ip.controlbar.status.html(ip.timer.fetch_display_time());\r\n        },\r\n\r\n        //set visuals for different states (ie recording or playing)\r\n        set_visual_mode: function (mode, controlbarid) {\r\n            var self = this;\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n\r\n            switch (mode) {\r\n\r\n                case 'recordmode':\r\n                    ip.controlbar.progress.hide();\r\n                    ip.controlbar.preview.addClass('poodll_recording');\r\n                    ip.controlbar.status.addClass('poodll_recording');\r\n                    ip.controlbar.status.removeClass('hide');\r\n                    self.disable_button(this);\r\n                    self.disable_button(ip.controlbar.playbutton);\r\n                    ip.controlbar.playbutton.show();\r\n                    self.disable_button(ip.controlbar.stopbutton);\r\n                    ip.controlbar.stopbutton.hide();\r\n                    self.disable_button(ip.controlbar.savebutton);\r\n                    ip.controlbar.savebutton.show();\r\n                    self.enable_button(ip.controlbar.stoprecbutton);\r\n                    ip.controlbar.stoprecbutton.show();\r\n                    self.focus_button(ip.controlbar.stoprecbutton);\r\n                    ip.controlbar.startbutton.hide();\r\n                    self.disable_button(ip.controlbar.settingsicon);\r\n\r\n\r\n                    break;\r\n\r\n                case 'previewmode':\r\n                    ip.controlbar.playbutton.hide();\r\n                    self.enable_button(ip.controlbar.stopbutton);\r\n                    ip.controlbar.stopbutton.show();\r\n                    self.focus_button(ip.controlbar.stopbutton);\r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                    ip.controlbar.startbutton.show();\r\n                    self.disable_button(ip.controlbar.resumebutton);\r\n                    ip.controlbar.resumebutton.hide();\r\n                    self.disable_button(ip.controlbar.playbutton);\r\n                    ip.controlbar.preview.removeClass('poodll_recording');\r\n                    ip.controlbar.status.removeClass('poodll_recording');\r\n                    ip.controlbar.status.removeClass('hide');\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n\r\n\r\n                    ip.controlbar.status.addClass('hide');\r\n                    if (ip.controlbar.progresscanvas.hasClass(\"hide\")) {\r\n                        ip.controlbar.progresscanvas.removeClass('hide');\r\n                        ip.controlbar.progresscanvas.show();\r\n                    }\r\n\r\n                    if (!$(this).hasClass('played')) {\r\n                        $(this).addClass('played');\r\n                        ip.controlbar.steptwo.empty();\r\n                        ip.controlbar.steptwo.append('<i class=\"fa fa-check\" aria-hidden=\"true\"></i>').hide().fadeIn(1000);\r\n                    }\r\n\r\n\r\n                    break;\r\n\r\n                case 'pausedmode':\r\n\r\n                    self.enable_button(ip.controlbar.startbutton);\r\n                    ip.controlbar.startbutton.show();\r\n                    self.focus_button(ip.controlbar.startbutton);\r\n                    self.enable_button(ip.controlbar.playbutton);\r\n                    ip.controlbar.playbutton.show();\r\n                    self.disable_button(ip.controlbar.savebutton);\r\n                    ip.controlbar.savebutton.show();\r\n                    ip.controlbar.preview.removeClass('poodll_recording');\r\n                    ip.controlbar.status.removeClass('poodll_recording');\r\n                    ip.controlbar.stoprecbutton.hide();\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n\r\n\r\n                    ip.controlbar.timer.html('00:00:00');\r\n\r\n                    ip.controlbar.status.addClass('hide');\r\n                    ip.controlbar.progress.show();\r\n\r\n                    ip.controlbar.stepone.empty();\r\n                    ip.controlbar.stepone.append('<i class=\"fa fa-check\" aria-hidden=\"true\"></i>').hide().fadeIn(1000);\r\n\r\n                    self.disable_button(ip.controlbar.stoprecbutton);\r\n\r\n                    break;\r\n\r\n\r\n                case 'stopplayingmode':\r\n                    if (!self.uploaded) {\r\n                        self.enable_button(ip.controlbar.savebutton);\r\n                        self.enable_button(ip.controlbar.startbutton);\r\n                    }\r\n\r\n                    if (!ip.controlbar.progresscanvas.hasClass('hide')) {\r\n                        ip.controlbar.timer.html('00:00:00');\r\n                        ip.controlbar.progresscanvas.addClass('hide');\r\n                        ip.controlbar.progresscanvas.hide();\r\n                    }\r\n                    ip.controlbar.stopbutton.hide();\r\n                    ip.controlbar.playbutton.show();\r\n                    ip.controlbar.startbutton.show();\r\n                    self.enable_button(ip.controlbar.playbutton);\r\n                    self.focus_button(ip.controlbar.playbutton);\r\n                    self.disable_button(ip.controlbar.stopbutton);\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n                    break;\r\n\r\n                case 'uploadmode':\r\n\r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                    ip.controlbar.progresscanvas.removeClass('hide');\r\n                    ip.controlbar.progresscanvas.show();\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n\r\n                    break;\r\n\r\n                case 'savemode':\r\n\r\n                    self.disable_button(ip.controlbar.savebutton);\r\n                    ip.controlbar.stepthree.empty();\r\n                    ip.controlbar.stepthree.append('<i class=\"fa fa-check\" aria-hidden=\"true\"></i>').hide().fadeIn(1000);\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n                    break;\r\n            }\r\n\r\n        },\r\n\r\n        //insert the control bar and return it to be reused\r\n        insert_controlbar_video: function (element, controlbarid, preview, resource) {\r\n            var controlbar = this.prepare_controlbar(element, controlbarid, preview, resource, 'video');\r\n            return controlbar;\r\n        },\r\n\r\n        //insert the control bar and return it to be reused\r\n        prepare_controlbar: function (element, controlbarid, preview, resource, mediatype) {\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n            var skin_style = ip.config.media_skin_style;\r\n\r\n            var recorder_class =  'poodll_mediarecorder_video' ;\r\n\r\n            var size_class = 'poodll_mediarecorder_size_auto';\r\n            switch (ip.config.size) {\r\n                case 'small':\r\n                    size_class = 'poodll_mediarecorder_size_small';\r\n                    break;\r\n                case 'big':\r\n                    size_class = 'poodll_mediarecorder_size_big';\r\n                    break;\r\n                case 'auto':\r\n                    size_class = 'poodll_mediarecorder_size_auto';\r\n            }\r\n            var ss = this.pmr.fetch_strings();\r\n            var controls = '<div class=\"screen-main-wrapper poodll_mediarecorderholder_screen ' + recorder_class + ' ' + size_class + '\" id=\"holder_' + controlbarid + '\">';\r\n\r\n            controls += '<div class=\"modal-box poodll_mediarecorderbox_screen screen-wrap\" id=\"' + controlbarid + '\">';\r\n            controls += '<div class=\"style-holder ' + skin_style + '\">';\r\n            var status = this.fetch_status_bar('screen');\r\n            controls += status,\r\n                controls += '<div class=\"hp_slide\" id=\"slide_' + controlbarid + '\">';\r\n            controls += '<div class=\"hp_timer\"></div><canvas class=\"hp_range\"></canvas></div>';\r\n            controls += preview,\r\n                controls += '<div class=\"settingsicon\" id=\"settingsicon_' + controlbarid + '\"><button type=\"button\" class=\"btn btn-info btn-lg\" data-toggle=\"modal\" data-target=\"#myModal\" aria-label=\"' + ss['recui_settings'] + '\"><i class=\"fa fa-cogs\" aria-hidden=\"true\"></i></button></div>';\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_screen poodll_start-recording_screen\" aria-label=\"' + ss['recui_record'] + '\"  tabindex=\"0\"><i class=\"fa fa-desktop\" aria-hidden=\"true\"></i></button> ';\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_screen poodll_stop-recording_screen pmr_disabled\" aria-label=\"' + ss['recui_stop'] + '\"  tabindex=\"0\" style=\"display: none;\" disabled><i class=\"fa fa-stop\" aria-hidden=\"true\"></i></button>';\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_screen poodll_pause-recording_screen pmr_disabled\" aria-label=\"' + ss['recui_pause'] + '\"  tabindex=\"0\" style=\"display: none;\" disabled><i class=\"fa fa-pause\" aria-hidden=\"true\"></i></button>';\r\n            controls += ' <button type=\"button\" class=\"poodll_mediarecorder_button_screen poodll_resume-recording_screen pmr_disabled\" aria-label=\"' + ss['recui_resume'] + '\"  tabindex=\"0\" style=\"display: none;\" disabled><i class=\"fa fa-microphone\" aria-hidden=\"true\"></i></button>';\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_screen poodll_play-recording_screen pmr_disabled\" aria-label=\"' + ss['recui_play'] + '\"  tabindex=\"0\" disabled><i class=\"fa fa-play\" aria-hidden=\"true\"></i></button> ';\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_screen poodll_stop-playing_screen pmr_disabled\"  aria-label=\"' + ss['recui_stop'] + '\"  tabindex=\"0\" style=\"display: none;\" disabled><i class=\"fa fa-stop\" aria-hidden=\"true\"></i></button>';\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_screen poodll_save-recording_screen pmr_disabled\" aria-label=\"' + ss['recui_upload'] + '\"  tabindex=\"0\" disabled><i class=\"fa fa-upload\" aria-hidden=\"true\"></i></button>';\r\n            controls += '<div style=\"clear:both;\">';\r\n            controls += '<div class=\"task-helper\">';\r\n            controls += '<p class=\"step-1\">' + ss['recui_record'] + '</p>';\r\n            controls += '<p class=\"step-2\">' + ss['recui_play'] + '</p>';\r\n            controls += '<p class=\"step-3\">' + ss['recui_save'] + '</p>';\r\n            controls += '</div>';\r\n            controls += '</div>';\r\n            controls += '</div>';\r\n            controls += this.devsettings.fetch_dialogue_box();\r\n            controls += ip.downloaddialog.fetch_dialogue_box();\r\n            controls += ip.errordialog.fetch_dialogue_box();\r\n            controls += '</div>';\r\n\r\n            $(element).prepend(controls);\r\n\r\n            var controlbar = {\r\n                settingsdialog: $('#' + controlbarid + ' .poodll_dialogue_box_settings'),\r\n                downloaddialog: $('#' + controlbarid + ' .poodll_dialogue_box_download'),\r\n                errorsdialog: $('#' + controlbarid + ' .poodll_dialogue_box_errors'),\r\n                settingsicon: $('#' + controlbarid + ' .settingsicon'),\r\n                stepone: $('#' + controlbarid + ' .step-1'),\r\n                steptwo: $('#' + controlbarid + ' .step-2'),\r\n                stepthree: $('#' + controlbarid + ' .step-3'),\r\n                progresscanvas: $('#' + controlbarid + ' .hp_range'),\r\n                progress: $('#' + controlbarid + ' .hp_slide'),\r\n                timer: $('#' + controlbarid + ' .hp_timer'),\r\n                status: $('#' + controlbarid + ' .poodll_status_screen'),\r\n                preview: $('#' + controlbarid + ' .poodll_preview_screen'),\r\n                startbutton: $('#' + controlbarid + ' .poodll_start-recording_screen'),\r\n                stoprecbutton: $('#' + controlbarid + ' .poodll_stop-recording_screen'),\r\n                stopbutton: $('#' + controlbarid + ' .poodll_stop-playing_screen'),\r\n                pausebutton: $('#' + controlbarid + ' .poodll_pause-recording_screen'),\r\n                resumebutton: $('#' + controlbarid + ' .poodll_resume-recording_screen'),\r\n                playbutton: $('#' + controlbarid + ' .poodll_play-recording_screen'),\r\n                savebutton: $('#' + controlbarid + ' .poodll_save-recording_screen')\r\n            };\r\n\r\n            //settings and error and download dialogs\r\n            //settings is on 'this' because it is shown from skkn events, but errors are from pmr stuff\r\n            ip.downloaddialog.set_dialogue_box(controlbar.downloaddialog);\r\n            ip.errordialog.set_dialogue_box(controlbar.errorsdialog);\r\n            this.devsettings.set_dialogue_box(controlbar.settingsdialog);\r\n\r\n            return controlbar;\r\n        }, //end of fetch_control_bar_screen\r\n\r\n\r\n        register_controlbar_events_video: function (onMediaSuccess, controlbarid) {\r\n            var self = this;\r\n            var pmr = this.pmr;\r\n            var stage = this.stage;\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n\r\n            //init linear progress\r\n            var hprogress = anim_progress_bar.clone();\r\n            hprogress.init(ip.controlbar.progresscanvas);\r\n\r\n            ip.controlbar.settingsicon.click(function () {\r\n                if (!self.uploaded) {\r\n                    self.devsettings.open();\r\n                } else {\r\n                    ip.downloaddialog.open();\r\n                }\r\n            });\r\n\r\n            ip.controlbar.startbutton.click(function () {\r\n                pmr.do_start_screen(ip, onMediaSuccess);\r\n            });\r\n\r\n            ip.controlbar.stoprecbutton.click(function () {\r\n                pmr.do_stop_audio(ip);\r\n                self.set_visual_mode('pausedmode', controlbarid);\r\n                //timer and status bar\r\n                ip.timer.stop();\r\n                ip.timer.reset();\r\n                self.update_status(controlbarid);\r\n            });\r\n\r\n\r\n            ip.controlbar.stopbutton.click(function () {\r\n                self.set_visual_mode('stopplayingmode', controlbarid);\r\n                //stop playing\r\n                var preview = ip.controlbar.preview.get(0);\r\n                pmr.do_stopplay_audio(ip, preview);\r\n                hprogress.stop();\r\n            });\r\n\r\n            ip.controlbar.playbutton.click(function () {\r\n\r\n                var preview = ip.controlbar.preview.get(0);\r\n                pmr.do_play_audio(ip, preview);\r\n\r\n                ip.controlbar.preview.on('timeupdate', function () {\r\n                    var currentTime = this.currentTime;\r\n                    ip.controlbar.timer.html(ip.timer.fetch_display_time(currentTime));\r\n                });\r\n\r\n\r\n                //do visuals\r\n                self.set_visual_mode('previewmode', controlbarid);\r\n\r\n                //set recording stage\r\n                stage = \"played\";\r\n\r\n                //start animation\r\n                hprogress.clear();\r\n                hprogress.fetchCurrent = function () {\r\n                    var ct = ip.controlbar.preview.prop('currentTime');\r\n                    var duration = ip.controlbar.preview.prop('duration');\r\n                    if (!isFinite(duration)) {\r\n                        duration = ip.timer.finalseconds;\r\n                    }\r\n                    return ct / duration;\r\n                };\r\n                hprogress.start();\r\n\r\n            });\r\n\r\n            ip.controlbar.savebutton.click(function () {\r\n                self.set_visual_mode('savemode', controlbarid);\r\n                log.debug('save');\r\n                if (ip.blobs && ip.blobs.length > 0) {\r\n                    pmr.do_save_audio(ip);\r\n                    self.uploaded = true;\r\n                    self.set_visual_mode('uploadmode', controlbarid);\r\n                    //set recording stage\r\n                    stage = \"saved\";\r\n                } else {\r\n                    ip.uploader.Output(M.util.get_string('recui_nothingtosaveerror', 'filter_poodll'));\r\n                }//end of if self.blobs\r\n                //probably not necessary  ... but getting odd ajax errors occasionally\r\n                return false;\r\n            });//end of save recording\r\n\r\n            window.onbeforeunload = function () {\r\n                self.enable_button(ip.controlbar.startbutton);\r\n                var preview = ip.controlbar.preview;\r\n                if (preview && preview.get(0)) {\r\n                    preview.get(0).pause();\r\n                }\r\n            };\r\n\r\n        }, //end of register_control_bar_events_screen\r\n\r\n        focus_button: function (button) {\r\n            $(button).focus();\r\n        },\r\n        enable_button: function (button) {\r\n            $(button).attr('disabled', false);\r\n            $(button).removeClass('pmr_disabled');\r\n        },\r\n        disable_button: function (button) {\r\n            $(button).attr('disabled', true);\r\n            $(button).addClass('pmr_disabled');\r\n        },\r\n\r\n    };//end of returned object\r\n\r\n});//total end"],"names":["define","$","log","utils","anim_progress_bar","browserrecognition","settings","upskin_bar","debug","instanceprops","pmr","stage","uploaded","devsettings","clone","extend","this","init","ip","set_media_type","fetch_instanceprops","onUploadSuccess","controlbarid","hide","show","onUploadFailure","fetch_status_bar","skin","fetch_preview_audio","fetch_preview_video","fetch_resource_audio","fetch_resource_video","fetch_uploader_skin","element","upskin","config","controlbar","progresscanvas","timer","onMediaError","e","console","error","onMediaSuccess_video","uploader","Output","set_visual_mode","reset","start","update_status","handle_timer_update","status","html","fetch_display_time","seconds","initseconds","stoprecbutton","click","mode","progress","preview","addClass","removeClass","disable_button","playbutton","stopbutton","savebutton","enable_button","focus_button","startbutton","settingsicon","resumebutton","hasClass","steptwo","empty","append","fadeIn","stepone","stepthree","insert_controlbar_video","resource","prepare_controlbar","mediatype","skin_style","media_skin_style","size_class","size","ss","fetch_strings","controls","fetch_dialogue_box","downloaddialog","errordialog","prepend","settingsdialog","errorsdialog","pausebutton","set_dialogue_box","register_controlbar_events_video","onMediaSuccess","self","hprogress","open","do_start_screen","do_stop_audio","stop","get","do_stopplay_audio","do_play_audio","on","currentTime","clear","fetchCurrent","ct","prop","duration","isFinite","finalseconds","blobs","length","do_save_audio","M","util","get_string","window","onbeforeunload","pause","button","focus","attr"],"mappings":"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"}