context = window logger = context.JK.logger NoVideoRecordActive = 0 WebCamRecordActive = 1 ScreenRecordActive = 2 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' if $root.find('#recording-selection').val() == 'video-window' recordVideo = ScreenRecordActive else recordVideo = WebCamRecordActive recordChat = $root.find('#include-chat').is(':checked') # if the video window isn't open, but a video option was selected... 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 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) })