/*** @jsx React.DOM */ function makeSettingName(game_settings) { return game_settings.game + '-' + game_settings.version; } var valid_settings = window.game_settings.map(function(setting) { return makeSettingName(setting); }); var pagenav = new History(valid_settings); function count_pcbids(machines) { var count = 0; machines.map(function(machine) { count += (machine.editable ? 1 : 0); }); return count; } var arcade_management = React.createClass({ getInitialState: function(props) { var credits = {}; Object.keys(window.users).map(function(userid) { credits[userid] = ''; }); return { id: window.arcade.id, name: window.arcade.name, description: window.arcade.description, paseli_enabled: window.arcade.paseli_enabled, paseli_infinite: window.arcade.paseli_infinite, mask_services_url: window.arcade.mask_services_url, pin: window.arcade.pin, editing_pin: false, new_pin: '', paseli_enabled_saving: false, paseli_infinite_saving: false, mask_services_url_saving: false, editing_machine: null, machines: window.machines, settings: window.game_settings, pcbcount: count_pcbids(window.machines), random_pcbid: { description: '', }, current_setting: pagenav.getInitialState(makeSettingName(window.game_settings[0])), settings_changed: {}, settings_saving: {}, settings_saved: {}, users: window.users, balances: window.balances, credits: credits, events: window.events, eventoffset: 0, eventlimit: 5, credit_card: '', credit_amount: '', }; }, componentDidMount: function() { pagenav.onChange(function(setting) { this.setState({current_setting: setting}); }.bind(this)); this.refreshArcade(); }, componentDidUpdate: function() { if (this.focus_element && this.focus_element != this.already_focused) { this.focus_element.focus(); this.already_focused = this.focus_element; } }, refreshArcade: function() { AJAX.get( Link.get('refresh'), function(response) { this.setState({ users: response.users, balances: response.balances, machines: response.machines, pcbcount: count_pcbids(response.machines), events: response.events, }); // Refresh every 5 seconds setTimeout(this.refreshArcade, 5000); }.bind(this) ); }, savePin: function(event) { AJAX.post( Link.get('update_pin'), {pin: this.state.new_pin}, function(response) { this.setState({ pin: response.pin, new_pin: '', editing_pin: false, }); }.bind(this) ); event.preventDefault(); }, getSettingIndex: function(setting_name) { var real_index = -1; this.state.settings.map(function(game_settings, index) { var current = makeSettingName(game_settings); if (current == setting_name) { real_index = index; } }.bind(this)); return real_index; }, togglePaseliEnabled: function(event) { this.setState({paseli_enabled_saving: true}) AJAX.post( Link.get('paseli_enabled'), {value: !this.state.paseli_enabled}, function(response) { this.setState({ paseli_enabled: response.value, paseli_enabled_saving: false, }); }.bind(this) ); event.preventDefault(); }, togglePaseliInfinite: function(event) { this.setState({paseli_infinite_saving: true}) AJAX.post( Link.get('paseli_infinite'), {value: !this.state.paseli_infinite}, function(response) { this.setState({ paseli_infinite: response.value, paseli_infinite_saving: false, }); }.bind(this) ); event.preventDefault(); }, toggleMaskServicesURL: function(event) { this.setState({mask_services_url_saving: true}) AJAX.post( Link.get('mask_services_url'), {value: !this.state.mask_services_url}, function(response) { this.setState({ mask_services_url: response.value, mask_services_url_saving: false, }); }.bind(this) ); event.preventDefault(); }, setChanged: function(val) { this.state.settings_changed[this.state.current_setting] = val; return this.state.settings_changed; }, setSaving: function(val) { this.state.settings_saving[this.state.current_setting] = val; return this.state.settings_saving; }, setSaved: function(val) { this.state.settings_saved[this.state.current_setting] = val; return this.state.settings_saved; }, saveSettings: function(event) { var index = this.getSettingIndex(this.state.current_setting); this.setState({settings_saving: this.setSaving(true), settings_saved: this.setSaved(false)}); AJAX.post( Link.get('update_settings'), this.state.settings[index], function(response) { this.state.settings[index] = response.game_settings; this.setState({ settings: this.state.settings, settings_saving: this.setSaving(false), settings_saved: this.setSaved(true), settings_changed: this.setChanged(false), }); }.bind(this) ); event.preventDefault(); }, addBalance: function(event) { var intval = parseInt(this.state.credit_amount); if (isNaN(intval)) { intval = 0; } AJAX.post( Link.get('add_balance'), { credits: intval, card: this.state.credit_card, }, function(response) { var credits = {}; Object.keys(response.users).map(function(userid) { credits[userid] = ''; }); console.log('huh?'); this.setState({ users: response.users, balances: response.balances, credits: credits, events: response.events, credit_card: '', credit_amount: '', }); }.bind(this) ); event.preventDefault(); }, updateBalance: function(event) { var updates = {}; Object.keys(this.state.credits).map(function(userid) { var intval = parseInt(this.state.credits[userid]); if (!isNaN(intval)) { updates[userid] = intval; } }.bind(this)); AJAX.post( Link.get('update_balance'), {credits: updates}, function(response) { var credits = {}; Object.keys(response.users).map(function(userid) { credits[userid] = ''; }); this.setState({ users: response.users, balances: response.balances, credits: credits, events: response.events, }); }.bind(this) ); event.preventDefault(); }, renderPIN: function() { return ( { !this.state.editing_pin ? {this.state.pin} :
(this.focus_element = c)} value={this.state.new_pin} onChange={function(event) { var intRegex = /^\d*$/; if (event.target.value.length <= 8 && intRegex.test(event.target.value)) { this.setState({new_pin: event.target.value}); } }.bind(this)} name="pin" />
}
); }, generateNewMachine: function(event) { AJAX.post( Link.get('generatepcbid'), {machine: this.state.random_pcbid}, function(response) { this.setState({ machines: response.machines, pcbcount: count_pcbids(response.machines), random_pcbid: { description: '', }, }); }.bind(this) ); event.preventDefault(); }, deleteExistingMachine: function(event, pcbid) { $.confirm({ escapeKey: 'Cancel', animation: 'none', closeAnimation: 'none', title: 'Delete PCBID', content: 'Are you sure you want to delete this PCBID from the network?', buttons: { Delete: { btnClass: 'delete', action: function() { AJAX.post( Link.get('removepcbid'), {pcbid: pcbid}, function(response) { this.setState({ machines: response.machines, pcbcount: count_pcbids(response.machines), }); }.bind(this) ); }.bind(this), }, Cancel: function() { }, } }); event.preventDefault(); }, saveMachine: function(event) { machine = this.state.editing_machine; if (machine.port == '') { machine.port = 0; } AJAX.post( Link.get('updatepcbid'), {machine: this.state.editing_machine}, function(response) { this.setState({ machines: response.machines, pcbcount: count_pcbids(response.machines), editing_machine: null, }); }.bind(this) ); event.preventDefault(); }, renderDescription: function(machine) { if (this.state.editing_machine && machine.pcbid == this.state.editing_machine.pcbid) { return (this.focus_element = c)} value={ this.state.editing_machine.description } onChange={function(event) { var machine = this.state.editing_machine; machine.description = event.target.value; this.setState({ editing_machine: machine, }); }.bind(this)} />; } else { return ( { machine.description } ); } }, renderPort: function(machine) { if (this.state.editing_machine && machine.pcbid == this.state.editing_machine.pcbid) { return 0) { machine.port = parseInt(event.target.value); } else { machine.port = ''; } this.setState({ editing_machine: machine, }); } }.bind(this)} />; } else { return ( { machine.port } ); } }, renderEditButton: function(machine) { if (this.state.editing_machine) { if (this.state.editing_machine.pcbid == machine.pcbid) { return ( ); } else { return ; } } else { if (window.max_pcbids > 0 && machine.editable) { return ( ); } else { return ; } } }, render: function() { return (
{ this.state.name } { this.state.description ? { this.state.description } : no description } {this.renderPIN()} { this.state.paseli_enabled ? 'yes' : 'no' } { this.state.paseli_enabled_saving ? : null } { this.state.paseli_infinite ? 'yes' : 'no' } { this.state.paseli_infinite_saving ? : null } { this.state.mask_services_url ? 'yes' : 'no' } { this.state.mask_services_url_saving ? : null }

PCBIDs Assigned to This Arcade

{ window.enforcing && this.state.pcbcount < window.max_pcbids ?

Generate PCBID

Description
: null }

Game Settings For This Arcade

{ this.state.settings.map(function(game_settings) { var current = makeSettingName(game_settings); return (
{ this.state.settings[this.getSettingIndex(this.state.current_setting)].ints.map(function(setting, index) { return (
); }.bind(this))} { this.state.settings[this.getSettingIndex(this.state.current_setting)].bools.map(function(setting, index) { return (
); }.bind(this))} { this.state.settings[this.getSettingIndex(this.state.current_setting)].strs.map(function(setting, index) { return (
); }.bind(this))} { this.state.settings[this.getSettingIndex(this.state.current_setting)].longstrs.map(function(setting, index) { return (