context = window logger = context.JK.logger NoVideoRecordActive = 0 WebCamRecordActive = 1 ScreenRecordActive = 2 WebCam2RecordActive = 3 DesktopRecordActive = 4 mixins = [] # make sure this is actually us opening the window, not someone else (by checking for MixerStore) # this check ensures we attempt to listen if this component is created in a popup reactContext = if window.opener? then window.opener else window accessOpener = false if window.opener? try m = window.opener.MixerStore accessOpener = true catch e reactContext = window MixerStore = reactContext.MixerStore RecordingStore = reactContext.RecordingStore VideoStore = reactContext.VideoStore if accessOpener mixins.push(Reflux.listenTo(RecordingStore,"onRecordingStateChanged")) # mixins.push(Reflux.listenTo(MixerStore,"onMixersChanged")) @PopupRecordingStartStop = React.createClass({ mixins: mixins #onMixersChanged: (mixers) -> # this.setState(chatMixer: mixers.chatMixer) onRecordingStateChanged: (recordingState) -> if @unloaded #console.log("PopupMediaControls unloaded. ignore onMixersChnaged") return this.setState(isRecording: recordingState.isRecording, recordedOnce: this.state.recordedOnce || recordingState.isRecording) startStopRecording: () -> if this.state.isRecording window.opener.RecordingActions.stopRecording() else recordChat = false recordVideo = NoVideoRecordActive $root = $(this.getDOMNode()) if @inputType != 'audio-only' selection = $root.find('#recording-selection').val() if selection == 'video-window' recordVideo = ScreenRecordActive else if selection == 'webcam-only' recordVideo = WebCamRecordActive else if selection == 'webcam-only-2' recordVideo = WebCam2RecordActive else recordVideo = DesktopRecordActive recordChat = $root.find('#include-chat').is(':checked') # if the video window isn't open, but a video option was selected... window.opener.VideoActions.refreshVideoState.trigger() if recordVideo != NoVideoRecordActive && !VideoStore.anyVideoOpen #if recordVideo != NoVideoRecordActive && !VideoStore.videoShared logger.debug("prevent video from opening", VideoStore) context.JK.prodBubble($root.find('.control'), 'video-window-not-open', {}, {positions:['bottom']}) return if recordVideo == WebCamRecordActive && !VideoStore.openVideoSources.webcam1 context.JK.prodBubble($root.find('.control'), 'no-webcam-1', {}, {positions:['bottom']}) return if recordVideo == WebCam2RecordActive && !VideoStore.openVideoSources.webcam2 context.JK.prodBubble($root.find('.control'), 'no-webcam-2', {}, {positions:['bottom']}) return if recordVideo == DesktopRecordActive && !VideoStore.openVideoSources.screen_capture context.JK.prodBubble($root.find('.control'), 'no-screen-capture', {}, {positions:['bottom']}) return logger.debug("@inputType, @udiotye", recordChat, recordVideo) window.opener.RecordingActions.startRecording(recordVideo, recordChat) onNoteShowHide: () -> $root = $(this.getDOMNode()) audioVideoValue = $root.find('input[name="recording-input-type"]').val() console.log("audio video value", audioVideoValue) this.setState(showNote: !this.state.showNote) getInitialState: () -> {isRecording: window.ParentIsRecording, showNote: true, recordedOnce: false, chatMixer: MixerStore.mixers?.chatMixer} render: () -> recordingVerb = if this.state.isRecording then 'Stop' else 'Start' recordingBtnClasses = classNames({ "currently-recording" : this.state.isRecording, "control" : true }) noteJSX = `
Important Note
While playing in your session, you are listening to your own personal mix. This recording will use the master mix, which may sound very different. To hear and adjust your master mix settings, click the MIXER button in the session toolbar.
` chatHelp = `[?]` recordingJSX = `

Recording Type

` if this.state.showNote noteText = 'hide note' else noteText = 'show note' noteShowHideJSX = `{noteText}` note = null recordingOptions = null noteShowHide = null if this.state.showNote && !this.state.isRecording && !this.state.recordedOnce # should we show the note itself? Only if not recording, too note = noteJSX if !this.state.isRecording && !this.state.recordedOnce noteShowHide = noteShowHideJSX if gon.global.video_available == "full" recordingOptions = recordingJSX `
{recordingVerb} Recording
{recordingOptions} {note} {noteShowHide}
` windowUnloaded: () -> @unloaded = true window.unloaded = true window.opener.RecordingActions.recordingControlsClosed() onChatHelp: (e) -> e.preventDefault() context.JK.prodBubble($(e.target), 'vid-record-chat-input', {}, {positions:['left']}) trackInputType: (e) -> $checkedType = $(e.target); @inputType = $checkedType.val() logger.debug("updated @inputType",e.target, @inputType) trackAudioType: (e) -> $checkedType = $(e.target); @audioType = $checkedType.val() logger.debug("updated @audioType", @inputType) componentDidMount: () -> $(window).unload(@windowUnloaded) $root = jQuery(this.getDOMNode()) $recordingType = $root.find('input[type="radio"]') context.JK.checkbox($recordingType) @inputType = 'audio-only' @audioType = 'audio-only' $root.find('input[name="recording-input-type"]').on('ifChanged', @trackInputType) $root.find('input[name="recording-input-chat-option"]').on('ifChanged', @trackAudioType) $recordingRegion = $root.find('#recording-selection') #console.log("$recordingou", $recordingRegion) #context.JK.dropdown($recordingRegion) $includeChat = $root.find('#include-chat') context.JK.checkbox($includeChat) @resizeWindow() # this is necessary due to whatever the client's rendering behavior is. setTimeout(@resizeWindow, 300) componentDidUpdate: () -> @resizeWindow() $root = jQuery(this.getDOMNode()) $includeChat = $root.find('#include-chat') shouldComponentUpdate: () -> return !@unloaded resizeWindow: () => $container = $('#minimal-container') width = $container.width() height = $container.height() # there is 20px or so of unused space at the top of the page. can't figure out why it's there. (above #minimal-container) mysteryTopMargin = 20 # deal with chrome in real browsers offset = (window.outerHeight - window.innerHeight) + mysteryTopMargin # handle native client chrome that the above outer-inner doesn't catch #if navigator.userAgent.indexOf('JamKazam') > -1 #offset += 25 window.resizeTo(width, height + offset) })