diff --git a/README b/README new file mode 100644 index 0000000..f4e6c3c --- /dev/null +++ b/README @@ -0,0 +1,13 @@ +MoneyGo README + +Installation +============ + +First, install npm in your distribution: +$ sudo pacman -S npm + +Install browserify globally: +$ sudo npm install -g browserify + +Next, install browserify, babel, react, react-bootstrap, react-widgets, and globalize in our directory using npm: +$ cd static && npm install browserify react react-dom react-addons-update react-bootstrap react-widgets babelify babel-preset-react globalize cldr-data diff --git a/static/AccountCombobox.js b/static/AccountCombobox.js new file mode 100644 index 0000000..b4f9fa9 --- /dev/null +++ b/static/AccountCombobox.js @@ -0,0 +1,37 @@ +var React = require('react'); + +var Combobox = require('react-widgets').Combobox; + +module.exports = React.createClass({ + displayName: "AccountCombobox", + getDefaultProps: function() { + return { + includeRoot: true, + rootName: "New Top-level Account" + }; + }, + handleAccountChange: function(account) { + if (this.props.onChange != null && + account.hasOwnProperty('AccountId') && + (this.props.account_map.hasOwnProperty([account.AccountId]) || + account.AccountId == -1)) { + this.props.onChange(account) + } + }, + render: function() { + var accounts = getAccountDisplayList(this.props.accounts, this.props.includeRoot, this.props.rootName); + var className = ""; + if (this.props.className) + className = this.props.className; + return ( + + ); + } +}); diff --git a/static/account_register.js b/static/AccountRegister.js similarity index 94% rename from static/account_register.js rename to static/AccountRegister.js index 648383f..f6156a6 100644 --- a/static/account_register.js +++ b/static/AccountRegister.js @@ -1,28 +1,35 @@ -// Import all the objects we want to use from ReactBootstrap +var React = require('react'); +var ReactDOM = require('react-dom'); +var react_update = require('react-addons-update'); + +var ReactBootstrap = require('react-bootstrap'); var Alert = ReactBootstrap.Alert; var Modal = ReactBootstrap.Modal; var Pagination = ReactBootstrap.Pagination; - var Label = ReactBootstrap.Label; var Table = ReactBootstrap.Table; var Grid = ReactBootstrap.Grid; var Row = ReactBootstrap.Row; var Col = ReactBootstrap.Col; var Panel = ReactBootstrap.Panel; - +var Input = ReactBootstrap.Input; var Button = ReactBootstrap.Button; +var ButtonGroup = ReactBootstrap.ButtonGroup; var ButtonToolbar = ReactBootstrap.ButtonToolbar; - var ProgressBar = ReactBootstrap.ProgressBar; +var Glyphicon = ReactBootstrap.Glyphicon; -var DateTimePicker = ReactWidgets.DateTimePicker; +var DateTimePicker = require('react-widgets').DateTimePicker; +var Combobox = require('react-widgets').Combobox; + +var AccountCombobox = require('./AccountCombobox.js'); const TransactionRow = React.createClass({ handleClick: function(e) { const refs = ["date", "number", "description", "account", "status", "amount"]; for (var ref in refs) { - if (this.refs[refs[ref]].getDOMNode() == e.target) { + if (this.refs[refs[ref]] == e.target) { this.props.onEdit(this.props.transaction, refs[ref]); return; } @@ -135,7 +142,7 @@ const AmountInput = React.createClass({ var symbol = "?"; if (this.props.security) symbol = this.props.security.Symbol; - var bsStyle = ""; + var bsStyle = undefined; if (this.props.bsStyle) bsStyle = this.props.bsStyle; @@ -173,7 +180,7 @@ const AddEditTransactionModal = React.createClass({ }, handleDescriptionChange: function() { this.setState({ - transaction: React.addons.update(this.state.transaction, { + transaction: react_update(this.state.transaction, { Description: {$set: this.refs.description.getValue()} }) }); @@ -182,7 +189,7 @@ const AddEditTransactionModal = React.createClass({ if (date == null) return; this.setState({ - transaction: React.addons.update(this.state.transaction, { + transaction: react_update(this.state.transaction, { Date: {$set: date} }) }); @@ -190,7 +197,7 @@ const AddEditTransactionModal = React.createClass({ handleStatusChange: function(status) { if (status.hasOwnProperty('StatusId')) { this.setState({ - transaction: React.addons.update(this.state.transaction, { + transaction: react_update(this.state.transaction, { Status: {$set: status.StatusId} }) }); @@ -198,21 +205,21 @@ const AddEditTransactionModal = React.createClass({ }, handleAddSplit: function() { this.setState({ - transaction: React.addons.update(this.state.transaction, { + transaction: react_update(this.state.transaction, { Splits: {$push: [new Split()]} }) }); }, handleDeleteSplit: function(split) { this.setState({ - transaction: React.addons.update(this.state.transaction, { + transaction: react_update(this.state.transaction, { Splits: {$splice: [[split, 1]]} }) }); }, handleUpdateNumber: function(split) { var transaction = this.state.transaction; - transaction.Splits[split] = React.addons.update(transaction.Splits[split], { + transaction.Splits[split] = react_update(transaction.Splits[split], { Number: {$set: this.refs['number-'+split].getValue()} }); this.setState({ @@ -221,7 +228,7 @@ const AddEditTransactionModal = React.createClass({ }, handleUpdateMemo: function(split) { var transaction = this.state.transaction; - transaction.Splits[split] = React.addons.update(transaction.Splits[split], { + transaction.Splits[split] = react_update(transaction.Splits[split], { Memo: {$set: this.refs['memo-'+split].getValue()} }); this.setState({ @@ -230,7 +237,7 @@ const AddEditTransactionModal = React.createClass({ }, handleUpdateAccount: function(account, split) { var transaction = this.state.transaction; - transaction.Splits[split] = React.addons.update(transaction.Splits[split], { + transaction.Splits[split] = react_update(transaction.Splits[split], { SecurityId: {$set: -1}, AccountId: {$set: account.AccountId} }); @@ -240,7 +247,7 @@ const AddEditTransactionModal = React.createClass({ }, handleUpdateAmount: function(split) { var transaction = this.state.transaction; - transaction.Splits[split] = React.addons.update(transaction.Splits[split], { + transaction.Splits[split] = react_update(transaction.Splits[split], { Amount: {$set: new Big(this.refs['amount-'+split].getValue())} }); this.setState({ @@ -294,7 +301,7 @@ const AddEditTransactionModal = React.createClass({ var self = this; var s = this.state.transaction.Splits[i]; var security = null; - var amountValidation = ""; + var amountValidation = undefined; var accountValidation = ""; if (s.AccountId in this.props.account_map) { security = this.props.security_map[this.props.account_map[s.AccountId].SecurityId]; @@ -355,7 +362,7 @@ const AddEditTransactionModal = React.createClass({ account_map={this.props.account_map} value={s.AccountId} includeRoot={false} - onSelect={updateAccountFn} + onChange={updateAccountFn} ref={"account-"+i} className={accountValidation}/> @@ -536,7 +543,7 @@ const ImportTransactionsModal = React.createClass({ panel = (Your import is now complete.); } - var buttonsDisabled = (this.state.importing) ? "disabled" : ""; + var buttonsDisabled = (this.state.importing) ? true : false; var button1 = []; var button2 = []; if (!this.state.imported && this.state.error == null) { @@ -545,9 +552,9 @@ const ImportTransactionsModal = React.createClass({ } else { button1 = (); } - var inputDisabled = (this.state.importing || this.state.error != null || this.state.imported) ? "disabled" : ""; + var inputDisabled = (this.state.importing || this.state.error != null || this.state.imported) ? true : false; return ( - + Import Transactions @@ -577,7 +584,8 @@ const ImportTransactionsModal = React.createClass({ } }); -const AccountRegister = React.createClass({ +module.exports = React.createClass({ + displayName: "AccountRegister", getInitialState: function() { return { importingTransactions: false, @@ -591,7 +599,7 @@ const AccountRegister = React.createClass({ }; }, resize: function() { - var div = React.findDOMNode(this); + var div = ReactDOM.findDOMNode(this); this.setState({height: div.parentElement.clientHeight - 64}); }, componentDidMount: function() { @@ -830,7 +838,7 @@ const AccountRegister = React.createClass({ ); } - var disabled = (this.props.selectedAccount == null) ? "disabled" : ""; + var disabled = (this.props.selectedAccount == null) ? true : false; return (
diff --git a/static/AccountSettingsModal.js b/static/AccountSettingsModal.js new file mode 100644 index 0000000..99d41fe --- /dev/null +++ b/static/AccountSettingsModal.js @@ -0,0 +1,166 @@ +var React = require('react'); + +var Modal = require('react-bootstrap').Modal; +var Button = require('react-bootstrap').Button; +var ButtonGroup = require('react-bootstrap').ButtonGroup; +var Input = require('react-bootstrap').Input; + +module.exports = React.createClass({ + displayName: "AccountSettingsModal", + _getInitialState: function(props) { + return {error: "", + name: props.user.Name, + username: props.user.Username, + email: props.user.Email, + password: BogusPassword, + confirm_password: BogusPassword, + passwordChanged: false, + initial_password: BogusPassword}; + }, + getInitialState: function() { + return this._getInitialState(this.props); + }, + componentWillReceiveProps: function(nextProps) { + if (nextProps.show && !this.props.show) { + this.setState(this._getInitialState(nextProps)); + } + }, + passwordValidationState: function() { + if (this.state.passwordChanged) { + if (this.state.password.length >= 10) + return "success"; + else if (this.state.password.length >= 6) + return "warning"; + else + return "error"; + } + }, + confirmPasswordValidationState: function() { + if (this.state.confirm_password.length > 0) { + if (this.state.confirm_password == this.state.password) + return "success"; + else + return "error"; + } + }, + handleCancel: function() { + if (this.props.onCancel != null) + this.props.onCancel(); + }, + handleChange: function() { + if (this.refs.password.getValue() != this.state.initial_password) + this.setState({passwordChanged: true}); + this.setState({ + name: this.refs.name.getValue(), + username: this.refs.username.getValue(), + email: this.refs.email.getValue(), + password: this.refs.password.getValue(), + confirm_password: this.refs.confirm_password.getValue() + }); + }, + handleSubmit: function(e) { + var u = new User(); + var error = ""; + e.preventDefault(); + + u.UserId = this.props.user.UserId; + u.Name = this.state.name; + u.Username = this.state.username; + u.Email = this.state.email; + if (this.state.passwordChanged) { + u.Password = this.state.password; + if (u.Password != this.state.confirm_password) { + this.setState({error: "Error: password do not match"}); + return; + } + } else { + u.Password = BogusPassword; + } + + this.handleSaveSettings(u); + }, + handleSaveSettings: function(user) { + $.ajax({ + type: "PUT", + dataType: "json", + url: "user/"+user.UserId+"/", + data: {user: user.toJSON()}, + success: function(data, status, jqXHR) { + var e = new Error(); + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + user.Password = ""; + this.props.onSubmit(user); + } + }.bind(this), + error: function(jqXHR, status, error) { + var e = new Error(); + e.ErrorId = 5; + e.ErrorString = "Request Failed: " + status + error; + this.setState({error: e}); + }.bind(this), + }); + }, + render: function() { + return ( + + + Edit Account Settings + + + {this.state.error} +
+ + + + + +
+
+ + + + + + +
+ ); + } +}); diff --git a/static/accounts.js b/static/AccountsTab.js similarity index 88% rename from static/accounts.js rename to static/AccountsTab.js index 2f8fc06..ebc9194 100644 --- a/static/accounts.js +++ b/static/AccountsTab.js @@ -1,51 +1,24 @@ -// Import all the objects we want to use from ReactBootstrap -var ListGroup = ReactBootstrap.ListGroup; -var ListGroupItem = ReactBootstrap.ListGroupItem; +var React = require('react'); +var ReactDOM = require('react-dom'); +var ReactBootstrap = require('react-bootstrap'); var Grid = ReactBootstrap.Grid; var Row = ReactBootstrap.Row; var Col = ReactBootstrap.Col; - +var Input = ReactBootstrap.Input; var Button = ReactBootstrap.Button; var ButtonGroup = ReactBootstrap.ButtonGroup; var Glyphicon = ReactBootstrap.Glyphicon; +var ListGroup = ReactBootstrap.ListGroup; +var ListGroupItem = ReactBootstrap.ListGroupItem; +var Collapse = ReactBootstrap.Collapse; +var Modal = ReactBootstrap.Modal; +var Collapse = ReactBootstrap.Collapse; -var CollapsibleMixin = ReactBootstrap.CollapsibleMixin; +var Combobox = require('react-widgets').Combobox; -var Combobox = ReactWidgets.Combobox; - -const AccountCombobox = React.createClass({ - getDefaultProps: function() { - return { - includeRoot: true, - rootName: "New Top-level Account" - }; - }, - handleAccountChange: function(account) { - if (this.props.onSelect != null && - account.hasOwnProperty('AccountId') && - (this.props.account_map.hasOwnProperty([account.AccountId]) || - account.AccountId == -1)) { - this.props.onSelect(account) - } - }, - render: function() { - var accounts = getAccountDisplayList(this.props.accounts, this.props.includeRoot, this.props.rootName); - var className = ""; - if (this.props.className) - className = this.props.className; - return ( - - ); - } -}); +var AccountCombobox = require('./AccountCombobox.js'); +var AccountRegister = require('./AccountRegister.js'); const AddEditAccountModal = React.createClass({ getInitialState: function() { @@ -139,7 +112,7 @@ const AddEditAccountModal = React.createClass({ account_map={this.props.account_map} value={this.state.parentaccountid} rootName={rootName} - onSelect={this.handleParentChange} + onChange={this.handleParentChange} ref="parent" /> @@ -179,6 +152,7 @@ const AddEditAccountModal = React.createClass({ } }); + const DeleteAccountModal = React.createClass({ getInitialState: function() { if (this.props.initialAccount != null) @@ -263,7 +237,7 @@ const DeleteAccountModal = React.createClass({ accounts={this.props.accounts} account_map={this.props.account_map} value={this.state.accountid} - onSelect={this.handleChange}/> + onChange={this.handleChange}/> {checkbox} @@ -280,12 +254,8 @@ const DeleteAccountModal = React.createClass({ }); const AccountTreeNode = React.createClass({ - mixins: [CollapsibleMixin], - getCollapsibleDOMNode: function() { - return React.findDOMNode(this.refs.children); - }, - getCollapsibleDimensionValue: function() { - return React.findDOMNode(this.refs.children).scrollHeight; + getInitialState: function() { + return {expanded: false}; }, handleToggle: function(e) { e.preventDefault(); @@ -300,8 +270,7 @@ const AccountTreeNode = React.createClass({ this.props.onSelect(this.props.account); }, render: function() { - var styles = this.getCollapsibleClassSet(); - var glyph = this.isExpanded() ? 'minus' : 'plus'; + var glyph = this.state.expanded ? 'minus' : 'plus'; var active = (this.props.selectedAccount != null && this.props.account.AccountId == this.props.selectedAccount.AccountId); var buttonStyle = active ? "info" : "link"; @@ -317,7 +286,7 @@ const AccountTreeNode = React.createClass({ }); var accounttreeClasses = "accounttree" var expandButton = []; - if (children.length > 0) + if (children.length > 0) { expandButton.push(( )); - else + } else { accounttreeClasses += "-nochildren"; + } return (
{expandButton} @@ -336,9 +306,11 @@ const AccountTreeNode = React.createClass({ className="accounttree-name"> {this.props.account.Name} -
- {children} -
+ +
+ {children} +
+
); } @@ -356,7 +328,7 @@ const AccountTree = React.createClass({ } }, resize: function() { - var div = React.findDOMNode(this); + var div = ReactDOM.findDOMNode(this); this.setState({height: div.parentElement.clientHeight - 73}); }, componentDidMount: function() { @@ -386,7 +358,8 @@ const AccountTree = React.createClass({ } }); -const AccountsTab = React.createClass({ +module.exports = React.createClass({ + displayName: "AccountsTab", getInitialState: function() { return { selectedAccount: null, @@ -436,7 +409,7 @@ const AccountsTab = React.createClass({ var accounts = this.props.accounts; var account_map = this.props.account_map; - var disabled = (this.state.selectedAccount == null) ? "disabled" : ""; + var disabled = (this.state.selectedAccount == null) ? true : false; return ( diff --git a/static/Makefile b/static/Makefile new file mode 100644 index 0000000..be43e62 --- /dev/null +++ b/static/Makefile @@ -0,0 +1,4 @@ +all: + browserify -t [ babelify --presets [ react ] ] main.js -o bundle.js + +.PHONY = all diff --git a/static/MoneyGoApp.js b/static/MoneyGoApp.js new file mode 100644 index 0000000..e574a6d --- /dev/null +++ b/static/MoneyGoApp.js @@ -0,0 +1,324 @@ +var React = require('react'); + +var ReactBootstrap = require('react-bootstrap'); +var Jumbotron = ReactBootstrap.Jumbotron; +var Tabs = ReactBootstrap.Tabs; +var Tab = ReactBootstrap.Tab; +var Modal = ReactBootstrap.Modal; + +var TopBar = require('./TopBar.js'); +var NewUserForm = require('./NewUserForm.js'); +var AccountSettingsModal = require('./AccountSettingsModal.js'); +var AccountsTab = require('./AccountsTab.js'); + +module.exports = React.createClass({ + displayName: "MoneyGoApp", + getInitialState: function() { + return { + hash: "home", + session: new Session(), + user: new User(), + accounts: [], + account_map: {}, + securities: [], + security_map: {}, + error: new Error(), + showAccountSettingsModal: false + }; + }, + componentDidMount: function() { + this.getSession(); + this.handleHashChange(); + if ("onhashchange" in window) { + window.onhashchange = this.handleHashChange; + } + }, + handleHashChange: function() { + var hash = location.hash.replace(/^#/, ''); + if (hash.length == 0) + hash = "home"; + if (hash != this.state.hash) + this.setHash(hash); + }, + setHash: function(hash) { + location.hash = hash; + if (this.state.hash != hash) + this.setState({hash: hash}); + }, + ajaxError: function(jqXHR, status, error) { + var e = new Error(); + e.ErrorId = 5; + e.ErrorString = "Request Failed: " + status + error; + this.setState({error: e}); + }, + getSession: function() { + $.ajax({ + type: "GET", + dataType: "json", + url: "session/", + success: function(data, status, jqXHR) { + var e = new Error(); + var s = new Session(); + e.fromJSON(data); + if (e.isError()) { + if (e.ErrorId != 1 /* Not Signed In*/) + this.setState({error: e}); + } else { + s.fromJSON(data); + } + this.setState({session: s}); + this.getUser(); + this.getAccounts(); + this.getSecurities(); + }.bind(this), + error: this.ajaxError + }); + }, + getUser: function() { + if (!this.state.session.isSession()) + return; + $.ajax({ + type: "GET", + dataType: "json", + url: "user/"+this.state.session.UserId+"/", + success: function(data, status, jqXHR) { + var e = new Error(); + var u = new User(); + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + u.fromJSON(data); + } + this.setState({user: u}); + }.bind(this), + error: this.ajaxError + }); + }, + getSecurities: function() { + if (!this.state.session.isSession()) { + this.setState({securities: [], security_map: {}}); + return; + } + $.ajax({ + type: "GET", + dataType: "json", + url: "security/", + success: function(data, status, jqXHR) { + var e = new Error(); + var securities = []; + var security_map = {}; + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + for (var i = 0; i < data.securities.length; i++) { + var s = new Security(); + s.fromJSON(data.securities[i]); + securities.push(s); + security_map[s.SecurityId] = s; + } + } + this.setState({securities: securities, security_map: security_map}); + }.bind(this), + error: this.ajaxError + }); + }, + getAccounts: function() { + if (!this.state.session.isSession()) { + this.setState({accounts: [], account_map: {}}); + return; + } + $.ajax({ + type: "GET", + dataType: "json", + url: "account/", + success: function(data, status, jqXHR) { + var e = new Error(); + var accounts = []; + var account_map = {}; + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + for (var i = 0; i < data.accounts.length; i++) { + var a = new Account(); + a.fromJSON(data.accounts[i]); + accounts.push(a); + account_map[a.AccountId] = a; + } + //Populate Children arrays in account objects + for (var i = 0; i < accounts.length; i++) { + var a = accounts[i]; + if (!a.isRootAccount()) + account_map[a.ParentAccountId].Children.push(a); + } + } + this.setState({accounts: accounts, account_map: account_map}); + }.bind(this), + error: this.ajaxError + }); + }, + handleErrorClear: function() { + this.setState({error: new Error()}); + }, + handleLoginSubmit: function(user) { + $.ajax({ + type: "POST", + dataType: "json", + url: "session/", + data: {user: user.toJSON()}, + success: function(data, status, jqXHR) { + var e = new Error(); + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + this.getSession(); + this.setHash("home"); + } + }.bind(this), + error: this.ajaxError + }); + }, + handleLogoutSubmit: function() { + this.setState({accounts: [], account_map: {}}); + $.ajax({ + type: "DELETE", + dataType: "json", + url: "session/", + success: function(data, status, jqXHR) { + var e = new Error(); + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } + this.setState({session: new Session(), user: new User()}); + }.bind(this), + error: this.ajaxError + }); + }, + handleAccountSettings: function() { + this.setState({showAccountSettingsModal: true}); + }, + handleSettingsSubmitted: function(user) { + this.setState({ + user: user, + showAccountSettingsModal: false + }); + }, + handleSettingsCanceled: function(user) { + this.setState({showAccountSettingsModal: false}); + }, + handleCreateNewUser: function() { + this.setHash("new_user"); + }, + handleGoHome: function(user) { + this.setHash("home"); + }, + handleCreateAccount: function(account) { + $.ajax({ + type: "POST", + dataType: "json", + url: "account/", + data: {account: account.toJSON()}, + success: function(data, status, jqXHR) { + var e = new Error(); + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + this.getAccounts(); + } + }.bind(this), + error: this.ajaxError + }); + }, + handleUpdateAccount: function(account) { + $.ajax({ + type: "PUT", + dataType: "json", + url: "account/"+account.AccountId+"/", + data: {account: account.toJSON()}, + success: function(data, status, jqXHR) { + var e = new Error(); + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + this.getAccounts(); + } + }.bind(this), + error: this.ajaxError + }); + }, + handleDeleteAccount: function(account) { + $.ajax({ + type: "DELETE", + dataType: "json", + url: "account/"+account.AccountId+"/", + success: function(data, status, jqXHR) { + var e = new Error(); + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + this.getAccounts(); + } + }.bind(this), + error: this.ajaxError + }); + }, + render: function() { + var mainContent; + if (this.state.hash == "new_user") { + mainContent = + } else { + if (this.state.user.isUser()) + mainContent = ( + + + + + Scheduled transactions go here... + Budgets go here... + Reports go here... + ); + else + mainContent = ( + +
+

MoneyGo

+

Go manage your money.

+
+
); + } + + return ( +
+ + {mainContent} + +
+ ); + } +}); diff --git a/static/NewUserForm.js b/static/NewUserForm.js new file mode 100644 index 0000000..22a3d2e --- /dev/null +++ b/static/NewUserForm.js @@ -0,0 +1,147 @@ +var React = require('react'); + +var Panel = require('react-bootstrap').Panel; +var Input = require('react-bootstrap').Input; +var Button = require('react-bootstrap').Button; +var ButtonGroup = require('react-bootstrap').ButtonGroup; + +module.exports = React.createClass({ + getInitialState: function() { + return {error: "", + name: "", + username: "", + email: "", + password: "", + confirm_password: "", + passwordChanged: false, + initial_password: ""}; + }, + passwordValidationState: function() { + if (this.state.passwordChanged) { + if (this.state.password.length >= 10) + return "success"; + else if (this.state.password.length >= 6) + return "warning"; + else + return "error"; + } + }, + confirmPasswordValidationState: function() { + if (this.state.confirm_password.length > 0) { + if (this.state.confirm_password == this.state.password) + return "success"; + else + return "error"; + } + }, + handleCancel: function() { + if (this.props.onCancel != null) + this.props.onCancel(); + }, + handleChange: function() { + if (this.refs.password.getValue() != this.state.initial_password) + this.setState({passwordChanged: true}); + this.setState({ + name: this.refs.name.getValue(), + username: this.refs.username.getValue(), + email: this.refs.email.getValue(), + password: this.refs.password.getValue(), + confirm_password: this.refs.confirm_password.getValue() + }); + }, + handleSubmit: function(e) { + var u = new User(); + var error = ""; + e.preventDefault(); + + u.Name = this.state.name; + u.Username = this.state.username; + u.Email = this.state.email; + u.Password = this.state.password; + if (u.Password != this.state.confirm_password) { + this.setState({error: "Error: password do not match"}); + return; + } + + this.handleCreateNewUser(u); + }, + handleCreateNewUser: function(user) { + $.ajax({ + type: "POST", + dataType: "json", + url: "user/", + data: {user: user.toJSON()}, + success: function(data, status, jqXHR) { + var e = new Error(); + e.fromJSON(data); + if (e.isError()) { + this.setState({error: e}); + } else { + this.props.onNewUser(); + } + }.bind(this), + error: function(jqXHR, status, error) { + var e = new Error(); + e.ErrorId = 5; + e.ErrorString = "Request Failed: " + status + error; + this.setState({error: e}); + }.bind(this), + }); + }, + render: function() { + var title =

Create New User

; + return ( + + {this.state.error} +
+ + + + + + + + + +
+
+ ); + } +}); diff --git a/static/top_bar.js b/static/TopBar.js similarity index 90% rename from static/top_bar.js rename to static/TopBar.js index 241fbc6..766ff5c 100644 --- a/static/top_bar.js +++ b/static/TopBar.js @@ -1,11 +1,11 @@ -// Import all the objects we want to use from ReactBootstrap -var Alert = ReactBootstrap.Alert; +var React = require('react'); +var ReactBootstrap = require('react-bootstrap'); +var Alert = ReactBootstrap.Alert; var Input = ReactBootstrap.Input; var Button = ReactBootstrap.Button; var DropdownButton = ReactBootstrap.DropdownButton; var MenuItem = ReactBootstrap.MenuItem; - var Row = ReactBootstrap.Row; var Col = ReactBootstrap.Col; @@ -62,7 +62,7 @@ const LoginBar = React.createClass({ }); const LogoutBar = React.createClass({ - handleOnSelect: function(key) { + handleOnSelect: function(e, key) { if (key == 1) { if (this.props.onAccountSettings != null) this.props.onAccountSettings(); @@ -79,7 +79,7 @@ const LogoutBar = React.createClass({
- + Account Settings Logout @@ -91,7 +91,8 @@ const LogoutBar = React.createClass({ } }); -const TopBar = React.createClass({ +module.exports = React.createClass({ + displayName: "TopBar", render: function() { var barContents; var errorAlert; diff --git a/static/external/fonts/rw-widgets.eot b/static/external/fonts/rw-widgets.eot deleted file mode 100644 index 78b52e1..0000000 Binary files a/static/external/fonts/rw-widgets.eot and /dev/null differ diff --git a/static/external/fonts/rw-widgets.svg b/static/external/fonts/rw-widgets.svg deleted file mode 100644 index dc047a1..0000000 --- a/static/external/fonts/rw-widgets.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - -Copyright (C) 2015 by original authors @ fontello.com - - - - - - - - - - - - - - \ No newline at end of file diff --git a/static/external/fonts/rw-widgets.ttf b/static/external/fonts/rw-widgets.ttf deleted file mode 100644 index e6901bf..0000000 Binary files a/static/external/fonts/rw-widgets.ttf and /dev/null differ diff --git a/static/external/fonts/rw-widgets.woff b/static/external/fonts/rw-widgets.woff deleted file mode 100644 index fc7902d..0000000 Binary files a/static/external/fonts/rw-widgets.woff and /dev/null differ diff --git a/static/external/react-bootstrap/react-bootstrap.min.js b/static/external/react-bootstrap/react-bootstrap.min.js deleted file mode 100644 index 4b5b720..0000000 --- a/static/external/react-bootstrap/react-bootstrap.min.js +++ /dev/null @@ -1,11 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):"object"==typeof exports?exports.ReactBootstrap=t(require("react")):e.ReactBootstrap=t(e.React)}(this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=r(39),s=n(o),a=r(40),i=n(a),l=r(22),u=n(l),p=r(41),d=n(p),f=r(3),c=n(f),h=r(42),m=n(h),y=r(9),v=n(y),g=r(14),b=n(g),P=r(23),O=n(P),T=r(43),_=n(T),w=r(47),C=n(w),E=r(44),N=n(E),x=r(45),k=n(x),S=r(46),M=n(S),j=r(10),D=n(j),I=r(48),A=n(I),B=r(15),K=n(B),L=r(16),H=n(L),R=r(11),F=n(R),W=r(24),U=n(W),z=r(26),V=n(z),q=r(50),G=n(q),Y=r(51),Q=n(Y),Z=r(27),J=n(Z),X=r(52),$=n(X),ee=r(53),te=n(ee),re=r(54),ne=n(re),oe=r(55),se=n(oe),ae=r(56),ie=n(ae),le=r(57),ue=n(le),pe=r(30),de=n(pe),fe=r(31),ce=n(fe),he=r(28),me=n(he),ye=r(29),ve=n(ye),ge=r(32),be=n(ge),Pe=r(59),Oe=n(Pe),Te=r(33),_e=n(Te),we=r(58),Ce=n(we),Ee=r(60),Ne=n(Ee),xe=r(18),ke=n(xe),Se=r(34),Me=n(Se),je=r(61),De=n(je),Ie=r(64),Ae=n(Ie),Be=r(66),Ke=n(Be),Le=r(35),He=n(Le),Re=r(62),Fe=n(Re),We=r(63),Ue=n(We),ze=r(67),Ve=n(ze),qe=r(68),Ge=n(qe),Ye=r(70),Qe=n(Ye),Ze=r(71),Je=n(Ze),Xe=r(72),$e=n(Xe),et=r(74),tt=n(et),rt=r(75),nt=n(rt),ot=r(73),st=n(ot),at=r(76),it=n(at),lt=r(77),ut=n(lt),pt=r(80),dt=n(pt),ft=r(78),ct=n(ft),ht=r(12),mt=n(ht),yt=r(19),vt=n(yt),gt=r(36),bt=n(gt);t["default"]={Accordion:s["default"],Affix:i["default"],AffixMixin:u["default"],Alert:d["default"],BootstrapMixin:c["default"],Badge:m["default"],Button:v["default"],ButtonGroup:b["default"],ButtonInput:O["default"],ButtonToolbar:_["default"],CollapsibleNav:C["default"],Carousel:N["default"],CarouselItem:k["default"],Col:M["default"],CollapsibleMixin:D["default"],DropdownButton:A["default"],DropdownMenu:K["default"],DropdownStateMixin:H["default"],FadeMixin:F["default"],FormControls:U["default"],Glyphicon:V["default"],Grid:G["default"],Input:Q["default"],Interpolate:J["default"],Jumbotron:$["default"],Label:te["default"],ListGroup:ne["default"],ListGroupItem:se["default"],MenuItem:ie["default"],Modal:ue["default"],ModalHeader:de["default"],ModalTitle:ce["default"],ModalBody:me["default"],ModalFooter:ve["default"],Nav:be["default"],Navbar:Oe["default"],NavItem:_e["default"],ModalTrigger:Ce["default"],Overlay:Me["default"],OverlayTrigger:Ne["default"],OverlayMixin:ke["default"],PageHeader:De["default"],Panel:Ke["default"],PanelGroup:He["default"],PageItem:Fe["default"],Pager:Ue["default"],Pagination:Ae["default"],Popover:Ve["default"],Portal:vt["default"],Position:bt["default"],ProgressBar:Ge["default"],Row:Qe["default"],SplitButton:Je["default"],SubNav:$e["default"],TabbedArea:tt["default"],Table:nt["default"],TabPane:st["default"],Thumbnail:it["default"],Tooltip:ut["default"],utils:dt["default"],Well:ct["default"],styleMaps:mt["default"]},e.exports=t["default"]},function(t,r){t.exports=e},function(e,t,r){var n;/*! - Copyright (c) 2015 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames - */ -!function(){"use strict";function o(){for(var e="",t=0;t1){var a=o(e),i=a[0],l=a.slice(1),u=""+l.join(", ")+" and "+i;return new Error("Invalid prop '"+r+"', only one of the following may be provided: "+u)}}return t}function p(e){if(void 0===e)throw new Error("No validations provided");if(!(e instanceof Array))throw new Error("Invalid argument must be an array");if(0===e.length)throw new Error("No validations provided");return function(t,r,n){for(var o=0;o>",m={isRequiredForA11y:function(e){return function(t,r,n){return null===t[r]?new Error("The prop `"+r+"` is required to make "+n+" accessible for users using assistive technologies such as screen readers `"):e(t,r,n)}},mountable:i(),elementType:d(),keyOf:l,singlePropFrom:u,all:p};t["default"]=m,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,r){var n=0;return u["default"].Children.map(e,function(e){if(u["default"].isValidElement(e)){var o=n;return n++,t.call(r,e,o)}return e})}function s(e,t,r){var n=0;return u["default"].Children.forEach(e,function(e){u["default"].isValidElement(e)&&(t.call(r,e,n),n++)})}function a(e){var t=0;return u["default"].Children.forEach(e,function(e){u["default"].isValidElement(e)&&t++}),t}function i(e){var t=!1;return u["default"].Children.forEach(e,function(e){!t&&u["default"].isValidElement(e)&&(t=!0)}),t}Object.defineProperty(t,"__esModule",{value:!0});var l=r(1),u=n(l);t["default"]={map:o,forEach:s,numberOf:a,hasValidComponent:i},e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e){var t=c["default"].findDOMNode(e);return t&&t.ownerDocument||document}function s(e){var t=o(e);return t.defaultView?t.defaultView:t.parentWindow}function a(e){var t=o(e);try{return t.activeElement||t.body}catch(r){return t.body}}function i(e){return o(e).defaultView.getComputedStyle(e,null)}function l(e){if(window.jQuery)return window.jQuery(e).offset();var t=o(e).documentElement,r={top:0,left:0};return"undefined"!=typeof e.getBoundingClientRect&&(r=e.getBoundingClientRect()),{top:r.top+window.pageYOffset-t.clientTop,left:r.left+window.pageXOffset-t.clientLeft}}function u(e,t){var r=void 0,n=void 0;return window.jQuery?t?(r=window.jQuery(e).offset(),n=window.jQuery(t).offset(),{top:r.top-n.top,left:r.left-n.left}):window.jQuery(e).position():(n={top:0,left:0},"fixed"===i(e).position?r=e.getBoundingClientRect():(t||(t=p(e)),r=l(e),"HTML"!==t.nodeName&&(n=l(t)),n.top+=parseInt(i(t).borderTopWidth,10),n.left+=parseInt(i(t).borderLeftWidth,10)),{top:r.top-n.top-parseInt(i(e).marginTop,10),left:r.left-n.left-parseInt(i(e).marginLeft,10)})}function p(e){for(var t=o(e).documentElement,r=e.offsetParent||t;r&&"HTML"!==r.nodeName&&"static"===i(r).position;)r=r.offsetParent;return r||t}function d(e,t){function r(e,t){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}return e&&e.contains?e.contains(t):e&&e.compareDocumentPosition?e===t||!!(16&e.compareDocumentPosition(t)):r(e,t)}Object.defineProperty(t,"__esModule",{value:!0});var f=r(1),c=n(f),h=!("undefined"==typeof window||!window.document||!window.document.createElement);t["default"]={canUseDom:h,contains:d,ownerWindow:s,ownerDocument:o,getComputedStyles:i,getOffset:l,getPosition:u,activeElement:a,offsetParent:p},e.exports=t["default"]},function(e,t){"use strict";function r(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return t.filter(function(e){return null!=e}).reduce(function(e,t){if("function"!=typeof t)throw new Error("Invalid Argument Type, must only provide functions, undefined, or null.");return null===e?t:function(){for(var r=arguments.length,n=Array(r),o=0;r>o;o++)n[o]=arguments[o];e.apply(this,n),t.apply(this,n)}},null)}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=r,e.exports=t["default"]},function(e,t,r){"use strict";function n(e,t,r){}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=n,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t` Component","http://react-bootstrap.github.io/components.html#utilities-portal")}})},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=r(1),s=n(o),a=r(4),i=n(a),l=r(18),u=s["default"].createClass({displayName:"Portal",propTypes:{container:i["default"].mountable},mixins:[l.OverlayMixin],renderOverlay:function(){return this.props.children?s["default"].Children.only(this.props.children):null},render:function(){return null}});t["default"]=u,e.exports=t["default"]},function(e,t){"use strict";function r(){var e=document.createElement("div"),t=e.style;"AnimationEvent"in window||delete a.animationend.animation,"TransitionEvent"in window||delete a.transitionend.transition;for(var r in a){var n=a[r];for(var o in n)if(o in t){i.push(n[o]);break}}}function n(e,t,r){e.addEventListener(t,r,!1)}function o(e,t,r){e.removeEventListener(t,r,!1)}Object.defineProperty(t,"__esModule",{value:!0});var s=!("undefined"==typeof window||!window.document||!window.document.createElement),a={transitionend:{transition:"transitionend",WebkitTransition:"webkitTransitionEnd",MozTransition:"mozTransitionEnd",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd"},animationend:{animation:"animationend",WebkitAnimation:"webkitAnimationEnd",MozAnimation:"mozAnimationEnd",OAnimation:"oAnimationEnd",msAnimation:"MSAnimationEnd"}},i=[];s&&r();var l={addEndEventListener:function(e,t){return 0===i.length?void window.setTimeout(t,0):void i.forEach(function(r){n(e,r,t)})},removeEndEventListener:function(e,t){0!==i.length&&i.forEach(function(r){o(e,r,t)})}};t["default"]=l,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,r){var n=i.singlePropFrom(l)(e,t,r);if(!n){var o=a["default"].PropTypes.oneOfType(u);n=o(e,t,r)}return n}Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=o;var s=r(1),a=n(s),i=r(4),l=["children","value"],u=[a["default"].PropTypes.number,a["default"].PropTypes.string];e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=r(1),s=n(o),a=r(6),i=n(a),l=r(13),u=n(l),p={propTypes:{offset:s["default"].PropTypes.number,offsetTop:s["default"].PropTypes.number,offsetBottom:s["default"].PropTypes.number},getInitialState:function(){return{affixClass:"affix-top"}},getPinnedOffset:function(e){return this.pinnedOffset?this.pinnedOffset:(e.className=e.className.replace(/affix-top|affix-bottom|affix/,""),e.className+=e.className.length?" affix":"affix",this.pinnedOffset=i["default"].getOffset(e).top-window.pageYOffset,this.pinnedOffset)},checkPosition:function(){var e=void 0,t=void 0,r=void 0,n=void 0,o=void 0,a=void 0,l=void 0,u=void 0,p=void 0;this.isMounted()&&(e=s["default"].findDOMNode(this),t=document.documentElement.offsetHeight,r=window.pageYOffset,n=i["default"].getOffset(e),"top"===this.affixed&&(n.top+=r),o=null!=this.props.offsetTop?this.props.offsetTop:this.props.offset,a=null!=this.props.offsetBottom?this.props.offsetBottom:this.props.offset,(null!=o||null!=a)&&(null==o&&(o=0),null==a&&(a=0),l=null!=this.unpin&&r+this.unpin<=n.top?!1:null!=a&&n.top+e.offsetHeight>=t-a?"bottom":null!=o&&o>=r?"top":!1,this.affixed!==l&&(null!=this.unpin&&(e.style.top=""),u="affix"+(l?"-"+l:""),this.affixed=l,this.unpin="bottom"===l?this.getPinnedOffset(e):null,"bottom"===l&&(e.className=e.className.replace(/affix-top|affix-bottom|affix/,"affix-bottom"),p=t-a-e.offsetHeight-i["default"].getOffset(e).top),this.setState({affixClass:u,affixPositionTop:p}))))},checkPositionWithEventLoop:function(){setTimeout(this.checkPosition,0)},componentDidMount:function(){this._onWindowScrollListener=u["default"].listen(window,"scroll",this.checkPosition),this._onDocumentClickListener=u["default"].listen(i["default"].ownerDocument(this),"click",this.checkPositionWithEventLoop)},componentWillUnmount:function(){this._onWindowScrollListener&&this._onWindowScrollListener.remove(),this._onDocumentClickListener&&this._onDocumentClickListener.remove()},componentDidUpdate:function(e,t){t.affixClass===this.state.affixClass&&this.checkPositionWithEventLoop()}};t["default"]=p,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){var r={};for(var n in e)t.indexOf(n)>=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}Object.defineProperty(t,"__esModule",{value:!0});var s=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)}function i(e,t){return function(r){var n=function(e){function t(){s(this,t),null!=e&&e.apply(this,arguments)}return a(t,e),u(t,[{key:"getChildContext",value:function(){return this.props.context}},{key:"render",value:function(){var e=this.props,t=e.wrapped,r=(e.context,o(e,["wrapped","context"]));return d["default"].cloneElement(t,r)}}]),t}(d["default"].Component);n.childContextTypes=r;var i=function(){function r(){s(this,r)}return u(r,[{key:"render",value:function(){var r=l({},this.props);return r[t]=this.getWrappedOverlay(),d["default"].createElement(e,r,this.props.children)}},{key:"getWrappedOverlay",value:function(){return d["default"].createElement(n,{context:this.context,wrapped:this.props[t]})}}]),r}();return i.contextTypes=r,i}}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;ti?-i:l>a?a-l:0}function s(e,t,r,n){var o=u.getContainerDimensions(r),s=o.width,a=e-n,i=e+n+t;return 0>a?-a:i>s?s-i:0}Object.defineProperty(t,"__esModule",{value:!0});var a=Object.assign||function(e){for(var t=1;t1||"string"==typeof this.props.children||"number"==typeof this.props.children},render:function(){var e={"pull-right":this.props.pullRight,badge:this.hasContent()};return a["default"].createElement("span",o({},this.props,{className:p["default"](this.props.className,e)}),this.props.children)}});t["default"]=d,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;tt?"prev":"next"},componentWillReceiveProps:function(e){var t=this.getActiveIndex();null!=e.activeIndex&&e.activeIndex!==t&&(clearTimeout(this.timeout),this.setState({previousActiveIndex:t,direction:null!=e.direction?e.direction:this.getDirection(t,e.activeIndex)}))},componentDidMount:function(){this.waitForNext()},componentWillUnmount:function(){clearTimeout(this.timeout)},next:function(e){e&&e.preventDefault();var t=this.getActiveIndex()+1,r=f["default"].numberOf(this.props.children);if(t>r-1){if(!this.props.wrap)return;t=0}this.handleSelect(t,"next")},prev:function(e){e&&e.preventDefault();var t=this.getActiveIndex()-1;if(0>t){if(!this.props.wrap)return;t=f["default"].numberOf(this.props.children)-1; -}this.handleSelect(t,"prev")},pause:function(){this.isPaused=!0,clearTimeout(this.timeout)},play:function(){this.isPaused=!1,this.waitForNext()},waitForNext:function(){!this.isPaused&&this.props.slide&&this.props.interval&&null==this.props.activeIndex&&(this.timeout=setTimeout(this.next,this.props.interval))},handleMouseOver:function(){this.props.pauseOnHover&&this.pause()},handleMouseOut:function(){this.isPaused&&this.play()},render:function(){var e={carousel:!0,slide:this.props.slide};return a["default"].createElement("div",o({},this.props,{className:l["default"](this.props.className,e),onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut}),this.props.indicators?this.renderIndicators():null,a["default"].createElement("div",{className:"carousel-inner",ref:"inner"},f["default"].map(this.props.children,this.renderItem)),this.props.controls?this.renderControls():null)},renderPrev:function(){return a["default"].createElement("a",{className:"left carousel-control",href:"#prev",key:0,onClick:this.prev},this.props.prevIcon)},renderNext:function(){return a["default"].createElement("a",{className:"right carousel-control",href:"#next",key:1,onClick:this.next},this.props.nextIcon)},renderControls:function(){if(!this.props.wrap){var e=this.getActiveIndex(),t=f["default"].numberOf(this.props.children);return[0!==e?this.renderPrev():null,e!==t-1?this.renderNext():null]}return[this.renderPrev(),this.renderNext()]},renderIndicator:function(e,t){var r=t===this.getActiveIndex()?"active":null;return a["default"].createElement("li",{key:t,className:r,onClick:this.handleSelect.bind(this,t,null)})},renderIndicators:function(){var e=[];return f["default"].forEach(this.props.children,function(t,r){e.push(this.renderIndicator(t,r)," ")},this),a["default"].createElement("ol",{className:"carousel-indicators"},e)},getActiveIndex:function(){return null!=this.props.activeIndex?this.props.activeIndex:this.state.activeIndex},handleItemAnimateOutEnd:function(){this.setState({previousActiveIndex:null,direction:null},function(){this.waitForNext(),this.props.onSlideEnd&&this.props.onSlideEnd()})},renderItem:function(e,t){var r=this.getActiveIndex(),n=t===r,o=null!=this.state.previousActiveIndex&&this.state.previousActiveIndex===t&&this.props.slide;return s.cloneElement(e,{active:n,ref:e.ref,key:e.key?e.key:t,index:t,animateOut:o,animateIn:n&&null!=this.state.previousActiveIndex&&this.props.slide,direction:this.state.direction,onAnimateOutEnd:o?this.handleItemAnimateOutEnd:null})},handleSelect:function(e,t){clearTimeout(this.timeout);var r=this.getActiveIndex();if(t=t||this.getDirection(r,e),this.props.onSelect&&this.props.onSelect(e,t),null==this.props.activeIndex&&e!==r){if(null!=this.state.previousActiveIndex)return;this.setState({activeIndex:e,previousActiveIndex:r,direction:t})}}});t["default"]=m,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t=0&&(t["col-"+o+this.props[n]]=!0),n=r+"Push",o=r+"-push-",this.props[n]>=0&&(t["col-"+o+this.props[n]]=!0),n=r+"Pull",o=r+"-pull-",this.props[n]>=0&&(t["col-"+o+this.props[n]]=!0)},this),a["default"].createElement(e,o({},this.props,{className:l["default"](this.props.className,t)}),this.props.children)}});t["default"]=c,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=r(1),s=n(o),a=r(3),i=n(a),l=r(10),u=n(l),p=r(2),d=n(p),f=r(6),c=n(f),h=r(5),m=n(h),y=r(7),v=n(y),g=s["default"].createClass({displayName:"CollapsibleNav",mixins:[i["default"],u["default"]],propTypes:{onSelect:s["default"].PropTypes.func,activeHref:s["default"].PropTypes.string,activeKey:s["default"].PropTypes.any,collapsible:s["default"].PropTypes.bool,expanded:s["default"].PropTypes.bool,eventKey:s["default"].PropTypes.any},getCollapsibleDOMNode:function(){return s["default"].findDOMNode(this)},getCollapsibleDimensionValue:function(){var e=0,t=this.refs;for(var r in t)if(t.hasOwnProperty(r)){var n=s["default"].findDOMNode(t[r]),o=n.offsetHeight,a=c["default"].getComputedStyles(n);e+=o+parseInt(a.marginTop,10)+parseInt(a.marginBottom,10)}return e},render:function(){var e=this.props.collapsible?this.getCollapsibleClassSet("navbar-collapse"):null,t=this.props.collapsible?this.renderCollapsibleNavChildren:this.renderChildren;return s["default"].createElement("div",{eventKey:this.props.eventKey,className:d["default"](this.props.className,e)},m["default"].map(this.props.children,t))},getChildActiveProp:function(e){return e.props.active?!0:null!=this.props.activeKey&&e.props.eventKey===this.props.activeKey?!0:null!=this.props.activeHref&&e.props.href===this.props.activeHref?!0:e.props.active},renderChildren:function(e,t){var r=e.key?e.key:t;return o.cloneElement(e,{activeKey:this.props.activeKey,activeHref:this.props.activeHref,ref:"nocollapse_"+r,key:r,navItem:!0})},renderCollapsibleNavChildren:function(e,t){var r=e.key?e.key:t;return o.cloneElement(e,{active:this.getChildActiveProp(e),activeKey:this.props.activeKey,activeHref:this.props.activeHref,onSelect:v["default"](e.props.onSelect,this.props.onSelect),ref:"collapsible_"+r,key:r,navItem:!0})}});t["default"]=g,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t-1?(v["default"]("Input type="+this.props.type,"ButtonInput"),u["default"].createElement(c["default"],this.props)):"static"===this.props.type?(v["default"]("Input type=static","StaticText"),u["default"].createElement(m["default"].Static,this.props)):i(Object.getPrototypeOf(t.prototype),"render",this).call(this)}}]),t}(d["default"]);t["default"]=g,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function s(e,t){var r=_["default"].ownerDocument(t);return e===r.body||e===r.documentElement?r.documentElement.clientHeight:e.clientHeight}function a(e){return e.props.container&&c["default"].findDOMNode(e.props.container)||_["default"].ownerDocument(e).body}function i(e,t){return function(r,n,o){var s=t;return void 0===r[e]&&(s=s.isRequired),s(r,n,o)}}function l(e){var t=[];return c["default"].Children.forEach(e,function(e){return t.push(e)}),t}function u(e,t){var r=_["default"].ownerDocument(e),n=!r.addEventListener,o=void 0;return L&&L.remove(),n?(document.attachEvent("onfocusin",t),o=function(){return document.detachEvent("onfocusin",t)}):(document.addEventListener("focus",t,!0),o=function(){return document.removeEventListener("focus",t,!0)}),L={remove:o}}function p(){if(void 0!==H)return H;var e=document.createElement("div");e.style.position="absolute",e.style.top="-9999px",e.style.width="50px",e.style.height="50px",e.style.overflow="scroll",document.body.appendChild(e),H=e.offsetWidth-e.clientWidth,document.body.removeChild(e),e=null}Object.defineProperty(t,"__esModule",{value:!0});var d=Object.assign||function(e){for(var t=1;ts(n,this),this._originalPadding=n.style.paddingRight,this._containerIsOverflowing&&(n.style.paddingRight=parseInt(this._originalPadding||0,10)+p()+"px"),this.props.backdrop&&this.iosClickHack(),this.setState(this._getStyles(),function(){return e.focusModalContent()})},componentDidUpdate:function(e){if(this.props.backdrop&&this.props.backdrop!==e.backdrop&&(this.iosClickHack(),this.setState(this._getStyles())),this.props.container!==e.container){var t=a(this);this._containerIsOverflowing=t.scrollHeight>s(t,this)}},componentWillUnmount:function(){this._onDocumentKeyupListener.remove(),this._onWindowResizeListener.remove(),this._onFocusinListener&&this._onFocusinListener.remove();var e=a(this);e.style.paddingRight=this._originalPadding,e.className=e.className.replace(/ ?modal-open/,""),this.restoreLastFocus()},handleBackdropClick:function(e){e.target===e.currentTarget&&this._getHide()()},handleDocumentKeyUp:function(e){this.props.keyboard&&27===e.keyCode&&this._getHide()()},handleWindowResize:function(){this.setState(this._getStyles())},checkForFocus:function(){if(_["default"].canUseDom)try{this.lastFocus=document.activeElement}catch(e){}},focusModalContent:function(){var e=c["default"].findDOMNode(this.refs.modal),t=_["default"].activeElement(this),r=t&&_["default"].contains(e,t);this.props.autoFocus&&!r&&(this.lastFocus=t,e.focus())},restoreLastFocus:function(){this.lastFocus&&(this.lastFocus.focus(),this.lastFocus=null)},enforceFocus:function(){if(this.isMounted()){var e=_["default"].activeElement(this),t=c["default"].findDOMNode(this.refs.modal);t===e||_["default"].contains(t,e)||t.focus()}},_getStyles:function(){if(!_["default"].canUseDom)return{};var e=c["default"].findDOMNode(this.refs.modal),t=e.scrollHeight,r=a(this),n=this._containerIsOverflowing,o=t>s(r,this);return{dialogStyles:{paddingRight:n&&!o?p():void 0,paddingLeft:!n&&o?p():void 0}}}}),F=c["default"].createClass({displayName:"Modal",propTypes:d({},k["default"].propTypes,R.propTypes),defaultProps:{show:null},render:function(){var e=this.props,t=e.show,r=o(e,["show"]),n=c["default"].createElement(R,r,this.props.children);return this.props.__isUsedInModalTrigger||null==t?n:c["default"].createElement(k["default"],{container:r.container},t&&n)}});F.Body=M["default"],F.Header=D["default"],F.Title=A["default"],F.Footer=K["default"],t["default"]=F,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e){return function(){for(var t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];return p["default"]("The Modal prop `onRequestHide`","the `onHide` prop"),e.apply(void 0,r)}}Object.defineProperty(t,"__esModule",{value:!0});var s=r(1),a=n(s),i=r(4),l=n(i),u=r(8),p=n(u),d=r(7),f=n(d),c=r(37),h=n(c),m=r(18),y=a["default"].createClass({displayName:"ModalTrigger",mixins:[m.OverlayMixin],propTypes:{modal:a["default"].PropTypes.node.isRequired,container:l["default"].mountable,onBlur:a["default"].PropTypes.func,onFocus:a["default"].PropTypes.func,onMouseOut:a["default"].PropTypes.func,onMouseOver:a["default"].PropTypes.func},getInitialState:function(){return{isOverlayShown:!1}},show:function(){this.setState({isOverlayShown:!0})},hide:function(){this.setState({isOverlayShown:!1})},toggle:function(){this.setState({isOverlayShown:!this.state.isOverlayShown})},renderOverlay:function(){var e=this.props.modal;return this.state.isOverlayShown?s.cloneElement(e,{onHide:this.hide,onRequestHide:o(this.hide),__isUsedInModalTrigger:!0}):a["default"].createElement("span",null)},render:function(){var e=a["default"].Children.only(this.props.children),t={};return t.onClick=f["default"](e.props.onClick,this.toggle),t.onMouseOver=f["default"](e.props.onMouseOver,this.props.onMouseOver),t.onMouseOut=f["default"](e.props.onMouseOut,this.props.onMouseOut),t.onFocus=f["default"](e.props.onFocus,this.props.onFocus),t.onBlur=f["default"](e.props.onBlur,this.props.onBlur),s.cloneElement(e,t)}});y.withContext=h["default"](y,"modal");var v=a["default"].createClass({displayName:"DepreciatedModalTrigger",componentWillMount:function(){p["default"]("The `ModalTrigger` component","the `Modal` component directly","http://react-bootstrap.github.io/components.html#modals")},render:function(){return a["default"].createElement(y,this.props)}});v.withContext=y.withContext,v.ModalTrigger=y,t["default"]=v,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t=0:e===t}Object.defineProperty(t,"__esModule",{value:!0});var s=Object.assign||function(e){for(var t=1;t1?d:1,n=l>=t+s,n?r=t+s-1:(r=l,t=l-s+1)}else t=1,r=l;for(var c=t;r>=c;c++)e.push(a["default"].createElement(f["default"],{key:c,eventKey:c,active:c===i,onSelect:u},c));return s&&n&&p&&e.push(a["default"].createElement(f["default"],{key:"ellipsis",disabled:!0},a["default"].createElement("span",{"aria-label":"More"},"..."))),e},renderPrev:function(){return this.props.prev?a["default"].createElement(f["default"],{key:"prev",eventKey:this.props.activePage-1,disabled:1===this.props.activePage,onSelect:this.props.onSelect},a["default"].createElement("span",{"aria-label":"Previous"},"‹")):null},renderNext:function(){return this.props.next?a["default"].createElement(f["default"],{key:"next",eventKey:this.props.activePage+1,disabled:this.props.activePage===this.props.items,onSelect:this.props.onSelect},a["default"].createElement("span",{"aria-label":"Next"},"›")):null},renderFirst:function(){return this.props.first?a["default"].createElement(f["default"],{key:"first",eventKey:1,disabled:1===this.props.activePage,onSelect:this.props.onSelect},a["default"].createElement("span",{"aria-label":"First"},"«")):null},renderLast:function(){return this.props.last?a["default"].createElement(f["default"],{key:"last",eventKey:this.props.items,disabled:this.props.activePage===this.props.items,onSelect:this.props.onSelect},a["default"].createElement("span",{"aria-label":"Last"},"»")):null},render:function(){return a["default"].createElement("ul",o({},this.props,{className:l["default"](this.props.className,this.getBsClassSet())}),this.renderFirst(),this.renderPrev(),this.renderPageButtons(),this.renderNext(),this.renderLast())}});t["default"]=c,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=r(1),s=n(o),a=r(2),i=n(a),l=r(3),u=n(l),p=r(79),d=n(p),f=s["default"].createClass({displayName:"PaginationButton",mixins:[u["default"]],propTypes:{className:s["default"].PropTypes.string,eventKey:s["default"].PropTypes.oneOfType([s["default"].PropTypes.string,s["default"].PropTypes.number]),onSelect:s["default"].PropTypes.func,disabled:s["default"].PropTypes.bool,active:s["default"].PropTypes.bool},getDefaultProps:function(){return{active:!1,disabled:!1}},handleClick:function(e){if(e.preventDefault(),this.props.onSelect){var t=d["default"](this.props.eventKey);this.props.onSelect(e,t)}},render:function(){var e=this.getBsClassSet();return e.active=this.props.active,e.disabled=this.props.disabled,s["default"].createElement("li",{className:i["default"](this.props.className,e)},s["default"].createElement("a",{href:"#",onClick:this.handleClick},this.props.children))}});t["default"]=f,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function s(e){var t=void 0;return f["default"].forEach(e,function(e){null==t&&(t=e.props.eventKey)}),t}Object.defineProperty(t,"__esModule",{value:!0}); -var a=Object.assign||function(e){for(var t=1;t li.rw-list-optgroup, -ul.rw-selectlist > li.rw-list-optgroup { - font-weight: bold; -} -ul.rw-list > li.rw-list-option, -ul.rw-selectlist > li.rw-list-option { - cursor: pointer; - border: 1px solid transparent; - padding-left: 10px; - padding-right: 10px; - border-radius: 3px; -} -ul.rw-list > li.rw-list-option:hover, -ul.rw-selectlist > li.rw-list-option:hover { - background-color: #e6e6e6; - border-color: #adadad; -} -ul.rw-list > li.rw-list-option.rw-state-focus, -ul.rw-selectlist > li.rw-list-option.rw-state-focus { - background-color: #ffffff; - border: #66afe9 1px solid; - color: #333333; -} -ul.rw-list > li.rw-list-option.rw-state-selected, -ul.rw-selectlist > li.rw-list-option.rw-state-selected { - background-color: #adadad; - border: #adadad 1px solid; - color: #333333; -} -ul.rw-list.rw-list-grouped > li.rw-list-optgroup { - padding-left: 10px; -} -ul.rw-list.rw-list-grouped > li.rw-list-option { - padding-left: 20px; -} -.rw-widget { - position: relative; -} -.rw-open.rw-widget, -.rw-open > .rw-multiselect-wrapper { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.rw-open-up.rw-widget, -.rw-open-up > .rw-multiselect-wrapper { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.rw-combobox .rw-list, -.rw-datetimepicker .rw-list, -.rw-numberpicker .rw-list, -.rw-dropdownlist .rw-list, -.rw-multiselect .rw-list { - max-height: 200px; - height: auto; -} -.rw-widget { - background-color: #ffffff; - border: #cccccc 1px solid; - border-radius: 4px; -} -.rw-widget .rw-input { - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.rw-rtl.rw-widget .rw-input { - border-bottom-left-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.rw-widget > .rw-select { - border-left: #cccccc 1px solid; -} -.rw-rtl.rw-widget > .rw-select { - border-right: #cccccc 1px solid; - border-left: none; -} -.rw-widget.rw-state-focus, -.rw-widget.rw-state-focus:hover { - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - border-color: #66afe9; - outline: 0; -} -.rw-widget.rw-state-readonly, -.rw-widget.rw-state-readonly > .rw-multiselect-wrapper { - cursor: not-allowed; -} -.rw-widget.rw-state-disabled, -.rw-widget.rw-state-disabled:hover, -.rw-widget.rw-state-disabled:active { - -webkit-box-shadow: none; - box-shadow: none; - background-color: #eeeeee; - border-color: #cccccc; -} -.rw-combobox, -.rw-datetimepicker, -.rw-numberpicker, -.rw-dropdownlist { - padding-right: 1.9em; -} -.rw-combobox.rw-rtl, -.rw-datetimepicker.rw-rtl, -.rw-numberpicker.rw-rtl, -.rw-dropdownlist.rw-rtl { - padding-right: 0; - padding-left: 1.9em; -} -.rw-combobox > .rw-input, -.rw-datetimepicker > .rw-input, -.rw-numberpicker > .rw-input, -.rw-dropdownlist > .rw-input { - width: 100%; - border: none; - outline: 0; -} -.rw-combobox > .rw-input::-moz-placeholder, -.rw-datetimepicker > .rw-input::-moz-placeholder, -.rw-numberpicker > .rw-input::-moz-placeholder, -.rw-dropdownlist > .rw-input::-moz-placeholder { - color: #999999; - opacity: 1; -} -.rw-combobox > .rw-input:-ms-input-placeholder, -.rw-datetimepicker > .rw-input:-ms-input-placeholder, -.rw-numberpicker > .rw-input:-ms-input-placeholder, -.rw-dropdownlist > .rw-input:-ms-input-placeholder { - color: #999999; -} -.rw-combobox > .rw-input::-webkit-input-placeholder, -.rw-datetimepicker > .rw-input::-webkit-input-placeholder, -.rw-numberpicker > .rw-input::-webkit-input-placeholder, -.rw-dropdownlist > .rw-input::-webkit-input-placeholder { - color: #999999; -} -.rw-select { - position: absolute; - width: 1.9em; - height: 100%; - right: 0; -} -.rw-select.rw-btn, -.rw-select > .rw-btn { - height: 100%; - vertical-align: middle; - outline: 0; -} -.rw-rtl .rw-select { - left: 0; - right: auto; -} -.rw-multiselect, -.rw-combobox input.rw-input, -.rw-datetimepicker input.rw-input, -.rw-numberpicker input.rw-input { - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075); -} -.rw-combobox:active, -.rw-datetimepicker:active, -.rw-dropdownlist:active, -.rw-header > .rw-btn:active, -.rw-numberpicker .rw-btn.rw-state-active, -.rw-combobox:active.rw-state-focus, -.rw-datetimepicker:active.rw-state-focus, -.rw-dropdownlist:active.rw-state-focus, -.rw-header > .rw-btn:active.rw-state-focus, -.rw-numberpicker .rw-btn.rw-state-active.rw-state-focus { - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.rw-combobox:hover, -.rw-datetimepicker:hover, -.rw-numberpicker:hover, -.rw-dropdownlist:hover { - background-color: #e6e6e6; - border-color: #adadad; -} -.rw-dropdownlist.rw-state-disabled, -.rw-dropdownlist.rw-state-readonly { - cursor: not-allowed; -} -.rw-dropdownlist > .rw-input { - background-color: transparent; - padding-top: 0; - padding-bottom: 0; -} -.rw-dropdownlist > .rw-select, -.rw-dropdownlist > .rw-select.rw-rtl { - border-width: 0; -} -.rw-numberpicker .rw-btn { - display: block; - height: 1.143em; - line-height: 1.143em; - width: 100%; - border-width: 0; -} diff --git a/static/external/react-widgets/loader-big.gif b/static/external/react-widgets/loader-big.gif deleted file mode 100644 index 1106645..0000000 Binary files a/static/external/react-widgets/loader-big.gif and /dev/null differ diff --git a/static/external/react-widgets/loading.gif b/static/external/react-widgets/loading.gif deleted file mode 100644 index ded8d36..0000000 Binary files a/static/external/react-widgets/loading.gif and /dev/null differ diff --git a/static/external/react-widgets/react-widgets.css b/static/external/react-widgets/react-widgets.css deleted file mode 100644 index a0227a8..0000000 --- a/static/external/react-widgets/react-widgets.css +++ /dev/null @@ -1,730 +0,0 @@ -/* Noramlize.css */ -.rw-btn, -.rw-input { - color: inherit; - font: inherit; - margin: 0; -} -button.rw-input { - overflow: visible; -} -button.rw-input, -select.rw-input { - text-transform: none; -} -button.rw-input, -html input[type="button"].rw-input, -input[type="reset"].rw-input, -input[type="submit"].rw-input { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled].rw-input, -html input[disabled].rw-input { - cursor: not-allowed; -} -button.rw-input::-moz-focus-inner, -input.rw-input::-moz-focus-inner { - border: 0; - padding: 0; -} -/* -------------- */ -.rw-sr { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.rw-widget, -.rw-widget * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.rw-widget:before, -.rw-widget *:before, -.rw-widget:after, -.rw-widget *:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -@font-face { - font-family: 'RwWidgets'; - src: url('../fonts/rw-widgets.eot?v=4.1.0'); - src: url('../fonts/rw-widgets.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('../fonts/rw-widgets.woff?v=4.1.0') format('woff'), url('../fonts/rw-widgets.ttf?v=4.1.0') format('truetype'), url('../fonts/rw-widgets.svg?v=4.1.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.rw-i { - display: inline-block; - font-family: RwWidgets; - font-style: normal; - font-weight: normal; - line-height: 1em; - font-variant: normal; - text-transform: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.rw-i-caret-down:before { - content: '\e803'; -} -.rw-i-caret-up:before { - content: '\e800'; -} -.rw-i-caret-left:before { - content: '\e801'; -} -.rw-i-caret-right:before { - content: '\e802'; -} -.rw-i-clock-o:before { - content: '\e805'; -} -.rw-i-calendar:before { - content: '\e804'; -} -.rw-i-search:before { - content: '\e806'; -} -/* for debugging */ -.rw-widget { - outline: 0; - -moz-background-clip: border-box; - -webkit-background-clip: border-box; - background-clip: border-box; -} -.rw-btn { - color: #333333; - line-height: 2.286em; - display: inline-block; - margin: 0; - text-align: center; - vertical-align: middle; - background: none; - background-image: none; - border: 1px solid transparent; - padding: 0; - white-space: nowrap; -} -.rw-rtl { - direction: rtl; -} -.rw-input { - color: #555555; - height: 2.286em; - padding: 0.429em 0.857em; - background-color: #ffffff; -} -.rw-input[disabled] { - -webkit-box-shadow: none; - box-shadow: none; - cursor: not-allowed; - opacity: 1; - background-color: #eeeeee; - border-color: #cccccc; -} -.rw-input[readonly] { - cursor: not-allowed; -} -.rw-filter-input { - position: relative; - width: 100%; - padding-right: 1.9em; - border: #cccccc 1px solid; - border-radius: 4px; - margin-bottom: 2px; -} -.rw-rtl .rw-filter-input { - padding-left: 1.9em; - padding-right: 0; -} -.rw-filter-input > .rw-input { - width: 100%; - border: none; - outline: none; -} -.rw-filter-input > span { - margin-top: -2px; -} -.rw-i.rw-loading { - background: url("../img/loading.gif") no-repeat center; - width: 16px; - height: 100%; -} -.rw-i.rw-loading:before { - content: ""; -} -.rw-loading-mask { - border-radius: 4px; - position: relative; -} -.rw-loading-mask:after { - content: ''; - background: url("../img/loader-big.gif") no-repeat center; - position: absolute; - background-color: #fff; - opacity: 0.7; - top: 0; - left: 0; - height: 100%; - width: 100%; -} -.rw-now { - font-weight: 600; -} -.rw-state-focus { - background-color: #ffffff; - border: #66afe9 1px solid; - color: #333333; -} -.rw-state-selected { - background-color: #adadad; - border: #adadad 1px solid; - color: #333333; -} -.rw-state-disabled { - -webkit-box-shadow: none; - box-shadow: none; - cursor: not-allowed; - opacity: 1; -} -.rw-btn, -.rw-dropdownlist { - cursor: pointer; -} -.rw-btn[disabled], -.rw-state-disabled .rw-btn, -.rw-state-readonly .rw-btn { - -webkit-box-shadow: none; - box-shadow: none; - pointer-events: none; - cursor: not-allowed; - filter: alpha(opacity=65); - opacity: .65; -} -ul.rw-list, -.rw-selectlist { - margin: 0; - padding-left: 0; - list-style: none; - padding: 5px 0; - overflow: auto; - outline: 0; - height: 100%; -} -ul.rw-list > li, -.rw-selectlist > li { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -ul.rw-list > li.rw-list-optgroup, -.rw-selectlist > li.rw-list-optgroup { - font-weight: bold; -} -ul.rw-list > li.rw-list-option, -ul.rw-list > li.rw-list-empty, -.rw-selectlist > li.rw-list-option, -.rw-selectlist > li.rw-list-empty { - padding-left: 10px; - padding-right: 10px; -} -ul.rw-list > li.rw-list-option, -.rw-selectlist > li.rw-list-option { - cursor: pointer; - border: 1px solid transparent; - border-radius: 3px; -} -ul.rw-list > li.rw-list-option:hover, -.rw-selectlist > li.rw-list-option:hover { - background-color: #e6e6e6; - border-color: #adadad; -} -ul.rw-list > li.rw-list-option.rw-state-focus, -.rw-selectlist > li.rw-list-option.rw-state-focus { - background-color: #ffffff; - border: #66afe9 1px solid; - color: #333333; -} -ul.rw-list > li.rw-list-option.rw-state-selected, -.rw-selectlist > li.rw-list-option.rw-state-selected { - background-color: #adadad; - border: #adadad 1px solid; - color: #333333; -} -ul.rw-list.rw-list-grouped > li.rw-list-optgroup, -.rw-selectlist.rw-list-grouped > li.rw-list-optgroup { - padding-left: 10px; -} -ul.rw-list.rw-list-grouped > li.rw-list-option, -.rw-selectlist.rw-list-grouped > li.rw-list-option { - padding-left: 20px; -} -.rw-widget { - position: relative; -} -.rw-open.rw-widget, -.rw-open > .rw-multiselect-wrapper { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.rw-open-up.rw-widget, -.rw-open-up > .rw-multiselect-wrapper { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.rw-combobox .rw-list, -.rw-datetimepicker .rw-list, -.rw-numberpicker .rw-list, -.rw-dropdownlist .rw-list, -.rw-multiselect .rw-list { - max-height: 200px; - height: auto; -} -.rw-widget { - background-color: #ffffff; - border: #cccccc 1px solid; - border-radius: 4px; -} -.rw-widget .rw-input { - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.rw-rtl.rw-widget .rw-input { - border-bottom-left-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.rw-widget > .rw-select { - border-left: #cccccc 1px solid; -} -.rw-rtl.rw-widget > .rw-select { - border-right: #cccccc 1px solid; - border-left: none; -} -.rw-widget.rw-state-focus, -.rw-widget.rw-state-focus:hover { - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - border-color: #66afe9; - outline: 0; -} -.rw-widget.rw-state-readonly, -.rw-widget.rw-state-readonly > .rw-multiselect-wrapper { - cursor: not-allowed; -} -.rw-widget.rw-state-disabled, -.rw-widget.rw-state-disabled:hover, -.rw-widget.rw-state-disabled:active { - -webkit-box-shadow: none; - box-shadow: none; - background-color: #eeeeee; - border-color: #cccccc; -} -.rw-combobox, -.rw-datetimepicker, -.rw-numberpicker, -.rw-dropdownlist { - padding-right: 1.9em; -} -.rw-combobox.rw-rtl, -.rw-datetimepicker.rw-rtl, -.rw-numberpicker.rw-rtl, -.rw-dropdownlist.rw-rtl { - padding-right: 0; - padding-left: 1.9em; -} -.rw-combobox > .rw-input, -.rw-datetimepicker > .rw-input, -.rw-numberpicker > .rw-input, -.rw-dropdownlist > .rw-input { - width: 100%; - border: none; - outline: 0; -} -.rw-combobox > .rw-input::-moz-placeholder, -.rw-datetimepicker > .rw-input::-moz-placeholder, -.rw-numberpicker > .rw-input::-moz-placeholder, -.rw-dropdownlist > .rw-input::-moz-placeholder { - color: #999999; - opacity: 1; -} -.rw-combobox > .rw-input:-ms-input-placeholder, -.rw-datetimepicker > .rw-input:-ms-input-placeholder, -.rw-numberpicker > .rw-input:-ms-input-placeholder, -.rw-dropdownlist > .rw-input:-ms-input-placeholder { - color: #999999; -} -.rw-combobox > .rw-input::-webkit-input-placeholder, -.rw-datetimepicker > .rw-input::-webkit-input-placeholder, -.rw-numberpicker > .rw-input::-webkit-input-placeholder, -.rw-dropdownlist > .rw-input::-webkit-input-placeholder { - color: #999999; -} -.rw-placeholder { - color: #999999; -} -.rw-select { - position: absolute; - width: 1.9em; - height: 100%; - right: 0; -} -.rw-select.rw-btn, -.rw-select > .rw-btn { - height: 100%; - vertical-align: middle; - outline: 0; -} -.rw-rtl .rw-select { - left: 0; - right: auto; -} -.rw-multiselect, -.rw-combobox input.rw-input, -.rw-datetimepicker input.rw-input, -.rw-numberpicker input.rw-input { - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075); -} -.rw-combobox:active, -.rw-datetimepicker:active, -.rw-dropdownlist:active, -.rw-header > .rw-btn:active, -.rw-numberpicker .rw-btn.rw-state-active, -.rw-combobox:active.rw-state-focus, -.rw-datetimepicker:active.rw-state-focus, -.rw-dropdownlist:active.rw-state-focus, -.rw-header > .rw-btn:active.rw-state-focus, -.rw-numberpicker .rw-btn.rw-state-active.rw-state-focus { - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.rw-combobox:hover, -.rw-datetimepicker:hover, -.rw-numberpicker:hover, -.rw-dropdownlist:hover { - background-color: #e6e6e6; - border-color: #adadad; -} -.rw-dropdownlist.rw-state-disabled, -.rw-dropdownlist.rw-state-readonly { - cursor: not-allowed; -} -.rw-dropdownlist > .rw-input { - line-height: 2.286em; - background-color: transparent; - padding-top: 0; - padding-bottom: 0; - padding-right: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.rw-dropdownlist.rw-rtl > .rw-input { - padding: 0.429em 0.857em; - padding-top: 0; - padding-bottom: 0; - padding-left: 0; -} -.rw-dropdownlist > .rw-select, -.rw-dropdownlist.rw-rtl > .rw-select { - border-width: 0; -} -.rw-numberpicker .rw-btn { - display: block; - height: 1.143em; - line-height: 1.143em; - width: 100%; - border-width: 0; -} -.rw-popup { - position: absolute; - -webkit-box-shadow: 0 5px 6px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 6px rgba(0, 0, 0, 0.2); - border-top-right-radius: 0; - border-top-left-radius: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; - border: #cccccc 1px solid; - background: #ffffff; - padding: 2px; - overflow: auto; - margin-bottom: 10px; - left: 10px; - right: 10px; -} -.rw-dropup > .rw-popup { - margin-bottom: 0; - margin-top: 10px; - border-top-right-radius: 3px; - border-top-left-radius: 3px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, 0.2); - box-shadow: 0 0 6px rgba(0, 0, 0, 0.2); -} -.rw-popup-container { - position: absolute; - top: 100%; - margin-top: 1px; - z-index: 1005; - left: -11px; - right: -11px; -} -.rw-popup-container.rw-dropup { - top: auto; - bottom: 100%; -} -.rw-popup-container.rw-calendar-popup { - right: auto; - width: 18em; -} -.rw-datetimepicker .rw-btn { - width: 1.8em; -} -.rw-datetimepicker.rw-has-neither { - padding-left: 0; - padding-right: 0; -} -.rw-datetimepicker.rw-has-neither .rw-input { - border-radius: 4px; -} -.rw-datetimepicker.rw-has-both { - padding-right: 3.8em; -} -.rw-datetimepicker.rw-has-both.rw-rtl { - padding-right: 0; - padding-left: 3.8em; -} -.rw-datetimepicker.rw-has-both > .rw-select { - width: 3.8em; - height: 100%; -} -.rw-calendar { - background-color: #ffffff; -} -.rw-calendar thead > tr { - border-bottom: 2px solid #cccccc; -} -.rw-calendar .rw-header { - padding-bottom: 5px; -} -.rw-calendar .rw-header .rw-btn-left, -.rw-calendar .rw-header .rw-btn-right { - width: 12.5%; -} -.rw-calendar .rw-header .rw-btn-view { - width: 75%; - background-color: #eeeeee; - border-radius: 4px; -} -.rw-calendar .rw-header .rw-btn-view[disabled] { - -webkit-box-shadow: none; - box-shadow: none; - cursor: not-allowed; -} -.rw-calendar .rw-footer { - border-top: 1px solid #cccccc; -} -.rw-calendar .rw-footer .rw-btn { - width: 100%; - white-space: normal; -} -.rw-calendar .rw-footer .rw-btn:hover { - background-color: #e6e6e6; -} -.rw-calendar .rw-footer .rw-btn[disabled] { - -webkit-box-shadow: none; - box-shadow: none; - cursor: not-allowed; -} -.rw-calendar-grid { - height: 14.28571429em; - table-layout: fixed; - width: 100%; -} -.rw-calendar-grid th { - text-align: right; - padding: 0 .4em 0 .1em; -} -.rw-calendar-grid .rw-btn { - width: 100%; - text-align: right; -} -.rw-calendar-grid td .rw-btn { - border-radius: 4px; - padding: 0 .4em 0 .1em; - outline: 0; -} -.rw-calendar-grid td .rw-btn:hover { - background-color: #e6e6e6; -} -.rw-calendar-grid td .rw-btn.rw-off-range { - color: #b3b3b3; -} -.rw-calendar-grid.rw-nav-view .rw-btn { - padding: .25em 0 .3em; - display: block; - overflow: hidden; - text-align: center; - white-space: normal; -} -.rw-selectlist { - padding: 2px; -} -.rw-selectlist > ul { - height: 100%; - overflow: auto; -} -.rw-selectlist > ul > li.rw-list-option { - position: relative; - min-height: 27px; - cursor: auto; - padding-left: 5px; -} -.rw-selectlist > ul > li.rw-list-option > label > input { - position: absolute; - margin: 4px 0 0 -20px; -} -.rw-selectlist > ul > li.rw-list-option > label { - padding-left: 20px; - line-height: 1.423em; - display: inline-block; -} -.rw-selectlist.rw-rtl > ul > li.rw-list-option { - padding-left: 0; - padding-right: 5px; -} -.rw-selectlist.rw-rtl > ul > li.rw-list-option > label > input { - margin: 4px -20px 0 0px; -} -.rw-selectlist.rw-rtl > ul > li.rw-list-option > label { - padding-left: 0; - padding-right: 20px; -} -.rw-selectlist.rw-rtl > ul > li.rw-list-option { - padding-left: 0; - padding-right: 5px; -} -.rw-selectlist.rw-rtl > ul > li.rw-list-option > label > input { - margin: 4px -20px 0 0px; -} -.rw-selectlist.rw-rtl > ul > li.rw-list-option > label { - padding-left: 0; - padding-right: 20px; -} -.rw-selectlist.rw-state-disabled > ul > li:hover, -.rw-selectlist.rw-state-readonly > ul > li:hover { - background: none; - border-color: transparent; -} -.rw-multiselect { - background-color: #ffffff; -} -.rw-multiselect:hover { - border-color: #adadad; -} -.rw-multiselect-wrapper { - border-radius: 4px; - position: relative; - cursor: text; -} -.rw-multiselect-wrapper:before, -.rw-multiselect-wrapper:after { - content: " "; - display: table; -} -.rw-multiselect-wrapper:after { - clear: both; -} -.rw-multiselect-wrapper i.rw-loading { - position: absolute; - right: 3px; -} -.rw-multiselect-wrapper > .rw-input { - float: left; - outline: 0; - border-width: 0; - line-height: normal; - width: auto; - max-width: 100%; -} -.rw-multiselect-wrapper > .rw-input::-moz-placeholder { - color: #999999; - opacity: 1; -} -.rw-multiselect-wrapper > .rw-input:-ms-input-placeholder { - color: #999999; -} -.rw-multiselect-wrapper > .rw-input::-webkit-input-placeholder { - color: #999999; -} -.rw-state-readonly > .rw-multiselect-wrapper, -.rw-state-disabled > .rw-multiselect-wrapper { - cursor: not-allowed; -} -.rw-rtl .rw-multiselect-wrapper > .rw-input { - float: right; -} -.rw-multiselect-create-tag { - border-top: 1px #cccccc solid; - padding-top: 5px; - margin-top: 5px; -} -.rw-multiselect-taglist { - margin: 0; - padding-left: 0; - list-style: none; - padding-right: 0; -} -.rw-multiselect-taglist > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -.rw-multiselect-taglist > li { - float: left; - display: inline-block; - margin: 1px; - padding: 0.214em 0.15em 0.214em 0.4em; - line-height: 1.4em; - text-align: center; - vertical-align: middle; - white-space: nowrap; - border-radius: 3px; - border: 1px solid #cccccc; - background-color: #cccccc; - cursor: pointer; -} -.rw-multiselect-taglist > li.rw-state-focus { - background-color: #ffffff; - border: #66afe9 1px solid; - color: #333333; -} -.rw-multiselect-taglist > li.rw-state-readonly, -.rw-multiselect-taglist > li.rw-state-disabled, -.rw-multiselect.rw-state-readonly .rw-multiselect-taglist > li, -.rw-multiselect.rw-state-disabled .rw-multiselect-taglist > li { - cursor: not-allowed; - filter: alpha(opacity=65); - opacity: .65; -} -.rw-multiselect-taglist > li .rw-btn { - outline: 0; - font-size: 115%; - line-height: normal; -} -.rw-rtl .rw-multiselect-taglist > li { - float: right; -} diff --git a/static/external/react-widgets/react-widgets.js b/static/external/react-widgets/react-widgets.js deleted file mode 100644 index 7fa648f..0000000 --- a/static/external/react-widgets/react-widgets.js +++ /dev/null @@ -1,9 +0,0 @@ -/*! v"2.7.1" | (c) 2015 Jason Quense | https://github.com/jquense/react-widgets/blob/master/License.txt */ -this.ReactWidgets=function(e){function t(n){if(s[n])return s[n].exports;var r=s[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var s={};return t.m=e,t.c=s,t.p="",t(0)}([function(e,t,s){"use strict";e.exports={DropdownList:s(5),Combobox:s(40),Calendar:s(2),DateTimePicker:s(3),NumberPicker:s(4),Multiselect:s(6),SelectList:s(7),configure:s(8),utils:{ReplaceTransitionGroup:s(9),SlideTransition:s(10)}}},function(e,t,s){"use strict";function n(e,t,s){return a.number.format(e,t,s)}var r=s(13),i=s(11),o=s(20),a=s(35).locale,p=function(e){return e.format||a.number.formats["default"]};e.exports=i.createClass({displayName:"NumberPickerInput",propTypes:{value:i.PropTypes.number,format:o.numberFormat,parse:i.PropTypes.func.isRequired,culture:i.PropTypes.string,min:i.PropTypes.number,onChange:i.PropTypes.func.isRequired,onKeyDown:i.PropTypes.func},getDefaultProps:function(){return{value:null,editing:!1,parse:function(e,t){return a.number.parse(e,t)}}},getDefaultState:function(e){var t=e.editing?e.value:n(e.value,p(e),e.culture);return(null==t||isNaN(e.value))&&(t=""),{stringValue:""+t}},getInitialState:function(){return this.getDefaultState(this.props)},componentWillReceiveProps:function(e){this.setState(this.getDefaultState(e))},render:function(){var e=this.state.stringValue;return i.createElement("input",r._extends({},this.props,{type:"text",className:"rw-input",onChange:this._change,onBlur:this._finish,"aria-disabled":this.props.disabled,"aria-readonly":this.props.readOnly,disabled:this.props.disabled,readOnly:this.props.readOnly,value:e}))},_change:function(e){var t=e.target.value,s=this.props.parse(e.target.value,this.props.culture),n=this.isValid(s);return null==t||""===t.trim()?this.props.onChange(null):n&&s!==this.props.value&&!this.isAtDelimiter(s,t)?this.props.onChange(s):void((!isNaN(s)||this.isAtDelimiter(s,t))&&this.current(e.target.value))},_finish:function(){var e=this.state.stringValue,t=this.props.parse(e,this.props.culture);!isNaN(t)&&(t=this.props.min},current:function(e){this.setState({stringValue:e})}})},function(e,t,s){"use strict";function n(e){return e&&!isNaN(e.getTime())?e:null}function r(e){return p._extends({moveBack:"navigate back",moveForward:"navigate forward"},e)}var i,o,a,p=s(13),l=s(11),u=s(48),c=s(19),d=s(29),h=s(30),f=s(31),m=s(32),y=s(33),v=s(34),g=s(35).locale,T=s(20),b=s(50),w=s(10),_=s(36),x=s(37),P=s(14),D=x.directions,O=function(e){return Object.keys(e).map(function(t){return e[t]})},N=function(e){return P.transform(e,function(e,t,s){e[t]=s},{})},C=x.calendarViews,E=O(C),I=N(x.calendarViewHierarchy),k=x.calendarViewHierarchy,S=x.calendarViewUnits,R=(i={},i[C.MONTH]=f,i[C.YEAR]=m,i[C.DECADE]=y,i[C.CENTURY]=v,i),F={ArrowDown:D.DOWN,ArrowUp:D.UP,ArrowRight:D.RIGHT,ArrowLeft:D.LEFT},L=(o={},o[D.LEFT]=D.RIGHT,o[D.RIGHT]=D.LEFT,o),M=(a={},a[C.YEAR]=1,a[C.DECADE]=10,a[C.CENTURY]=100,a),A=function(e,t){return e[t+"Format"]||g.date.formats[t]},V={onChange:l.PropTypes.func,value:l.PropTypes.instanceOf(Date),min:l.PropTypes.instanceOf(Date),max:l.PropTypes.instanceOf(Date),initialView:l.PropTypes.oneOf(E),finalView:function(e,t,s){var n=l.PropTypes.oneOf(E)(e,t,s);return n?n:E.indexOf(e[t])r?this.setState({view:i=e.initialView}):r>s&&this.setState({view:i=e.finalView}),_.eq(o,n(this.props.value),S[i])||this.setState({currentDate:o?new Date(o):new Date})},render:function(){var e=this,t=P.omit(this.props,Object.keys(V)),s=t.className,n=p.objectWithoutProperties(t,["className"]),i=R[this.state.view],o=P.pick(this.props,Object.keys(c.type(i).propTypes)),a=this.state.view,f=r(this.props.messages),m=this.props.disabled||this.props.readOnly,y=this.state.currentDate,v=new Date,g=!_.inRange(v,this.props.min,this.props.max,a),T=this._id("_view_label"),b=this.state.view+"_"+_[this.state.view](y),x=this._id("_view");return l.createElement("div",p._extends({},n,{onKeyDown:this._keyDown,onFocus:this._maybeHandle(this._focus.bind(null,!0),!0),onBlur:this._focus.bind(null,!1),className:u(s,"rw-calendar","rw-widget",{"rw-state-focus":this.state.focused,"rw-state-disabled":this.props.disabled,"rw-state-readonly":this.props.readOnly,"rw-rtl":this.isRtl()})}),l.createElement(d,{label:this._label(),labelId:T,messages:f,upDisabled:m||this.state.view===this.props.finalView,prevDisabled:m||!_.inRange(this.nextDate(D.LEFT),this.props.min,this.props.max,a),nextDisabled:m||!_.inRange(this.nextDate(D.RIGHT),this.props.min,this.props.max,a),onViewChange:this._maybeHandle(this.navigate.bind(null,D.UP,null)),onMoveLeft:this._maybeHandle(this.navigate.bind(null,D.LEFT,null)),onMoveRight:this._maybeHandle(this.navigate.bind(null,D.RIGHT,null))}),l.createElement(w,{ref:"animation",duration:n.duration,direction:this.state.slideDirection,onAnimate:function(){return e._focus(!0)}},l.createElement(i,p._extends({},o,{tabIndex:"-1",key:b,id:x,"aria-labelledby":T,today:v,value:this.props.value,focused:this.state.currentDate,onChange:this._maybeHandle(this.change),onKeyDown:this._maybeHandle(this._keyDown)}))),this.props.footer&&l.createElement(h,{value:v,format:this.props.footerFormat,culture:this.props.culture,disabled:this.props.disabled||g,readOnly:this.props.readOnly,onClick:this._maybeHandle(this.select)}))},navigate:function(e,t){var s=this.state.view,n=e===D.LEFT||e===D.UP?"right":"left";t||(t=-1!==[D.LEFT,D.RIGHT].indexOf(e)?this.nextDate(e):this.state.currentDate),e===D.DOWN&&(s=I[s]||s),e===D.UP&&(s=k[s]||s),this.isValidView(s)&&_.inRange(t,this.props.min,this.props.max,s)&&(this.notify("onNavigate",[t,n,s]),this._focus(!0,"nav"),this.setState({currentDate:t,slideDirection:n,view:s}))},_focus:function(e,t){var s=this;-1!==+this.props.tabIndex&&this.setTimeout("focus",function(){e&&c.findDOMNode(s).focus(),e!==s.state.focused&&(s.notify(e?"onFocus":"onBlur",t),s.setState({focused:e}))})},change:function(e){var t=this;return setTimeout(function(){return t._focus(!0)}),this.props.onChange&&this.state.view===this.props.initialView?this.notify("onChange",e):void this.navigate(D.DOWN,e)},select:function(e){var t=this.props.initialView,s=t!==this.state.view||_.gt(e,this.state.currentDate)?"left":"right";this.notify("onChange",e),this.isValidView(t)&&_.inRange(e,this.props.min,this.props.max,t)&&(this._focus(!0,"nav"),this.setState({currentDate:e,slideDirection:s,view:t}))},nextDate:function(e){var t=e===D.LEFT?"subtract":"add",s=this.state.view,n=s===C.MONTH?s:C.YEAR,r=M[s]||1;return _[t](this.state.currentDate,1*r,n)},_keyDown:function(e){var t=e.ctrlKey,s=e.key,n=F[s],r=this.state.currentDate,i=this.state.view,o=S[i],a=r;return"Enter"===s?(e.preventDefault(),this.change(r)):(n&&(t?(e.preventDefault(),this.navigate(n)):(this.isRtl()&&L[n]&&(n=L[n]),a=_.move(a,this.props.min,this.props.max,i,n),_.eq(r,a,o)||(e.preventDefault(),_.gt(a,r,i)?this.navigate(D.RIGHT,a):_.lt(a,r,i)?this.navigate(D.LEFT,a):this.setState({currentDate:a})))),void this.notify("onKeyDown",[e]))},_label:function(){var e=this.props,t=e.culture,s=p.objectWithoutProperties(e,["culture"]),n=this.state.view,r=this.state.currentDate;return"month"===n?g.date.format(r,A(s,"header"),t):"year"===n?g.date.format(r,A(s,"year"),t):"decade"===n?g.date.format(_.startOf(r,"decade"),A(s,"decade"),t):"century"===n?g.date.format(_.startOf(r,"century"),A(s,"century"),t):void 0},inRangeValue:function(e){var t=n(e);return null===t?t:_.max(_.min(t,this.props.max),this.props.min)},isValidView:function(e){var t=E.indexOf(this.props.initialView),s=E.indexOf(this.props.finalView),n=E.indexOf(e);return n>=t&&s>=n}});e.exports=b(U,{value:"onChange"}),e.exports.BaseCalendar=U},function(e,t,s){"use strict";function n(e){var t=null!=e[v.CALENDAR]?e.calendar:!0,s=null!=e[v.TIME]?e.time:!0;return e.format?e.format:t&&s||!t&&!s?m.date.formats["default"]:m.date.formats[t?"date":"time"]}function r(e,t,s){var n="";return e instanceof Date&&!isNaN(e.getTime())&&(n=m.date.format(e,t,s)),n}function i(e,t,s){for(var n,r=0;r=0||Object.prototype.hasOwnProperty.call(e,n)&&(s[n]=e[n]);return s},t._extends=Object.assign||function(e){for(var t=1;t1?t-1:0),n=1;t>n;n++)s[n-1]=arguments[n];return"function"==typeof e?e.apply(void 0,s):e},isShallowEqual:function(e,t){return e===t?!0:e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():"object"!=typeof e&&"object"!=typeof t?e===t:typeof e!=typeof t?!1:i(e,t)},transform:function(e,t,s){return a.each(e,t.bind(null,s=s||(Array.isArray(e)?[]:{}))),s},each:function(e,t,s){if(Array.isArray(e))return e.forEach(t,s);for(var r in e)n(e,r)&&t.call(s,e[r],r,e)},pick:function(e,t){return t=[].concat(t),a.transform(e,function(e,s,n){-1!==t.indexOf(n)&&(e[n]=s)},{})},omit:function(e,t){return t=[].concat(t),a.transform(e,function(e,s,n){-1===t.indexOf(n)&&(e[n]=s)},{})},find:function(e,t,s){var r;if(Array.isArray(e))return e.every(function(n,i){return t.call(s,n,i,e)?(r=n,!1):!0}),r;for(var i in e)if(n(e,i)&&t.call(s,e[i],i,e))return e[i]},chunk:function(e,t){var s=0,n=e?e.length:0,r=[];for(t=Math.max(+t||1,1);n>s;)r.push(e.slice(s,s+=t));return r},splat:function(e){return null==e?[]:[].concat(e)},noop:function(){},uniqueId:function(e){return""+((null==e?"":e)+ ++o)},isFirstFocusedRender:function(e){return e._firstFocus||e.state.focused&&(e._firstFocus=!0)},ifNotDisabled:function(e,t){return 1===arguments.length&&(t=e,e=!1),function(){for(var s=arguments.length,n=Array(s),r=0;s>r;r++)n[r]=arguments[r];return this.isDisabled()||!e&&this.isReadOnly()?void 0:t.apply(this,n)}}}},function(e,t,s){"use strict";var n={eq:function(e,t){return e===t},neq:function(e,t){return e!==t},gt:function(e,t){return e>t},gte:function(e,t){return e>=t},lt:function(e,t){return t>e},lte:function(e,t){return t>=e},contains:function(e,t){return-1!==e.indexOf(t)},startsWith:function(e,t){return 0===e.lastIndexOf(t,0)},endsWith:function(e,t){var s=e.length-t.length,n=e.indexOf(t,s);return-1!==n&&n===s}};e.exports=n},function(e,t,s){"use strict";function n(e,t){var s,n,r=l.animate.TRANSLATION_MAP;return r&&r[e]?(s={},s[d]=""+r[e]+"("+t+")",s):(n={},n[e]=t,n)}function r(e){var t=o.Children.map(e,function(e){return e});for(var s in t)return s}var i=s(13),o=s(11),a=s(58),p=s(56),l=s(35),u=s(48),c=s(19),d=l.animate.transform,h=o.createClass({displayName:"PopupContent",render:function(){var e=this.props.children;return e?(e=o.Children.only(this.props.children),c.cloneElement(e,{className:u(e.props.className,"rw-popup rw-widget")})):o.createElement("span",{className:"rw-popup rw-widget"})}});e.exports=o.createClass({displayName:"Popup",propTypes:{open:o.PropTypes.bool,dropUp:o.PropTypes.bool,duration:o.PropTypes.number,onRequestClose:o.PropTypes.func.isRequired,onClosing:o.PropTypes.func,onOpening:o.PropTypes.func,onClose:o.PropTypes.func,onOpen:o.PropTypes.func},getInitialState:function(){return{}},getDefaultProps:function(){return{duration:200,open:!1,onClosing:function(){},onOpening:function(){},onClose:function(){},onOpen:function(){}}},componentWillMount:function(){!this.props.open&&(this._initialPosition=!0)},componentWillReceiveProps:function(e){this.setState({contentChanged:r(e.children)!==r(this.props.children)})},componentDidUpdate:function(e){var t=e.open&&!this.props.open,s=!e.open&&this.props.open,n=this.props.open;s?this.open():t?this.close():n&&this.height()},render:function(){var e=this.props,t=e.className,s=e.open,n=e.dropUp,r=i.objectWithoutProperties(e,["className","open","dropUp"]),a=s?"block":void 0;return this._initialPosition&&(a="none"),o.createElement("div",i._extends({},r,{style:i._extends({display:a,height:this.state.height},r.style),className:u(t,"rw-popup-container",{"rw-dropup":n})}),o.createElement(h,{ref:"content"},this.props.children))},reset:function(){var e=c.findDOMNode(this),t=c.findDOMNode(this.refs.content),s={display:"block",overflow:"hidden"};a(e,s),this.height(),a(t,n("top",this.props.dropUp?"100%":"-100%"))},height:function f(){var e=c.findDOMNode(this),t=c.findDOMNode(this.refs.content),s=parseInt(a(t,"margin-top"),10)+parseInt(a(t,"margin-bottom"),10),f=p(t)+(isNaN(s)?0:s);this.state.height!==f&&(e.style.height=f+"px",this.setState({height:f}))},open:function(){var e=this,t=c.findDOMNode(this),s=c.findDOMNode(this.refs.content);this.ORGINAL_POSITION=a(s,"position"),this._isOpening=!0,this._initialPosition?(this._initialPosition=!1,this.reset()):this.height(),this.props.onOpening(),t.className+=" rw-popup-animating",s.style.position="absolute",l.animate(s,{top:0},e.props.duration,"ease",function(){e._isOpening&&(t.className=t.className.replace(/ ?rw-popup-animating/g,""),s.style.position=e.ORGINAL_POSITION,t.style.overflow="visible",e.ORGINAL_POSITION=null,e.props.onOpen())})},close:function(e){var t=this,s=c.findDOMNode(this.refs.content),n=c.findDOMNode(this);this.ORGINAL_POSITION=a(s,"position"),this._isOpening=!1,this.height(),this.props.onClosing(),n.style.overflow="hidden",n.className+=" rw-popup-animating",s.style.position="absolute",l.animate(s,{top:this.props.dropUp?"100%":"-100%"},void 0===e?this.props.duration:e,"ease",function(){t._isOpening||(s.style.position=t.ORGINAL_POSITION,n.className=n.className.replace(/ ?rw-popup-animating/g,""),n.style.display="none",t.ORGINAL_POSITION=null,t.props.onClose())})}})},function(e,t,s){"use strict";var n=s(13),r=s(11),i=s(48);e.exports=r.createClass({displayName:"exports",render:function(){var e=this.props,t=e.className,s=e.children,o=n.objectWithoutProperties(e,["className","children"]);return r.createElement("button",n._extends({},o,{type:"button",className:i(t,"rw-btn")}),s)}})},function(e,t,s){"use strict";var n=s(13),r=s(11),i=s(60),o=s(19);e.exports=r.createClass({displayName:"ComboboxInput",propTypes:{value:r.PropTypes.string,onChange:r.PropTypes.func.isRequired},componentDidUpdate:function(){var e=o.findDOMNode(this),t=this.props.value;if(this.isSuggesting()){var s=t.toLowerCase().indexOf(this._last.toLowerCase())+this._last.length,n=t.length-s;s>=0&&i(e,s,s+n)}},getDefaultProps:function(){return{value:""}},render:function(){return r.createElement("input",n._extends({},this.props,{type:"text","aria-disabled":this.props.disabled,"aria-readonly":this.props.readOnly,className:this.props.className+" rw-input",onKeyDown:this.props.onKeyDown,onChange:this._change,value:null==this.props.value?"":this.props.value}))},isSuggesting:function(){var e=this.props.value,t=null!=this._last&&-1!==e.toLowerCase().indexOf(this._last.toLowerCase());return this.props.suggest&&t},accept:function(e){var t=o.findDOMNode(this).value||"",s=t.length;this._last=null,e&&i(o.findDOMNode(this),s,s)},_change:function(e){var t=e.target.value,s=!!this.props.placeholder;(!s||t||t!==(this.props.value||""))&&(this._last=t,this.props.onChange(e,t))},focus:function(){o.findDOMNode(this).focus()}})},function(e,t,s){"use strict";var n=s(11),r=s(14),i=n.version.split(".").map(parseFloat);e.exports={version:function(){return i},type:function(e){return 0===i[0]&&i[1]>=13?e:e.type},findDOMNode:function(e){return n.findDOMNode?n.findDOMNode(e):e.getDOMNode()},cloneElement:function(e,t){return n.cloneElement?n.cloneElement(e,t):(r.each(t,function(t,s){return e.props[s]=t}),e)}}},function(e,t,s){"use strict";function n(e){function t(t,s,n,r,i){return r=r||"<>",null!=s[n]?e(s,n,r,i):t?new Error("Required prop `"+n+"` was not specified in `"+r+"`."):void 0}var s=t.bind(null,!1);return s.isRequired=t.bind(null,!0),s}var r=s(11),i=s(35).locale,o=s(15),a=Object.keys(o).filter(function(e){return"filter"!==e});e.exports={elementType:n(function(e,t,s){if("function"!=typeof e[t]){if(r.isValidElement(e[t]))return new Error("Invalid prop `"+t+"` specified in `"+s+"`. Expected an Element `type`, not an actual Element");if("string"!=typeof e[t])return new Error("Invalid prop `"+t+"` specified in `"+s+"`. Expected an Element `type` such as a tag name or return value of React.createClass(...)")}return!0}),numberFormat:n(function(){for(var e,t=arguments.length,s=Array(t),n=0;t>n;n++)s[n]=arguments[n];return(e=i.number).propType.apply(e,s)}),dateFormat:n(function(){for(var e,t=arguments.length,s=Array(t),n=0;t>n;n++)s[n]=arguments[n];return(e=i.date).propType.apply(e,s)}),accessor:r.PropTypes.oneOfType([r.PropTypes.string,r.PropTypes.func]),message:r.PropTypes.oneOfType([r.PropTypes.func,r.PropTypes.string]),filter:r.PropTypes.oneOfType([r.PropTypes.func,r.PropTypes.bool,r.PropTypes.oneOf(a)])}},function(e,t,s){"use strict";var n=s(13),r=s(11),i=s(53),o=s(20),a=s(19),p=s(48),l=s(14);e.exports=r.createClass({displayName:"List",mixins:[s(23),s(26),s(59)],propTypes:{data:r.PropTypes.array,onSelect:r.PropTypes.func,onMove:r.PropTypes.func,itemComponent:o.elementType,groupComponent:o.elementType,selected:r.PropTypes.any,focused:r.PropTypes.any,valueField:r.PropTypes.string,textField:o.accessor,optID:r.PropTypes.string,groupBy:o.accessor,messages:r.PropTypes.shape({emptyList:o.message})},getDefaultProps:function(){return{optID:"",onSelect:function(){},data:[],messages:{emptyList:"There are no items in this list"}}},getInitialState:function(){var e=[];return{groups:this._group(this.props.groupBy,this.props.data,e),sortedKeys:e}},componentWillReceiveProps:function(e){var t=[];(e.data!==this.props.data||e.groupBy!==this.props.groupBy)&&this.setState({groups:this._group(e.groupBy,e.data,t),sortedKeys:t})},componentDidMount:function(e){this.move()},componentDidUpdate:function(){this.move()},render:function(){var e,t=this,s=l.omit(this.props,["data","selectedIndex"]),i=s.className,o=n.objectWithoutProperties(s,["className"]),a=this.state.groups,p=[],u=-1;return p=this.props.data.length?this.state.sortedKeys.reduce(function(s,n){e=a[n],s.push(t._renderGroupHeader(n));for(var r=0;re&&this.isDisabled(e,!0);)e++;e!==t&&this.setState({focused:e})},last:function(){for(var e=this.props.value.length-1;e>-1&&this.isDisabled(e,!0);)e--;e>=0&&this.setState({focused:e})},next:function(){for(var e=this.state.focused+1,t=this.props.value.length;t>e&&this.isDisabled(e,!0);)e++;return null!==this.state.focused?e>=t?this.clear():void this.setState({focused:e}):void 0},prev:function(){var e=this.state.focused;for(null===e&&(e=this.props.value.length),e--;e>-1&&this.isDisabled(e,!0);)e--;e>=0&&this.setState({focused:e})}})},function(e,t,s){"use strict";var n=s(13),r=s(11),i=s(36),o=s(12),a=s(19),p=s(35).locale,l=s(20),u=s(14),c=function(e){return e.format||p.date.formats.time};e.exports=r.createClass({displayName:"TimeList",propTypes:{value:r.PropTypes.instanceOf(Date),min:r.PropTypes.instanceOf(Date),max:r.PropTypes.instanceOf(Date),step:r.PropTypes.number,itemComponent:l.elementType,format:l.dateFormat,onSelect:r.PropTypes.func,preserveDate:r.PropTypes.bool,culture:r.PropTypes.string},mixins:[s(24)],getDefaultProps:function(){return{step:30,onSelect:function(){},min:new Date(1900,0,1),max:new Date(2099,11,31),preserveDate:!0,delay:300}},getInitialState:function(){var e=this._dates(this.props),t=this._closestDate(e,this.props.value);return{focusedItem:t||e[0],dates:e}},componentWillReceiveProps:function(e){var t=this._dates(e),s=this._closestDate(t,e.value),n=!i.eq(e.value,this.props.value,"minutes"),r=!i.eq(e.min,this.props.min,"minutes"),o=!i.eq(e.max,this.props.max,"minutes");(n||r||o)&&this.setState({focusedItem:s||t[0],dates:t})},render:function(){var e=this.state.dates,t=this._closestDate(e,this.props.value);return r.createElement(o,n._extends({},u.pick(this.props,Object.keys(a.type(o).propTypes)),{ref:"list",data:e,textField:"label",valueField:"date",selected:t,focused:this.state.focusedItem,itemComponent:this.props.itemComponent,onSelect:this.props.onSelect}))},_closestDate:function(e,t){var s,n=6e4*this.props.step,r=null;return t?(t=new Date(Math.floor(t.getTime()/n)*n),s=i.format(t,this.props.format,this.props.culture),e.some(function(e){return e.label===s?r=e:void 0}),r):null},_data:function(){return this.state.dates},_dates:function(e){for(var t=[],s=0,n=this._dateValues(e),r=n.min,o=i.date(r);i.date(r)===o&&i.lte(r,n.max);)s++,t.push({date:r,label:p.date.format(r,c(e),e.culture)}),r=i.add(r,e.step||30,"minutes");return t},_dateValues:function(e){var t,s,n=e.value||i.today(),r=e.preserveDate,o=e.min,a=e.max;return r?(t=i.today(),s=i.tomorrow(),{min:i.eq(n,o,"day")?i.merge(t,o):t,max:i.eq(n,a,"day")?i.merge(t,a):s}):(t=i.startOf(i.merge(new Date,o),"minutes"),s=i.startOf(i.merge(new Date,a),"minutes"),i.lte(s,t)&&i.gt(a,o,"day")&&(s=i.tomorrow()),{min:t,max:s})},_keyDown:function(e){var t=this,s=e.key,n=String.fromCharCode(e.keyCode),r=this.state.focusedItem,i=this.refs.list;"End"===s?this.setState({focusedItem:i.last()}):"Home"===s?this.setState({focusedItem:i.first()}):"Enter"===s?this.props.onSelect(r):"ArrowDown"===s?(e.preventDefault(),this.setState({focusedItem:i.next(r)})):"ArrowUp"===s?(e.preventDefault(),this.setState({focusedItem:i.prev(r)})):(e.preventDefault(),this.search(n,function(e){t.setState({focusedItem:e})}))},scrollTo:function(){this.refs.list.move&&this.refs.list.move()},search:function(e,t){var s=this,n=((this._searchTerm||"")+e).toLowerCase();this._searchTerm=n,this.setTimeout("search",function(){var e=s.refs.list,r=e.next(s.state.focusedItem,n);s._searchTerm="",r&&t(r)},this.props.delay)}})},function(e,t,s){"use strict";function n(e){return!isNaN(e.getTime())}function r(e,t,s){var r="";return e instanceof Date&&n(e)&&(r=u.date.format(e,t,s)),r}function i(e,t,s){return function(){e&&e.apply(s,arguments),t&&t.apply(s,arguments)}}var o=s(13),a=s(11),p=s(48),l=(s(36),s(19)),u=s(35).locale,c=s(20);e.exports=a.createClass({displayName:"DatePickerInput",propTypes:{format:c.dateFormat.isRequired,editFormat:c.dateFormat,parse:a.PropTypes.func.isRequired,value:a.PropTypes.instanceOf(Date),onChange:a.PropTypes.func.isRequired,culture:a.PropTypes.string},getDefaultProps:function(){return{textValue:""}},componentWillReceiveProps:function(e){var t=r(e.value,e.editing&&e.editFormat?e.editFormat:e.format,e.culture);this.startValue=t,this.setState({textValue:t})},getInitialState:function(){var e=r(this.props.value,this.props.editing&&this.props.editFormat?this.props.editFormat:this.props.format,this.props.culture);return this.startValue=e,{textValue:e}},render:function(){var e=this.state.textValue;return a.createElement("input",o._extends({},this.props,{type:"text",className:p({"rw-input":!0}),value:e,"aria-disabled":this.props.disabled,"aria-readonly":this.props.readOnly,disabled:this.props.disabled,readOnly:this.props.readOnly,onChange:this._change,onBlur:i(this.props.blur,this._blur,this)}))},_change:function(e){this.setState({textValue:e.target.value}),this._needsFlush=!0},_blur:function(e){var t=e.target.value;this._needsFlush&&(this._needsFlush=!1,this.props.onChange(this.props.parse(t),t))},focus:function(){l.findDOMNode(this).focus()}})},function(e,t,s){"use strict";function n(e,t,s,n,r){var i="function"==typeof n?n(s,r,e):t.call(e,s,n,r);return o(null==i||"string"==typeof i,"`localizer format(..)` must return a string, null, or undefined"),i}function r(e,t){}var i=s(13),o=s(52),a=s(14),p=(a.has,s(11)),l=["default"],u=p.PropTypes.oneOfType([p.PropTypes.string,p.PropTypes.func]),c=["default","date","time","header","footer","dayOfMonth","month","year","decade","century"],d=function f(e){var t=this,s=e.format,a=e.parse,p=e.precision,c=e.formats,d=e.propType;i.classCallCheck(this,f),o("function"==typeof s,"number localizer `format(..)` must be a function"),o("function"==typeof a,"number localizer `parse(..)` must be a function"),r(l,c),this.propType=d||u,this.formats=c,this.precision=p||function(){return null},this.format=function(e,r,i){return n(t,s,e,r,i)},this.parse=function(e,s){var n=a.call(t,e,s);return o(null==n||"number"==typeof n,"number localizer `parse(..)` must return a number, null, or undefined"),n}},h=function m(e){var t=this;i.classCallCheck(this,m),o("function"==typeof e.format,"date localizer `format(..)` must be a function"),o("function"==typeof e.parse,"date localizer `parse(..)` must be a function"),o("function"==typeof e.firstOfWeek,"date localizer `firstOfWeek(..)` must be a function"),r(c,e.formats),this.propType=e.propType||u,this.formats=e.formats,this.startOfWeek=e.firstOfWeek,this.format=function(s,r,i){return n(t,e.format,s,r,i)},this.parse=function(s,n,r){var i=e.parse.call(t,s,n,r);return o(null==i||i instanceof Date&&!isNaN(i.getTime()),"date localizer `parse(..)` must return a valid Date, null, or undefined"),i}};e.exports={NumberLocalizer:d,DateLocalizer:h}},function(e,t,s){"use strict";function n(e){function t(t){return t?(i.globalize||e).findClosestCulture(t):(i.globalize||e).culture()}function s(e){return e=t(e),e&&e.calendar.firstDay||0}function n(e){var n=t(arguments[1]),i=n.name,o=s(n),a=function l(){var l=n.calendar.days.namesShort.slice();return 0===o?l:l.concat(l.splice(0,o))},p=r[i]||(r[i]=a());return p[e]}var r=Object.create(null),i=new a({formats:{date:"d",time:"t","default":"f",header:"MMMM yyyy",footer:"D",weekday:n,dayOfMonth:"dd",month:"MMM",year:"yyyy",decade:function(e,t,s){return""+s.format(e,s.formats.year,t)+" - "+s.format(p.endOf(e,"decade"),s.formats.year,t)},century:function(e,t,s){return""+s.format(e,s.formats.year,t)+" - "+s.format(p.endOf(e,"century"),s.formats.year,t)}},firstOfWeek:s,parse:function(t,s,n){return(this.globalize||e).parseDate(t,s,n)},format:function(t,s,n){return(this.globalize||e).format(t,s,n)}});return i.globalize=e,i}function r(e){function t(t){return t?(s.globalize||e).findClosestCulture(t):(s.globalize||e).culture()}var s=new o({formats:{"default":"D"},parse:function(t,s){return(this.globalize||e).parseFloat(t,10,s)},format:function(t,s,n){return(this.globalize||e).format(t,s,n)},precision:function(e,s){var n=t(s),r=n.numberFormat;return"string"==typeof e?e.length>1?parseFloat(e.substr(1)):(-1!==e.indexOf("p")&&(r=r.percent),-1!==e.indexOf("c")&&(r=r.curency),r.decimals||null):null}});return s.globalize=e,s}var i=s(46),o=i.NumberLocalizer,a=i.DateLocalizer,p=s(63);e.exports={globalizeNumberLocalizer:r,globalizeDateLocalizer:n}},function(e,t,s){/*! - Copyright (c) 2015 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames - */ -function n(){for(var e,t="",s=0;si;i++)r[i]=arguments[i];t&&t.call.apply(t,[e].concat(r)),s&&s.call.apply(s,[e].concat(r))}}function o(e,t,s){return a(e,t.bind(null,s=s||(Array.isArray(e)?[]:{}))),s}function a(e,t,s){if(Array.isArray(e))return e.forEach(t,s);for(var n in e)p(e,n)&&t.call(s,e[n],n,e)}function p(e,t){return e?Object.prototype.hasOwnProperty.call(e,t):!1}var l=s(64),u=s(11);s(52),u.version.split(".").map(parseFloat);e.exports=function(e,t,s){function p(e,s){for(var r=arguments.length,i=Array(r>2?r-2:0),o=2;r>o;o++)i[o-2]=arguments[o];var a=n(e),p=this.props[t[e]];a&&c(this.props,a)&&!p&&(p=this.props[a].requestChange),p&&(this._notifying=!0,p.call.apply(p,[this,s].concat(i)),this._notifying=!1),this.setState(function(){var t={};return t[e]=s,t}())}function c(e,t){return void 0!==e[t]}var d=e.displayName||e.name||"Component",h={};return d=d[0].toUpperCase()+d.substr(1),s=s||{},u.createClass({displayName:"Uncontrolled"+d,propTypes:h,getInitialState:function(){var e=this.props,s=Object.keys(t);return o(s,function(t,s){t[s]=e[r(s)]},{})},shouldComponentUpdate:function(){return!this._notifying},render:function(){var r=this,o={},d=this.props,h=(d.valueLink,d.checkedLink,l.objectWithoutProperties(d,["valueLink","checkedLink"]));return a(t,function(e,t){var s=n(t),i=r.props[t];s&&!c(r.props,t)&&c(r.props,s)&&(i=r.props[s].value),o[t]=void 0!==i?i:r.state[t],o[e]=p.bind(r,t)}),o=l._extends({},h,o),a(s,function(e,t){return o[t]=i(r,e,o[t])}),u.createElement(e,o)}})}},function(e,t,s){function n(){try{return document.activeElement||document.body}catch(e){return document.body}}e.exports=n},function(e,t,s){"use strict";var n=function(e,t,s,n,r,i,o,a){if(!e){var p;if(void 0===t)p=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[s,n,r,i,o,a],u=0;p=new Error("Invariant Violation: "+t.replace(/%s/g,function(){return l[u++]}))}throw p.framesToPop=1,p}};e.exports=n},function(e,t,s){"use strict";var n=s(68),r=n;e.exports=r},function(e,t,s){"use strict";var n=s(65),r=function(){var e=n&&document.documentElement;return e&&e.contains?function(e,t){return e.contains(t)}:e&&e.compareDocumentPosition?function(e,t){return e===t||!!(16&e.compareDocumentPosition(t))}:function(e,t){if(t)do if(t===e)return!0;while(t=t.parentNode);return!1}}();e.exports=r},function(e,t,s){"use strict";var n=s(66),r=s(67);e.exports=function(e,t){var s=r(e);return s?s.innerWidth:t?e.clientWidth:n(e).width}},function(e,t,s){"use strict";var n=s(66),r=s(67);e.exports=function(e,t){var s=r(e);return s?s.innerHeight:t?e.clientHeight:n(e).height}},function(e,t,s){"use strict";var n=s(66),r=s(56),i=s(70),o=s(69),a=s(71),p=s(67);e.exports=function(e,t){var s,l,u,c,d,h,f,m=n(e),y={top:0,left:0};if(e){s=t||i(e),c=p(s),l=o(s),h=r(s,!0),c=p(s),c||(y=n(s)),m={top:m.top-y.top,left:m.left-y.left,height:m.height,width:m.width},d=m.height,u=m.top+(c?0:l),f=u+d,l=l>u?u:f>l+h?f-h:l;var v=a(function(){return o(s,l)});return function(){return a.cancel(v)}}}},function(e,t,s){"use strict";var n=s(72),r=s(73),i=s(74),o=s(75),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,s){var p="",l=t;if("string"==typeof t){if(void 0===s)return e.style[n(t)]||i(e).getPropertyValue(t);(l={})[t]=s}for(var u in l)a.call(l,u)&&(l[u]||0===l[u]?p+=r(u)+":"+l[u]+";":o(e,r(u)));e.style.cssText+=";"+p}},function(e,t,s){"use strict";function n(e,t,s,n){var r,i,p=o.startsWith,l=-1,u=t.length;for(s=s.toLowerCase();++ln,i=r&&a._dataText.call(e,t[l]).toLowerCase(),r&&p(i,s))return t[l]}function r(e,t,s,n){var r,i,p=o.startsWith,l=t.length;for(s=s.toLowerCase();--l>=0;)if(r=r||n>l,i=r&&a._dataText.call(e,t[l]).toLowerCase(),r&&p(i,s))return t[l]}var i=s(11),o=s(15),a=s(26);e.exports={propTypes:{textField:i.PropTypes.string},first:function(){return this._data()[0]},last:function(){var e=this._data();return e[e.length-1]},prev:function(e,t){var s=this._data(),n=s.indexOf(e);return-1===n&&(n=s.length),t?r(this,s,t,n):--n<0?s[0]:s[n]},next:function(e,t){var s=this._data(),r=s.indexOf(e);return t?n(this,s,t,r):++r===s.length?s[s.length-1]:s[r]}}},function(e,t,s){"use strict";function n(e){var t,s,n,r;if(void 0!==e.selectionStart)t=e.selectionStart,s=e.selectionEnd;else try{e.focus(),n=e.createTextRange(),r=n.duplicate(),n.moveToBookmark(document.selection.createRange().getBookmark()),r.setEndPoint("EndToStart",n),t=r.text.length,s=t+n.text.length}catch(i){}return{start:t,end:s}}function r(e,t,s){var n;try{void 0!==e.selectionStart?(e.focus(),e.setSelectionRange(t,s)):(e.focus(),n=e.createTextRange(),n.collapse(!0),n.moveStart("character",t),n.moveEnd("character",s-t),n.select())}catch(r){}}e.exports=function(e,t,s){return void 0===t?n(e):void r(e,t,s)}},function(e,t,s){"use strict";var n=s(11);e.exports={contextTypes:{isRtl:n.PropTypes.bool},isRtl:function(){return!!this.context.isRtl}}},function(e,t,s){"use strict";function n(e,t,s,n,d){function h(t){t.target===t.currentTarget&&(f=!0,a(t.target,p.end,h),i(e,u),d&&d.call(this))}var f,m=[],y={target:e,currentTarget:e},v={},g="";"function"==typeof n&&(d=n,n=null),p.end||(s=0),void 0===s&&(s=200);for(var T in t)l.call(t,T)&&(/(top|bottom)/.test(T)?g+=c[T]+"("+t[T]+") ":(v[T]=t[T],m.push(r(T))));g&&(v[p.transform]=g,m.push(p.transform)),s>0&&(v[p.property]=m.join(", "),v[p.duration]=s/1e3+"s",v[p.delay]="0s",v[p.timing]=n||"linear",o(e,p.end,h),setTimeout(function(){f||h(y)},s+500)),e.clientLeft,i(e,v),0>=s&&setTimeout(h.bind(null,y),0)}var r=s(76),i=s(58),o=s(77),a=s(78),p=s(79),l=Object.prototype.hasOwnProperty,u={},c={left:"translateX",right:"translateX",top:"translateY",bottom:"translateY"};u[p.property]=u[p.duration]=u[p.delay]=u[p.timing]="",n.endEvent=p.end,n.transform=p.transform,n.TRANSLATION_MAP=c,e.exports=n},function(e,t,s){function n(e,t){var s=y.month(e),n=s+t;return e=y.month(e,n),0>n&&(n=12+t),y.month(e)!==n%12&&(e=y.date(e,0)),e}function r(e){return function(t,s){return void 0===s?t["get"+e]():(t=new Date(t),t["set"+e](s),t)}}function i(e){return function(t,s,n){return e(+y.startOf(t,n),+y.startOf(s,n))}}var o="milliseconds",a="seconds",p="minutes",l="hours",u="day",c="week",d="month",h="year",f="decade",m="century",y=e.exports={add:function(e,t,s){switch(e=new Date(e),s){case o:case a:case p:case l:case h:return y[s](e,y[s](e)+t);case u:return y.date(e,y.date(e)+t);case c:return y.date(e,y.date(e)+7*t);case d:return n(e,t);case f:return y.year(e,y.year(e)+10*t);case m:return y.year(e,y.year(e)+100*t)}throw new TypeError('Invalid units: "'+s+'"')},subtract:function(e,t,s){return y.add(e,-t,s)},startOf:function(e,t,s){switch(e=new Date(e),t){case"century":case"decade":case"year":e=y.month(e,0);case"month":e=y.date(e,1);case"week":case"day":e=y.hours(e,0);case"hours":e=y.minutes(e,0);case"minutes":e=y.seconds(e,0);case"seconds":e=y.milliseconds(e,0)}return t===f&&(e=y.subtract(e,y.year(e)%10,"year")),t===m&&(e=y.subtract(e,y.year(e)%100,"year")),t===c&&(e=y.weekday(e,0,s)),e},endOf:function(e,t,s){return e=new Date(e),e=y.startOf(e,t,s),e=y.add(e,1,t),e=y.subtract(e,1,o)},eq:i(function(e,t){return e===t}),neq:i(function(e,t){return e!==t}),gt:i(function(e,t){return e>t}),gte:i(function(e,t){return e>=t}),lt:i(function(e,t){return t>e}),lte:i(function(e,t){return t>=e}),min:function(){return new Date(Math.min.apply(Math,arguments))},max:function(){return new Date(Math.max.apply(Math,arguments))},inRange:function(e,t,s,n){return n=n||"day",!(t&&!y.gte(e,t,n)||s&&!y.lte(e,s,n))},milliseconds:r("Milliseconds"),seconds:r("Seconds"),minutes:r("Minutes"),hours:r("Hours"),day:r("Day"),date:r("Date"),month:r("Month"),year:r("FullYear"),decade:function(e,t){return void 0===t?y.year(y.startOf(e,f)):y.add(e,t+10,h)},century:function(e,t){return void 0===t?y.year(y.startOf(e,m)):y.add(e,t+100,h)},weekday:function(e,t,s){var n=(y.day(e)+7-(s||0))%7;return void 0===t?n:y.add(e,t-n,u)}}},function(e,t,s){var n,r,i;!function(s,o){r=[t],n=o,i="function"==typeof n?n.apply(t,r):n,!(void 0!==i&&(e.exports=i))}(this,function(e){var t=e;t.objectWithoutProperties=function(e,t){var s={};for(var n in e)t.indexOf(n)>=0||Object.prototype.hasOwnProperty.call(e,n)&&(s[n]=e[n]);return s},t._extends=Object.assign||function(e){for(var t=1;t MoneyGo - - - + + + - - - - - - - - - - - + diff --git a/static/main.js b/static/main.js new file mode 100644 index 0000000..f28e7ed --- /dev/null +++ b/static/main.js @@ -0,0 +1,23 @@ +var React = require('react'); +var ReactDOM = require('react-dom'); + +var Globalize = require('globalize'); +var globalizeLocalizer = require('react-widgets/lib/localizers/globalize'); + +var MoneyGoApp = require('./MoneyGoApp.js'); + +// Setup globalization for react-widgets +//Globalize.load(require("cldr-data").entireSupplemental()); +Globalize.load( + require("cldr-data/main/en/ca-gregorian"), + require("cldr-data/main/en/numbers"), + require("cldr-data/supplemental/likelySubtags"), + require("cldr-data/supplemental/timeData"), + require("cldr-data/supplemental/weekData") +); +Globalize.locale('en'); +globalizeLocalizer(Globalize); + +$(document).ready(function() { + ReactDOM.render(, document.getElementById("content")); +}); diff --git a/static/ui.js b/static/ui.js deleted file mode 100644 index 173be08..0000000 --- a/static/ui.js +++ /dev/null @@ -1,620 +0,0 @@ -// Import all the objects we want to use from ReactBootstrap -var Jumbotron = ReactBootstrap.Jumbotron; -var TabbedArea = ReactBootstrap.TabbedArea; -var TabPane = ReactBootstrap.TabPane; -var Panel = ReactBootstrap.Panel; -var ButtonGroup = ReactBootstrap.ButtonGroup; -var Modal = ReactBootstrap.Modal; - -const NewUserForm = React.createClass({ - getInitialState: function() { - return {error: "", - name: "", - username: "", - email: "", - password: "", - confirm_password: "", - passwordChanged: false, - initial_password: ""}; - }, - passwordValidationState: function() { - if (this.state.passwordChanged) { - if (this.state.password.length >= 10) - return "success"; - else if (this.state.password.length >= 6) - return "warning"; - else - return "error"; - } - }, - confirmPasswordValidationState: function() { - if (this.state.confirm_password.length > 0) { - if (this.state.confirm_password == this.state.password) - return "success"; - else - return "error"; - } - }, - handleCancel: function() { - if (this.props.onCancel != null) - this.props.onCancel(); - }, - handleChange: function() { - if (this.refs.password.getValue() != this.state.initial_password) - this.setState({passwordChanged: true}); - this.setState({ - name: this.refs.name.getValue(), - username: this.refs.username.getValue(), - email: this.refs.email.getValue(), - password: this.refs.password.getValue(), - confirm_password: this.refs.confirm_password.getValue() - }); - }, - handleSubmit: function(e) { - var u = new User(); - var error = ""; - e.preventDefault(); - - u.Name = this.state.name; - u.Username = this.state.username; - u.Email = this.state.email; - u.Password = this.state.password; - if (u.Password != this.state.confirm_password) { - this.setState({error: "Error: password do not match"}); - return; - } - - this.handleCreateNewUser(u); - }, - handleCreateNewUser: function(user) { - $.ajax({ - type: "POST", - dataType: "json", - url: "user/", - data: {user: user.toJSON()}, - success: function(data, status, jqXHR) { - var e = new Error(); - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - this.props.onNewUser(); - } - }.bind(this), - error: function(jqXHR, status, error) { - var e = new Error(); - e.ErrorId = 5; - e.ErrorString = "Request Failed: " + status + error; - this.setState({error: e}); - }.bind(this), - }); - }, - render: function() { - var title =

Create New User

; - return ( - - {this.state.error} -
- - - - - - - - - -
-
- ); - } -}); - -const AccountSettingsModal = React.createClass({ - _getInitialState: function(props) { - return {error: "", - name: props.user.Name, - username: props.user.Username, - email: props.user.Email, - password: BogusPassword, - confirm_password: BogusPassword, - passwordChanged: false, - initial_password: BogusPassword}; - }, - getInitialState: function() { - return this._getInitialState(this.props); - }, - componentWillReceiveProps: function(nextProps) { - if (nextProps.show && !this.props.show) { - this.setState(this._getInitialState(nextProps)); - } - }, - passwordValidationState: function() { - if (this.state.passwordChanged) { - if (this.state.password.length >= 10) - return "success"; - else if (this.state.password.length >= 6) - return "warning"; - else - return "error"; - } - }, - confirmPasswordValidationState: function() { - if (this.state.confirm_password.length > 0) { - if (this.state.confirm_password == this.state.password) - return "success"; - else - return "error"; - } - }, - handleCancel: function() { - if (this.props.onCancel != null) - this.props.onCancel(); - }, - handleChange: function() { - if (this.refs.password.getValue() != this.state.initial_password) - this.setState({passwordChanged: true}); - this.setState({ - name: this.refs.name.getValue(), - username: this.refs.username.getValue(), - email: this.refs.email.getValue(), - password: this.refs.password.getValue(), - confirm_password: this.refs.confirm_password.getValue() - }); - }, - handleSubmit: function(e) { - var u = new User(); - var error = ""; - e.preventDefault(); - - u.UserId = this.props.user.UserId; - u.Name = this.state.name; - u.Username = this.state.username; - u.Email = this.state.email; - if (this.state.passwordChanged) { - u.Password = this.state.password; - if (u.Password != this.state.confirm_password) { - this.setState({error: "Error: password do not match"}); - return; - } - } else { - u.Password = BogusPassword; - } - - this.handleSaveSettings(u); - }, - handleSaveSettings: function(user) { - $.ajax({ - type: "PUT", - dataType: "json", - url: "user/"+user.UserId+"/", - data: {user: user.toJSON()}, - success: function(data, status, jqXHR) { - var e = new Error(); - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - user.Password = ""; - this.props.onSubmit(user); - } - }.bind(this), - error: function(jqXHR, status, error) { - var e = new Error(); - e.ErrorId = 5; - e.ErrorString = "Request Failed: " + status + error; - this.setState({error: e}); - }.bind(this), - }); - }, - render: function() { - return ( - - - Edit Account Settings - - - {this.state.error} -
- - - - - -
-
- - - - - - -
- ); - } -}); - -const MoneyGoApp = React.createClass({ - getInitialState: function() { - return { - hash: "home", - session: new Session(), - user: new User(), - accounts: [], - account_map: {}, - securities: [], - security_map: {}, - error: new Error(), - showAccountSettingsModal: false - }; - }, - componentDidMount: function() { - this.getSession(); - this.handleHashChange(); - if ("onhashchange" in window) { - window.onhashchange = this.handleHashChange; - } - }, - handleHashChange: function() { - var hash = location.hash.replace(/^#/, ''); - if (hash.length == 0) - hash = "home"; - if (hash != this.state.hash) - this.setHash(hash); - }, - setHash: function(hash) { - location.hash = hash; - if (this.state.hash != hash) - this.setState({hash: hash}); - }, - ajaxError: function(jqXHR, status, error) { - var e = new Error(); - e.ErrorId = 5; - e.ErrorString = "Request Failed: " + status + error; - this.setState({error: e}); - }, - getSession: function() { - $.ajax({ - type: "GET", - dataType: "json", - url: "session/", - success: function(data, status, jqXHR) { - var e = new Error(); - var s = new Session(); - e.fromJSON(data); - if (e.isError()) { - if (e.ErrorId != 1 /* Not Signed In*/) - this.setState({error: e}); - } else { - s.fromJSON(data); - } - this.setState({session: s}); - this.getUser(); - this.getAccounts(); - this.getSecurities(); - }.bind(this), - error: this.ajaxError - }); - }, - getUser: function() { - if (!this.state.session.isSession()) - return; - $.ajax({ - type: "GET", - dataType: "json", - url: "user/"+this.state.session.UserId+"/", - success: function(data, status, jqXHR) { - var e = new Error(); - var u = new User(); - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - u.fromJSON(data); - } - this.setState({user: u}); - }.bind(this), - error: this.ajaxError - }); - }, - getSecurities: function() { - if (!this.state.session.isSession()) { - this.setState({securities: [], security_map: {}}); - return; - } - $.ajax({ - type: "GET", - dataType: "json", - url: "security/", - success: function(data, status, jqXHR) { - var e = new Error(); - var securities = []; - var security_map = {}; - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - for (var i = 0; i < data.securities.length; i++) { - var s = new Security(); - s.fromJSON(data.securities[i]); - securities.push(s); - security_map[s.SecurityId] = s; - } - } - this.setState({securities: securities, security_map: security_map}); - }.bind(this), - error: this.ajaxError - }); - }, - getAccounts: function() { - if (!this.state.session.isSession()) { - this.setState({accounts: [], account_map: {}}); - return; - } - $.ajax({ - type: "GET", - dataType: "json", - url: "account/", - success: function(data, status, jqXHR) { - var e = new Error(); - var accounts = []; - var account_map = {}; - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - for (var i = 0; i < data.accounts.length; i++) { - var a = new Account(); - a.fromJSON(data.accounts[i]); - accounts.push(a); - account_map[a.AccountId] = a; - } - //Populate Children arrays in account objects - for (var i = 0; i < accounts.length; i++) { - var a = accounts[i]; - if (!a.isRootAccount()) - account_map[a.ParentAccountId].Children.push(a); - } - } - this.setState({accounts: accounts, account_map: account_map}); - }.bind(this), - error: this.ajaxError - }); - }, - handleErrorClear: function() { - this.setState({error: new Error()}); - }, - handleLoginSubmit: function(user) { - $.ajax({ - type: "POST", - dataType: "json", - url: "session/", - data: {user: user.toJSON()}, - success: function(data, status, jqXHR) { - var e = new Error(); - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - this.getSession(); - this.setHash("home"); - } - }.bind(this), - error: this.ajaxError - }); - }, - handleLogoutSubmit: function() { - this.setState({accounts: [], account_map: {}}); - $.ajax({ - type: "DELETE", - dataType: "json", - url: "session/", - success: function(data, status, jqXHR) { - var e = new Error(); - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } - this.setState({session: new Session(), user: new User()}); - }.bind(this), - error: this.ajaxError - }); - }, - handleAccountSettings: function() { - this.setState({showAccountSettingsModal: true}); - }, - handleSettingsSubmitted: function(user) { - this.setState({ - user: user, - showAccountSettingsModal: false - }); - }, - handleSettingsCanceled: function(user) { - this.setState({showAccountSettingsModal: false}); - }, - handleCreateNewUser: function() { - this.setHash("new_user"); - }, - handleGoHome: function(user) { - this.setHash("home"); - }, - handleCreateAccount: function(account) { - $.ajax({ - type: "POST", - dataType: "json", - url: "account/", - data: {account: account.toJSON()}, - success: function(data, status, jqXHR) { - var e = new Error(); - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - this.getAccounts(); - } - }.bind(this), - error: this.ajaxError - }); - }, - handleUpdateAccount: function(account) { - $.ajax({ - type: "PUT", - dataType: "json", - url: "account/"+account.AccountId+"/", - data: {account: account.toJSON()}, - success: function(data, status, jqXHR) { - var e = new Error(); - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - this.getAccounts(); - } - }.bind(this), - error: this.ajaxError - }); - }, - handleDeleteAccount: function(account) { - $.ajax({ - type: "DELETE", - dataType: "json", - url: "account/"+account.AccountId+"/", - success: function(data, status, jqXHR) { - var e = new Error(); - e.fromJSON(data); - if (e.isError()) { - this.setState({error: e}); - } else { - this.getAccounts(); - } - }.bind(this), - error: this.ajaxError - }); - }, - render: function() { - var mainContent; - if (this.state.hash == "new_user") { - mainContent = - } else { - if (this.state.user.isUser()) - mainContent = - - - - - Scheduled transactions go here... - Budgets go here... - Reports go here... - - else - mainContent = - -
-

MoneyGo

-

Go manage your money.

-
-
- } - - return ( -
- - {mainContent} - -
- ); - } -}); - -React.render(, document.getElementById("content"));