{"version":3,"file":"poodll_freshmediaskin.min.js","sources":["../src/poodll_freshmediaskin.js"],"sourcesContent":["/* jshint ignore:start */\r\ndefine(['jquery','core/log', 'filter_poodll/utils_amd', 'filter_poodll/dlg_devicesettings', 'filter_poodll/anim_progress_bar_fresh', 'filter_poodll/anim_hwave_fresh', 'filter_poodll/anim_hwave_timer', 'filter_poodll/upskin_text'],\r\n    function ($, log, utils, settings, anim_progress_bar, hwave, hwave_timer, upskin) {\r\n\r\n    \"use strict\"; // jshint ;_;\r\n\r\n    log.debug('PoodLL BMR Skin: initialising');\r\n\r\n\r\n    return {\r\n\r\n        instanceprops: null,\r\n        pmr: null,\r\n        uploaded: false,\r\n        devsettings: null,\r\n        therecanim: null,\r\n        canpause: true,\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        },\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  + '_messages').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 + '\">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=\"poodll_preview_' + skin + '\" style=\"display: none;\" controls playsinline=\"playsinline\" muted></audio>';\r\n            return preview;\r\n        },\r\n        fetch_preview_video: function (skin) {\r\n            var preview = '<video class=\"poodll_preview_' + skin + '\" playsinline=\"playsinline\" muted></video>';\r\n            return preview;\r\n        },\r\n        fetch_resource_audio: function (skin) {\r\n            var resourceplayer = '';\r\n            return resourceplayer;\r\n        },\r\n        fetch_resource_video: function (skin) {\r\n            var resourceplayer = '';\r\n            return resourceplayer;\r\n        },\r\n\r\n        fetch_uploader_skin: function (controlbarid, element) {\r\n            var ip = this.fetch_instanceprops();\r\n            var theupskin = upskin.clone();\r\n            theupskin.init(ip.config, element, ip.controlbar.bmr_progresscanvas, ip.controlbar.status);\r\n            return theupskin;\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\r\n            var ip = this.fetch_instanceprops();\r\n            //clear messages\r\n            ip.uploader.Output('');\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\r\n        onMediaSuccess_audio: function (controlbarid) {\r\n\r\n            var ip = this.fetch_instanceprops();\r\n\r\n            //clear messages\r\n            ip.uploader.Output('');\r\n            ip.controlbar.preview.attr('src', null);\r\n            this.set_visual_mode('recordmode', controlbarid);\r\n\r\n            //wave animation\r\n            this.therecanim.start();\r\n\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        },\r\n\r\n        handle_timer_update: function (controlbarid) {\r\n            var ip = this.fetch_instanceprops();\r\n            ip.controlbar.status.html(ip.timer.fetch_display_time());\r\n            if (ip.timer.seconds == 0 && ip.timer.initseconds > 0) {\r\n                if (ip.controlbar.startbutton.hasClass('poodll_in_progress')) {\r\n                  ip.controlbar.startbutton.click();\r\n                }\r\n            }\r\n        },\r\n\r\n        update_status: function (controlbarid) {\r\n            var ip = this.fetch_instanceprops();\r\n            ip.controlbar.status.html(ip.timer.fetch_display_time());\r\n\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();\r\n            this.visualmode = mode;\r\n\r\n            switch (mode) {\r\n\r\n                case 'initmode':\r\n                    ip.controlbar.statusText.text('Ready to record');\r\n                    ip.controlbar.status.html('00:00:00');\r\n\r\n                    ip.controlbar.stoprecbutton.attr('class', 'poodll_stop-recording_fresh poodll_fresh_stop_btn bmr_disabled');\r\n                    ip.controlbar.startbutton.attr('class', 'poodll_start-recording_fresh poodll_fresh_main_btn');\r\n                    ip.controlbar.playbutton.attr('class', 'poodll_play-recording_fresh poodll_fresh_play_btn bmr_disabled');\r\n\r\n                    //ip.controlbar.root.attr('class')\r\n\r\n                    //disable save button\r\n                    self.disable_button(ip.controlbar.savebutton);\r\n                    self.disable_button(ip.controlbar.recordAgain);\r\n                    break;\r\n\r\n                case 'recordmode':\r\n                    ip.controlbar.statusText.text('Recording..');\r\n                    self.enable_button(ip.controlbar.startbutton);\r\n                    self.show_element(ip.controlbar.startbutton);\r\n                    self.focus_button(ip.controlbar.startbutton);\r\n\r\n                    self.hide_element(ip.controlbar.bmr_progresscanvas);\r\n\r\n                    self.enable_button(ip.controlbar.pausebutton);\r\n                    self.show_element(ip.controlbar.pausebutton);\r\n\r\n                    self.disable_button(ip.controlbar.playbutton);\r\n                    self.hide_element(ip.controlbar.resumebutton);\r\n                    self.enable_button(ip.controlbar.stoprecbutton);\r\n\r\n                    //disable save button\r\n                    self.disable_button(ip.controlbar.savebutton);\r\n                    self.disable_button(ip.controlbar.recordAgain);\r\n\r\n                    //disable settings button\r\n                    self.disable_button(ip.controlbar.settingsicon);\r\n\r\n                    ip.controlbar.preview.addClass('poodll_recording');\r\n                    ip.controlbar.status.addClass('poodll_recording');\r\n\r\n                    ip.controlbar.preview.removeClass('poodll_playing');\r\n                    ip.controlbar.status.removeClass('poodll_playing');\r\n\r\n                    ip.controlbar.startbutton\r\n                        .addClass('poodll_in_progress')\r\n                        .removeClass('poodll_resume_button');\r\n\r\n                    ip.controlbar.playbutton\r\n                        .removeClass('poodll_play_special poodll_play_green');\r\n\r\n                    if (ip.config.mediatype == 'audio') {\r\n                        self.hide_element(ip.controlbar.preview);\r\n                    }\r\n\r\n                    ip.controlbar.root.removeClass('poodll_controllbar_playmode');\r\n\r\n                    break;\r\n\r\n                case 'previewmode':\r\n                    ip.controlbar.statusText.text('Ready to Play');\r\n                    self.disable_button(ip.controlbar.stoprecbutton);\r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                    self.enable_button(ip.controlbar.playbutton);\r\n                    self.focus_button(ip.controlbar.playbutton);\r\n                    self.disable_button(ip.controlbar.pausebutton);\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n\r\n                    //reset timer button\r\n                    ip.controlbar.status.html(ip.timer.fetch_display_time(ip.timer.finalSeconds));\r\n\r\n\r\n                    //If stop has been pressed there is no \"resuming\"\r\n                    self.show_element(ip.controlbar.startbutton);\r\n\r\n                    self.disable_button(ip.controlbar.resumebutton);\r\n                    self.hide_element(ip.controlbar.resumebutton);\r\n                    self.hide_element(ip.controlbar.bmr_progresscanvas);\r\n                    if (self.uploaded) {\r\n                        self.disable_button(ip.controlbar.savebutton);\r\n                        self.disable_button(ip.controlbar.recordAgain);\r\n                    } else {\r\n                        self.enable_button(ip.controlbar.savebutton);\r\n                        self.enable_button(ip.controlbar.recordAgain);\r\n                    }\r\n\r\n                    self.show_element(ip.controlbar.pausebutton);\r\n\r\n                    ip.controlbar.preview.removeClass('poodll_recording');\r\n                    ip.controlbar.status.removeClass('poodll_recording');\r\n\r\n                    ip.controlbar.preview.removeClass('poodll_playing');\r\n                    ip.controlbar.status.removeClass('poodll_playing');\r\n\r\n\r\n                    ip.controlbar.startbutton.removeClass('poodll_in_progress');\r\n                    ip.controlbar.playbutton\r\n                        .addClass('poodll_play_green')\r\n                        .removeClass('poodll_play_special')\r\n                        .removeClass('poodll_play_pause')\r\n                        .removeClass('poodll_stop_green');\r\n\r\n                    if (ip.config.mediatype == 'audio') {\r\n                        self.show_element(ip.controlbar.preview);\r\n                    }\r\n                    // ip.controlbar.status.addClass('hide');\r\n                    //ip.controlbar.bmr_progresscanvas.removeClass('hide');\r\n                    self.enable_button(ip.controlbar.playbutton);\r\n                    ip.controlbar.root.removeClass('poodll_controllbar_playmode poodll_controllbar_pausemode');\r\n                    break;\r\n\r\n                case 'playmode':\r\n\r\n                    ip.controlbar.statusText.text('Playing');\r\n                    ip.controlbar.status.html('00:00:00');\r\n\r\n                    self.enable_button(ip.controlbar.stoprecbutton);\r\n                    self.enable_button(ip.controlbar.pausebutton);\r\n                    self.focus_button(ip.controlbar.stoprecbutton);\r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                    self.disable_button(ip.controlbar.resumebutton);\r\n\r\n                    self.disable_button(ip.controlbar.savebutton);\r\n                    self.disable_button(ip.controlbar.recordAgain);\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n\r\n                    self.show_element(ip.controlbar.bmr_progresscanvas);\r\n\r\n                    ip.controlbar.playbutton\r\n                        .removeClass('poodll_play_green')\r\n                        .removeClass('poodll_play_special')\r\n                        .addClass('poodll_stop_green');\r\n\r\n                    ip.controlbar.preview.addClass('poodll_playing');\r\n                    ip.controlbar.status.addClass('poodll_playing');\r\n\r\n                    //If play has been pressed there is no \"resuming\"\r\n                    self.show_element(ip.controlbar.startbutton);\r\n                    self.hide_element(ip.controlbar.resumebutton);\r\n\r\n                    ip.controlbar.root\r\n                        .addClass('poodll_controllbar_playmode')\r\n                        .removeClass('poodll_controllbar_pausemode');\r\n\r\n                    break;\r\n\r\n\r\n                case 'pausedmode':\r\n                    ip.controlbar.statusText.text('Paused');\r\n                    //self.disable_button(ip.controlbar.pausebutton);\r\n                    //self.hide_element(ip.controlbar.startbutton);\r\n                    self.show_element(ip.controlbar.resumebutton);\r\n                    self.enable_button(ip.controlbar.resumebutton);\r\n                    self.focus_button(ip.controlbar.resumebutton);\r\n                    self.enable_button(ip.controlbar.savebutton);\r\n                    //self.enable_button(ip.controlbar.playbutton);\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n\r\n                    ip.controlbar.preview.removeClass('poodll_recording');\r\n                    ip.controlbar.status.removeClass('poodll_recording');\r\n                    ip.controlbar.startbutton\r\n                        .removeClass('poodll_in_progress')\r\n                        .addClass('poodll_resume_button');\r\n\r\n                    ip.controlbar.playbutton\r\n                    //.addClass('poodll_play_special')\r\n                        .removeClass('poodll_play_green')\r\n                        .removeClass('poodll_play_pause');\r\n\r\n\r\n                    ip.controlbar.root.addClass('poodll_controllbar_pausemode');\r\n                    break;\r\n\r\n                case 'uploadmode':\r\n                    ip.controlbar.statusText.text('Uploading');\r\n                    self.disable_button(ip.controlbar.savebutton);\r\n                    self.disable_button(ip.controlbar.recordAgain);\r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                    self.show_element(ip.controlbar.bmr_progresscanvas);\r\n                    self.enable_button(ip.controlbar.settingsicon);\r\n\r\n                    ip.controlbar.root.removeClass('poodll_controllbar_playmode poodll_controllbar_pausemode');\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        insert_controlbar_audio: function (element, controlbarid, preview, resource) {\r\n            var controlbar = this.prepare_controlbar(element, controlbarid, preview, resource, 'audio');\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();\r\n            var skin_style = ip.config.media_skin_style;\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\r\n            var ss = this.pmr.fetch_strings();\r\n            var record_icon = mediatype == 'video' ? 'fa-video-camera' : 'fa-microphone';\r\n            var recorder_class = mediatype == 'video' ? 'poodll_mediarecorder_video' : 'poodll_mediarecorder_audio';\r\n\r\n            var controls = '<div class=\"poodll_mediarecorderholder_fresh poodll_videorecorderholder_fresh '\r\n                + recorder_class + ' ' + size_class + '\" id=\"holder_' + controlbarid + '\">';\r\n\r\n            controls += '<div class=\"poodll_mediarecorderbox_fresh\" id=\"' + controlbarid + '\">';\r\n            controls += '<audio style=\"display: none !important;\" class=\"poodll-alert-recording\" id=\"' + controlbarid + '\"><source src=\"#\" type=\"audio/mpeg\"></audio>';\r\n\r\n            controls += '<div class=\"style-holder ' + skin_style + '\">';\r\n            controls += '<div class=\"poodll_statusholder_fresh\" >';\r\n            var status = this.fetch_status_bar('fresh');\r\n            controls += status;\r\n            controls += '</div>';\r\n\r\n            controls += '<div class=\"poodll_fresh_musik_line\">' +\r\n                '<canvas class=\"fresh_range\"></canvas>' +\r\n                '<canvas id=\"' + controlbarid + '_playcanvas\" class=\"poodll_fresh_playcanvas\" width=\"300\" height=\"50\"></canvas>' +\r\n                '<div class=\"poodll_fresh_wave\"></div>' +\r\n                '</div>' +\r\n                '<div class=\"poodll_fresh_control\">' +\r\n                '<div class=\"poodll_fresh_txt_control\">' + ss['recui_readytorecord'] + '</div>' +\r\n                '<div class=\"poodll_fresh_settings_btn settingsicon\" data-toggle=\"modal\" data-target=\"#myModal\" aria-label=\"' + ss['recui_settings'] + '\" tabindex=\"0\" id=\"settingsicon_' + controlbarid + '\"></div>' +\r\n                '<div class=\"poodll_start-recording_fresh poodll_fresh_main_btn\" aria-label=\"' + ss['recui_record'] + '\"  tabindex=\"0\"></div>' +\r\n                '<div class=\"poodll_stop-playing-recording_fresh\" aria-label=\"' + ss['recui_stop'] + '\"  tabindex=\"0\" style=\"display: none;\"></div>' +\r\n                '<div class=\"poodll_pause-recording_fresh poodll_fresh_pause_btn bmr_disabled\" aria-label=\"' + ss['recui_pause'] + '\"  tabindex=\"0\"></div>' +\r\n                '<div class=\"poodll_play-recording_fresh poodll_fresh_play_btn bmr_disabled\" aria-label=\"' + ss['recui_play'] + '\"  tabindex=\"0\"></div>' +\r\n                '</div>' +\r\n                '<div class=\"poodll_fresh_bottom_btns\">' +\r\n                '<a class=\"poodll_save-recording_fresh poodll_fresh_upload_btn bmr_disabled\" aria-label=\"' + ss['recui_upload'] + '\"  tabindex=\"0\" href=\"#\">' + ss['recui_upload'] + '</a>' +\r\n                '<a class=\"poodll_fresh_record_btn bmr_disabled\" aria-label=\"' + ss['recui_recordagain'] + '\"  tabindex=\"0\" href=\"#\">' + ss['recui_recordagain'] + '</a>' +\r\n                '</div>';\r\n\r\n            controls += preview;\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            controls += '</div>';\r\n            $(element).prepend(controls);\r\n            var controlbar = {\r\n                poodll_recording_alert: $('#' + controlbarid + ' .poodll-alert-recording'),\r\n                bmr_progresscanvas: $('#' + controlbarid + ' .fresh_range'),\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                status: $('#' + controlbarid + ' .poodll_status_fresh'),\r\n                statusText: $('#' + controlbarid + ' .poodll_fresh_txt_control'),\r\n                preview: $('#' + controlbarid + ' .poodll_preview_fresh'),\r\n                startbutton: $('#' + controlbarid + ' .poodll_start-recording_fresh'),\r\n                stoprecbutton: $('#' + controlbarid + ' .poodll_stop-recording_fresh'),\r\n                pausebutton: $('#' + controlbarid + ' .poodll_pause-recording_fresh'),\r\n                resumebutton: $('#' + controlbarid + ' .poodll_resume-recording_fresh'),\r\n                playbutton: $('#' + controlbarid + ' .poodll_play-recording_fresh'),\r\n                stopbutton: $('#' + controlbarid + ' .poodll_stop-playing-recording_fresh'),\r\n                savebutton: $('#' + controlbarid + ' .poodll_save-recording_fresh'),\r\n                recordAgain: $('#' + controlbarid + ' .poodll_fresh_record_btn'),\r\n                playcanvas: $('#' + controlbarid + '_playcanvas'),\r\n                root: $('#' + controlbarid)\r\n            };\r\n\r\n\r\n            //settings and error dialogs\r\n            //They use the same dialog and just fill it with diofferent stuff\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            return controlbar;\r\n\r\n        }, //end of fetch_control_bar_bmr\r\n\r\n\r\n        register_controlbar_events_video: function (onMediaSuccess, controlbarid) {\r\n            return this.register_controlbar_events_audio(onMediaSuccess, controlbarid);\r\n        },\r\n\r\n        register_controlbar_events_audio: function (onMediaSuccess, controlbarid) {\r\n            var self = this;\r\n            var pmr = this.pmr;\r\n            var ip = this.fetch_instanceprops();\r\n\r\n            //Open the settings dialog\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            //init progress bar\r\n            var hprogress = anim_progress_bar.clone();\r\n            hprogress.init(ip.controlbar.bmr_progresscanvas);\r\n\r\n            hprogress.readyBars();\r\n\r\n            var recanim = hwave.clone();\r\n            recanim.init(ip.audioanalyser, ip.controlbar.playcanvas.get(0));\r\n\r\n            /*\r\n            START BUTTON\r\n            */\r\n            ip.controlbar.startbutton.click(function () {\r\n\r\n                //Play alert sound\r\n                //ip.controlbar.poodll_recording_alert.get(0).play();\r\n\r\n                //start recording\r\n                if ($(this).hasClass('poodll_in_progress')) {\r\n\r\n                    //stop the audio\r\n                    pmr.do_stop_audio(ip);\r\n\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                    recanim.clear();\r\n\r\n                    //timer and status bar\r\n                    ip.timer.stop();\r\n                    self.update_status(controlbarid);\r\n\r\n                    //do visuals\r\n                    self.set_visual_mode('previewmode', controlbarid);\r\n\r\n                } else if ($(this).hasClass('poodll_resume_button')) {\r\n                    pmr.do_resume_audio(ip);\r\n\r\n                    //timer and status bar\r\n                    ip.timer.resume();\r\n                    self.update_status(controlbarid);\r\n                    //do visuals\r\n                    self.set_visual_mode('recordmode', controlbarid);\r\n                } else {\r\n\r\n                    self.therecanim = recanim;\r\n                    pmr.do_start_audio(ip, onMediaSuccess);\r\n\r\n                }\r\n\r\n\r\n            });\r\n\r\n            ip.controlbar.recordAgain.click(function () {\r\n                pmr.do_stop_audio(ip);\r\n\r\n                self.update_status(controlbarid);\r\n                //do visuals\r\n                self.set_visual_mode('initmode', controlbarid);\r\n\r\n                //self.therecanim = recanim;\r\n                //pmr.do_start_audio(ip, onMediaSuccess);\r\n            });\r\n\r\n            ip.controlbar.stoprecbutton.click(function () {\r\n                //stop the audio\r\n                pmr.do_stop_audio(ip);\r\n\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                recanim.clear();\r\n\r\n                //timer and status bar\r\n                ip.timer.stop();\r\n                self.update_status(controlbarid);\r\n\r\n                //do visuals\r\n                self.set_visual_mode('previewmode', controlbarid);\r\n\r\n            });\r\n\r\n            ip.controlbar.pausebutton.click(function () {\r\n\r\n                pmr.do_pause_audio(ip);\r\n                //pmr.do_stop_audio(ip);\r\n                var preview = ip.controlbar.preview;\r\n                if (preview && preview.get(0)) {\r\n                    preview.get(0).pause();\r\n                    preview.get(0).controls = false;\r\n                }\r\n                console.log('PAUSE');\r\n                //timer and status bar\r\n                ip.timer.pause();\r\n                self.update_status(controlbarid);\r\n                //do visuals\r\n                self.set_visual_mode('pausedmode', controlbarid);\r\n\r\n            });\r\n\r\n\r\n            ip.controlbar.resumebutton.click(function () {\r\n\r\n                pmr.do_resume_audio(ip);\r\n\r\n                //timer and status bar\r\n                ip.timer.resume();\r\n                self.update_status(controlbarid);\r\n                //do visuals\r\n                self.set_visual_mode('recordmode', controlbarid);\r\n            });\r\n\r\n            ip.controlbar.preview.on('timeupdate', function () {\r\n                if (self.visualmode != 'playmode') {\r\n                    return;\r\n                }\r\n                var currentTime = this.currentTime;\r\n                ip.controlbar.status.html(ip.timer.fetch_display_time(currentTime));\r\n            });\r\n\r\n            //this is really just a fudge because PMR expects the stopbutton to be the stop playback button\r\n            //but in this recorder, the stop playback button is the \"play\" button\r\n            //so we double up the code just so that when PMR calls it when playback ends, we reset playback state\r\n            ip.controlbar.stopbutton.click(function () {\r\n                //stop the audio\r\n                pmr.do_stop_audio(ip);\r\n\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                recanim.clear();\r\n\r\n                //timer and status bar\r\n                ip.timer.stop();\r\n                self.update_status(controlbarid);\r\n\r\n                //do visuals\r\n                self.set_visual_mode('previewmode', controlbarid);\r\n            });\r\n\r\n            /*\r\n             PLAY BUTTON\r\n             */\r\n\r\n            ip.controlbar.playbutton.click(function () {\r\n\r\n                if ($(this).hasClass('poodll_play_pause')) {\r\n\r\n                    var preview = ip.controlbar.preview.get(0);\r\n\r\n                    // if(preview && preview.get(0)){\r\n                    //     preview.get(0).pause();\r\n                    //     preview.get(0).controls = false;\r\n                    // }\r\n\r\n                    pmr.do_stopplay_audio(ip, preview);\r\n                    pmr.do_stop_audio(ip);\r\n\r\n                    //timer and status bar\r\n                    ip.timer.pause();\r\n                    self.update_status(controlbarid);\r\n                    //do visuals\r\n                    self.set_visual_mode('pausedmode', controlbarid);\r\n\r\n\r\n                } else if ($(this).hasClass('poodll_stop_green')) {\r\n\r\n                    //stop the audio\r\n                    pmr.do_stop_audio(ip);\r\n\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                    recanim.clear();\r\n\r\n                    //timer and status bar\r\n                    ip.timer.stop();\r\n                    self.update_status(controlbarid);\r\n\r\n                    //do visuals\r\n                    self.set_visual_mode('previewmode', controlbarid);\r\n\r\n                } else {\r\n\r\n                    var preview = ip.controlbar.preview.get(0);\r\n                    pmr.do_play_audio(ip, preview);\r\n\r\n                    //do visuals\r\n                    self.set_visual_mode('playmode', controlbarid);\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                    var ct = ip.controlbar.preview.prop('currentTime');\r\n                    var duration = ip.controlbar.preview.prop('duration');\r\n                    hprogress.playBars(ct, duration);\r\n\r\n                }\r\n            });\r\n\r\n            ip.controlbar.savebutton.click(function () {\r\n\r\n                if (ip.blobs && ip.blobs.length > 0) {\r\n                    self.set_visual_mode('uploadmode', controlbarid);\r\n                    pmr.do_save_audio(ip);\r\n                    self.uploaded = true;\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                    preview.get(0).controls = false;\r\n                }\r\n            };\r\n\r\n            // Add keydown event listeners to the div elements\r\n            var buttons=[ip.controlbar.startbutton, ip.controlbar.stoprecbutton, ip.controlbar.pausebutton, ip.controlbar.resumebutton, ip.controlbar.playbutton, ip.controlbar.savebutton, ip.controlbar.recordAgain, ip.controlbar.settingsicon];\r\n            buttons.forEach(function($button) {\r\n                $button.on('keydown', function(event) {\r\n                    if (event.key === ' ' || event.key === 'Enter') {\r\n                        event.preventDefault(); // Prevent default behavior for space key\r\n                        $(this).click(); // Trigger click event\r\n                    }\r\n                });\r\n            });\r\n\r\n        }, //end of register_control_bar_events_bmr\r\n\r\n        show_element: function (element) {\r\n            $(element).show();\r\n        },\r\n        hide_element: function (element) {\r\n            $(element).hide();\r\n        },\r\n        enable_button: function (button) {\r\n            $(button).attr('disabled', false);\r\n            $(button).removeClass('bmr_disabled');\r\n        },\r\n        disable_button: function (button) {\r\n            $(button).attr('disabled', true);\r\n            $(button).addClass('bmr_disabled');\r\n        },\r\n        focus_button: function (button) {\r\n            $(button).focus();\r\n        },\r\n\r\n    };//end of returned object\r\n\r\n\r\n});//total end"],"names":["define","$","log","utils","settings","anim_progress_bar","hwave","hwave_timer","upskin","debug","instanceprops","pmr","uploaded","devsettings","therecanim","canpause","clone","extend","this","init","ip","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","theupskin","config","controlbar","bmr_progresscanvas","status","onMediaError","e","console","error","onMediaSuccess_video","uploader","Output","set_visual_mode","timer","reset","start","update_status","onMediaSuccess_audio","preview","attr","handle_timer_update","html","fetch_display_time","seconds","initseconds","startbutton","hasClass","click","mode","visualmode","statusText","text","stoprecbutton","playbutton","disable_button","savebutton","recordAgain","enable_button","show_element","focus_button","hide_element","pausebutton","resumebutton","settingsicon","addClass","removeClass","mediatype","root","finalSeconds","insert_controlbar_video","resource","prepare_controlbar","insert_controlbar_audio","skin_style","media_skin_style","size_class","size","ss","fetch_strings","controls","fetch_dialogue_box","downloaddialog","errordialog","prepend","poodll_recording_alert","settingsdialog","errorsdialog","stopbutton","playcanvas","set_dialogue_box","register_controlbar_events_video","onMediaSuccess","register_controlbar_events_audio","self","open","hprogress","readyBars","recanim","audioanalyser","get","do_stop_audio","pause","clear","stop","do_resume_audio","resume","do_start_audio","do_pause_audio","on","currentTime","do_stopplay_audio","do_play_audio","fetchCurrent","ct","prop","duration","isFinite","finalseconds","playBars","blobs","length","do_save_audio","M","util","get_string","window","onbeforeunload","forEach","$button","event","key","preventDefault","button","focus"],"mappings":"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"}