{"version":3,"file":"poodll_shadowmediaskin.min.js","sources":["../src/poodll_shadowmediaskin.js"],"sourcesContent":["/* jshint ignore:start */\r\ndefine(['jquery', 'core/log', 'filter_poodll/utils_amd'], function ($, log, utils) {\r\n\r\n    \"use strict\"; // jshint ;_;\r\n\r\n    log.debug('PoodLL Shadow Skin: initialising');\r\n\r\n    return {\r\n\r\n        instanceprops: null,\r\n        pmr: null,\r\n        uploaded: false,\r\n        recorded: false,\r\n        mustResetResourcePlayer: false,\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        },\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 + '\"></div>';\r\n            return status;\r\n        },\r\n\r\n        fetch_preview_audio: function (skin) {\r\n            var preview = '<audio class=\"poodll_checkplayer_' + 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_checkplayer_' + skin + '\" width=\"320\" height=\"240\" 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;\" src=\"@@RESOURCEURL@@\" playsinline=\"playsinline\" controls></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;\" src=\"@@RESOURCEURL@@\" playsinline=\"playsinline\"></video>';\r\n            return resourceplayer;\r\n        },\r\n        fetch_uploader_skin: function (controlbarid, element) {\r\n            return false;\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            var self = this;\r\n\r\n            this.recorded = true;\r\n\r\n            //also start the model audio playback\r\n            this.do_play_resource(ip);\r\n            ip.controlbar.resourceplayer.bind('ended', function () {\r\n                ip.controlbar.stopbutton.click();\r\n            });\r\n\r\n            self.set_visual_mode('recordingmode', ip);\r\n            /*\r\n            ip.controlbar.stopbutton.attr('disabled',false);\r\n            ip.controlbar.savebutton.attr('disabled',false);\r\n            */\r\n        },\r\n\r\n        onMediaSuccess_audio: function (controlbarid) {\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n            var self=this;\r\n            ip.controlbar.preview.attr('src', null);\r\n\r\n\r\n            this.recorded = true;\r\n\r\n            //also start the model audio playback\r\n            this.do_play_resource(ip);\r\n            ip.controlbar.resourceplayer.bind('ended', function () {\r\n                ip.controlbar.stopbutton.click();\r\n            });\r\n\r\n            self.set_visual_mode('recordingmode', ip);\r\n            /*\r\n            ip.controlbar.stopbutton.attr('disabled',false);;\r\n            ip.controlbar.savebutton.attr('disabled',false);\r\n            */\r\n        },\r\n\r\n        handle_timer_update: function (controlbarid) {\r\n            var ip = this.fetch_instanceprops(controlbarid);\r\n            this.update_status(controlbarid);\r\n            if (ip.timer.seconds == 0 && ip.timer.initseconds > 0) {\r\n                ip.controlbar.stopbutton.click();\r\n            }\r\n        },\r\n\r\n        update_status: function (controlbarid) {\r\n            /*\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\r\n        //set visuals for different states (ie recording or playing)\r\n        set_visual_mode: function (mode, ip) {\r\n            var self = this;\r\n\r\n            switch (mode) {\r\n\r\n                case 'recordingmode':\r\n                    //hide  buttons\r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                    ip.controlbar.startbutton.hide();\r\n                    self.disable_button(ip.controlbar.stopplaybackbutton);\r\n                    ip.controlbar.stopplaybackbutton.hide();\r\n                    self.disable_button(ip.controlbar.resourcestopbutton);\r\n                    ip.controlbar.resourcestopbutton.hide();\r\n\r\n\r\n                    //show  buttons  \r\n                    self.enable_button(ip.controlbar.stopbutton);\r\n                    ip.controlbar.stopbutton.show();\r\n                    self.disable_button(ip.controlbar.playbackbutton);\r\n                    ip.controlbar.playbackbutton.show();\r\n                    self.disable_button(ip.controlbar.resourceplaybutton);\r\n                    ip.controlbar.resourceplaybutton.show();\r\n\r\n                    break;\r\n\r\n                case 'resourceplayingmode':\r\n                    //hide  buttons\r\n                    self.disable_button(ip.controlbar.stopbutton);\r\n                    ip.controlbar.stopbutton.hide();\r\n                    self.disable_button(ip.controlbar.playbackbutton);\r\n                    ip.controlbar.playbackbutton.hide();\r\n                    self.disable_button(ip.controlbar.resourceplaybutton);\r\n                    ip.controlbar.resourceplaybutton.hide();\r\n\r\n                    //show buttons  \r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                    ip.controlbar.startbutton.show();\r\n                    self.disable_button(ip.controlbar.stopplaybackbutton);\r\n                    ip.controlbar.stopplaybackbutton.show();\r\n                    self.enable_button(ip.controlbar.resourcestopbutton);\r\n                    ip.controlbar.resourcestopbutton.show();\r\n                    break;\r\n\r\n                case 'playingbackmode':\r\n                    //hide  buttons\r\n                    self.disable_button(ip.controlbar.stopbutton);\r\n                    ip.controlbar.stopbutton.hide();\r\n                    self.disable_button(ip.controlbar.playbackbutton);\r\n                    ip.controlbar.playbackbutton.hide();\r\n                    self.disable_button(ip.controlbar.resourcestopbutton);\r\n                    ip.controlbar.resourcestopbutton.hide();\r\n\r\n                    //show buttons  \r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                    ip.controlbar.startbutton.show();\r\n                    self.enable_button(ip.controlbar.stopplaybackbutton);\r\n                    ip.controlbar.stopplaybackbutton.show();\r\n                    self.disable_button(ip.controlbar.resourceplaybutton);\r\n                    ip.controlbar.resourceplaybutton.show();\r\n                    break;\r\n\r\n                case 'neverrecordedmode':\r\n                    //hide buttons\r\n                    self.disable_button(ip.controlbar.stopbutton);\r\n                    ip.controlbar.stopbutton.hide();\r\n                    self.disable_button(ip.controlbar.stopplaybackbutton);\r\n                    ip.controlbar.stopplaybackbutton.hide();\r\n                    self.disable_button(ip.controlbar.resourcestopbutton);\r\n                    ip.controlbar.resourcestopbutton.hide();\r\n\r\n                    //show  buttons  \r\n                    self.enable_button(ip.controlbar.startbutton);\r\n                    ip.controlbar.startbutton.show();\r\n                    self.disable_button(ip.controlbar.playbackbutton);\r\n                    ip.controlbar.playbackbutton.show();\r\n                    self.enable_button(ip.controlbar.resourceplaybutton);\r\n                    ip.controlbar.resourceplaybutton.show();\r\n                    break;\r\n\r\n                case 'allstoppedmode':\r\n                    //hide buttons\r\n                    self.disable_button(ip.controlbar.stopbutton);\r\n                    ip.controlbar.stopbutton.hide();\r\n                    self.disable_button(ip.controlbar.stopplaybackbutton);\r\n                    ip.controlbar.stopplaybackbutton.hide();\r\n                    self.disable_button(ip.controlbar.resourcestopbutton);\r\n                    ip.controlbar.resourcestopbutton.hide();\r\n\r\n                    //show  buttons  \r\n                    self.enable_button(ip.controlbar.startbutton);\r\n                    ip.controlbar.startbutton.show();\r\n                    self.enable_button(ip.controlbar.playbackbutton);\r\n                    ip.controlbar.playbackbutton.show();\r\n                    self.enable_button(ip.controlbar.resourceplaybutton);\r\n                    ip.controlbar.resourceplaybutton.show();\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, resourceplayer) {\r\n            var controlbar = this.prepare_controlbar(element, controlbarid, preview, resourceplayer, 'video');\r\n            return controlbar;\r\n        },\r\n        //insert the control bar and return it to be reused\r\n        insert_controlbar_audio: function (element, controlbarid, preview, resourceplayer) {\r\n            var controlbar = this.prepare_controlbar(element, controlbarid, preview, resourceplayer, '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, resourceplayer, 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 = mediatype == 'video' ? 'poodll_mediarecorder_video' : 'poodll_mediarecorder_audio';\r\n\r\n            //load resource player with the src of the resource audio (or video ...never)\r\n            resourceplayer = resourceplayer.replace('@@RESOURCEURL@@', ip.config.resource);\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 controls = '<div class=\"poodll_mediarecorderholder_shadow '\r\n                + recorder_class + ' ' + size_class + '\" id=\"holder_' + controlbarid + '\">';\r\n\r\n            controls += '<div class=\"poodll_mediarecorderbox_shadow\" id=\"' + controlbarid + '\">';\r\n            controls += '<div class=\"style-holder ' + skin_style + '\">';\r\n            var status = this.fetch_status_bar('shadow');\r\n            controls += status,\r\n                controls += preview,\r\n                controls += resourceplayer,\r\n\r\n                controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_shadow poodll_play-resource_shadow\">'\r\n                    + '<span class=\"fa fa-play-circle fa-4x\"></span>'\r\n                    + '</button>';\r\n\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_shadow poodll_stop-resource_shadow\" style=\"display: none;\">'\r\n                + '<span class=\"fa fa-stop-circle fa-4x\"></span>'\r\n                + '</button>';\r\n\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_shadow poodll_start-recording_shadow\">'\r\n                + '<span class=\"fa fa-play-circle fa-4x\"></span>'\r\n                + '<hr style=\"color: white\">'\r\n                + '<span class=\"fa fa-microphone fa-4x\"></span>'\r\n                + '</button>';\r\n\r\n            controls += '<button type=\"button\" class=\"poodll_mediarecorder_button_shadow poodll_stop-recording_shadow pmr_disabled\" style=\"display: none;\" disabled>'\r\n                + '<span class=\"fa fa-stop-circle fa-4x\"></span>'\r\n                + '</button>';\r\n\r\n            controls += ' <button type=\"button\" class=\"poodll_mediarecorder_button_shadow poodll_playback-recording_shadow pmr_disabled\" disabled>'\r\n                + '<span class=\"fa fa-play-circle fa-4x\"></span>'\r\n                + '</button>';\r\n\r\n            controls += ' <button type=\"button\" class=\"poodll_mediarecorder_button_shadow poodll_stopplayback-recording_shadow\" style=\"display: none;\">'\r\n                + '<span class=\"fa fa-stop-circle fa-4x\"></span>'\r\n                + '</button>';\r\n\r\n            //completioncheck /*On hold for now Justin 20171007 */\r\n            // controls += ' <div class=\"poodll_mediarecorder_completion_shadow fa fa-circle fa-4x\"></div>';\r\n\r\n            //controls += '<button type=\"button\" class=\"poodll_save-recording_shadow pmr_disabled disabled hide>' + ss['recui_save'] +  '</button>';\r\n\r\n            controls += '<div class=\"marker\" style=\"display: none;\"><i class=\"fa fa-check\" aria-hidden=\"true\"></i></div>';\r\n            controls += '</div></div></div>';\r\n            $(element).prepend(controls);\r\n\r\n            var controlbar = {\r\n                marker: $('#' + controlbarid + '  .marker'),\r\n                status: $('#' + controlbarid + '  .poodll_status_shadow'),\r\n                resourceplayer: $('#' + controlbarid + '  .poodll_resourceplayer_shadow'),\r\n                preview: $('#' + controlbarid + '  .poodll_checkplayer_shadow'),\r\n                resourceplaybutton: $('#' + controlbarid + '  .poodll_play-resource_shadow'),\r\n                resourcestopbutton: $('#' + controlbarid + '  .poodll_stop-resource_shadow'),\r\n                startbutton: $('#' + controlbarid + '  .poodll_start-recording_shadow'),\r\n                stopbutton: $('#' + controlbarid + '  .poodll_stop-recording_shadow'),\r\n                playbackbutton: $('#' + controlbarid + '  .poodll_playback-recording_shadow'),\r\n                stopplaybackbutton: $('#' + controlbarid + '  .poodll_stopplayback-recording_shadow'),\r\n                /*On hold for now Justin 20171007 */\r\n                //completioncheck: $('#' + controlbarid + '  .poodll_mediarecorder_completion_shadow'),\r\n                savebutton: $('#' + controlbarid + '  .poodll_save-recording_shadow')\r\n            };\r\n            return controlbar;\r\n        }, //end of fetch_control_bar_shadow\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(controlbarid);\r\n\r\n            ip.controlbar.startbutton.click(function () {\r\n\r\n                pmr.do_start_audio(ip, onMediaSuccess);\r\n\r\n            });\r\n\r\n            ip.controlbar.stopbutton.click(function () {\r\n                pmr.do_stop_audio(ip);\r\n                self.disable_button(this);\r\n                var resourceplayer = ip.controlbar.resourceplayer;\r\n                if (resourceplayer && resourceplayer.get(0)) {\r\n                    resourceplayer.get(0).pause();\r\n                }\r\n\r\n                self.set_visual_mode('allstoppedmode', ip);\r\n\r\n                //stop model playback\r\n                self.do_stop_resource(ip);\r\n\r\n\r\n            });\r\n\r\n            ip.controlbar.playbackbutton.click(function () {\r\n                self.disable_button(this);\r\n\r\n\r\n                ip.controlbar.marker.show();\r\n\r\n                var resourceplayer = ip.controlbar.resourceplayer.get(0);\r\n                pmr.do_play_audio(ip, resourceplayer);\r\n                //flag resource player as needing reset\r\n                ip.mustResetResourcePlayer = true;\r\n\r\n                ////reset buttons when finished\r\n                ip.controlbar.resourceplayer.bind('ended', function () {\r\n                    self.set_visual_mode('allstoppedmode', ip);\r\n                });\r\n\r\n                //do visuals\r\n                self.set_visual_mode('playingbackmode', ip);\r\n\r\n                //complete the 'activity'\r\n                self.set_completion(true, ip);\r\n\r\n            });\r\n\r\n            ip.controlbar.stopplaybackbutton.click(function () {\r\n\r\n                self.do_stop_resource(ip);\r\n\r\n                //do visuals\r\n                self.set_visual_mode('allstoppedmode', ip);\r\n\r\n            });\r\n\r\n            ip.controlbar.resourceplaybutton.click(function () {\r\n\r\n                /*GLEN*/\r\n                /*\r\n                $(this).removeClass('shadow-active');\r\n                $('.poodll_stop-resource_shadow').addClass('shadow-active');\r\n                */\r\n\r\n                //actually play resource (or recording)\r\n                self.do_play_resource(ip);\r\n\r\n                ////reset buttons when finished\r\n                ip.controlbar.resourceplayer.bind('ended', function () {\r\n                    if (self.recorded) {\r\n                        self.set_visual_mode('allstoppedmode', ip);\r\n                    } else {\r\n                        self.set_visual_mode('neverrecordedmode', ip);\r\n                    }\r\n                });\r\n\r\n                //do visuals\r\n                self.set_visual_mode('resourceplayingmode', ip);\r\n\r\n            });\r\n\r\n            ip.controlbar.resourcestopbutton.click(function () {\r\n\r\n                /* GLEN */\r\n                //console.log('clicked');\r\n                /*\r\n                $(this).removeClass('shadow-active');\r\n                $('.poodll_start-recording_shadow').addClass('shadow-active');\r\n                */\r\n\r\n                self.do_stop_resource(ip);\r\n\r\n                //do visuals\r\n                if (self.recorded) {\r\n                    self.set_visual_mode('allstoppedmode', ip);\r\n                } else {\r\n                    self.set_visual_mode('neverrecordedmode', ip);\r\n                }\r\n\r\n            });\r\n\r\n            ip.controlbar.savebutton.click(function () {\r\n                self.disable_button(this);\r\n                if (ip.blobs && ip.blobs.length > 0) {\r\n                    pmr.do_save_audio(ip);\r\n                    self.uploaded = true;\r\n                    self.disable_button(ip.controlbar.startbutton);\r\n                } else {\r\n                    ip.uploader.Output(M.util.get_string('recui_nothingtosaveerror', 'filter_poodll'));\r\n                }//end of if self.blobs\t\t\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_shadow\r\n\r\n\r\n        set_completion: function (completed, ip) {\r\n            /*On hold for now Justin 20171007 */\r\n            return;\r\n\r\n            var completioncheck = ip.controlbar.completioncheck;\r\n            if (completed) {\r\n                completioncheck.removeClass('fa-circle');\r\n                completioncheck.addClass('fa-check-circle');\r\n            } else {\r\n                completioncheck.removeClass('fa-check-circle');\r\n                completioncheck.addClass('fa-circle');\r\n            }\r\n        },\r\n\r\n        //DO stop playing the resource\r\n        do_stop_resource: function (ip) {\r\n            console.log('stopped the resource');\r\n            var resourceplayer = ip.controlbar.resourceplayer.get(0);\r\n            resourceplayer.pause();\r\n            resourceplayer.currentTime = 0;\r\n\r\n            if (ip.mustResetResourcePlayer) {\r\n                ip.mustResetResourcePlayer = false;\r\n                resourceplayer.src = ip.config.resource;\r\n                var ppromise = resourceplayer.load();\r\n                /* \r\n\t\t\t\t// playPromise won’t be defined.\r\n\t\t\t\tif (ppromise !== undefined) {\r\n\t\t\t\t\tppromise.then(function() {resourceplayer.pause();});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tresourceplayer.oncanplay(resourceplayer.pause());\r\n\t\t\t\t}\r\n\t\t\t\t*/\r\n            }\r\n        },\r\n\r\n\r\n        //do the play of resource\r\n        do_play_resource: function (ip) {\r\n            //if was used to play recording, we need to reset it\r\n            var resourceplayer = ip.controlbar.resourceplayer.get(0);\r\n            resourceplayer.play();\r\n            resourceplayer.currentTime = 0;\r\n        },\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\r\n});//total end\r\n"],"names":["define","$","log","utils","debug","instanceprops","pmr","uploaded","recorded","mustResetResourcePlayer","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","onMediaError","e","console","error","onMediaSuccess_video","do_play_resource","controlbar","resourceplayer","bind","stopbutton","click","set_visual_mode","onMediaSuccess_audio","preview","attr","handle_timer_update","update_status","timer","seconds","initseconds","mode","disable_button","startbutton","stopplaybackbutton","resourcestopbutton","enable_button","playbackbutton","resourceplaybutton","insert_controlbar_video","prepare_controlbar","insert_controlbar_audio","mediatype","skin_style","config","media_skin_style","recorder_class","replace","resource","size_class","size","fetch_strings","controls","prepend","marker","status","savebutton","register_controlbar_events_video","onMediaSuccess","register_controlbar_events_audio","self","do_start_audio","do_stop_audio","get","pause","do_stop_resource","do_play_audio","set_completion","blobs","length","do_save_audio","uploader","Output","M","util","get_string","window","onbeforeunload","completed","currentTime","src","load","play","button","removeClass","addClass"],"mappings":"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"}