From 2621f64cc7bd2cc0343e0ea8202fd7f42739f00e Mon Sep 17 00:00:00 2001 From: Aaron Lindsay Date: Fri, 12 Feb 2016 20:36:59 -0500 Subject: [PATCH] Move to using npm/browserify to package everything This means it now requires the Javascript to be compiled before it can be run. This move also required a massive reorganization and lots of debugging/fixups to make everything work properly again. --- README | 13 + static/AccountCombobox.js | 37 + ...account_register.js => AccountRegister.js} | 58 +- static/AccountSettingsModal.js | 166 ++++ static/{accounts.js => AccountsTab.js} | 91 +-- static/Makefile | 4 + static/MoneyGoApp.js | 324 ++++++++ static/NewUserForm.js | 147 ++++ static/{top_bar.js => TopBar.js} | 13 +- static/external/fonts/rw-widgets.eot | Bin 5816 -> 0 bytes static/external/fonts/rw-widgets.svg | 18 - static/external/fonts/rw-widgets.ttf | Bin 5640 -> 0 bytes static/external/fonts/rw-widgets.woff | Bin 3332 -> 0 bytes .../react-bootstrap/react-bootstrap.min.js | 11 - static/external/react-widgets/core.css | 307 -------- static/external/react-widgets/loader-big.gif | Bin 23284 -> 0 bytes static/external/react-widgets/loading.gif | Bin 673 -> 0 bytes .../external/react-widgets/react-widgets.css | 730 ------------------ .../external/react-widgets/react-widgets.js | 9 - static/external/react-widgets/variables.css | 0 static/index.html | 18 +- static/main.js | 23 + static/ui.js | 620 --------------- 23 files changed, 790 insertions(+), 1799 deletions(-) create mode 100644 README create mode 100644 static/AccountCombobox.js rename static/{account_register.js => AccountRegister.js} (94%) create mode 100644 static/AccountSettingsModal.js rename static/{accounts.js => AccountsTab.js} (88%) create mode 100644 static/Makefile create mode 100644 static/MoneyGoApp.js create mode 100644 static/NewUserForm.js rename static/{top_bar.js => TopBar.js} (90%) delete mode 100644 static/external/fonts/rw-widgets.eot delete mode 100644 static/external/fonts/rw-widgets.svg delete mode 100644 static/external/fonts/rw-widgets.ttf delete mode 100644 static/external/fonts/rw-widgets.woff delete mode 100644 static/external/react-bootstrap/react-bootstrap.min.js delete mode 100644 static/external/react-widgets/core.css delete mode 100644 static/external/react-widgets/loader-big.gif delete mode 100644 static/external/react-widgets/loading.gif delete mode 100644 static/external/react-widgets/react-widgets.css delete mode 100644 static/external/react-widgets/react-widgets.js delete mode 100644 static/external/react-widgets/variables.css create mode 100644 static/main.js delete mode 100644 static/ui.js 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 78b52e1e2eb3890869cb62de690d076f1669fc4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5816 zcmdlX#=yWK#=yYHz{CIoObo2dAQ~hxff2;=2>_AE7%a@dz);R~yb4(y!WLmDVkl?O zWhiIJWJqC1XGmozVJK!`VBlj2Vn}63XDDUJVMt^sVqjnpV+dnNWhi1OX2@j7XUJnv zU@&CRV=!P~V8CSt1ISq*qZ$~P84~=1^^NQ_Jp33K7~U{2FoY%NCKg-}m)y?4!05uj z!044+R-yoL6PEx30|QrDL3(b-gb9%h3|uk{4BQ3jiNysB3=9Gc3|t%x3=ACUIhAS6 zK8(T)3``Rk7?=w(QWH~Hi+!drFtCA)G0VtEO=J&b4q{+nvtVFgP|3(GsSrH~l46Tt zU|>+l$xlvX&S0`&U|_3ZU|zPB6p`cp#l`iD8S{9zim)l^Gpd<@3=m^X6;a>>E0&R9iulLFC&vAYTZa1=w-_WY7#*2v z!FF@Afb@#+GqNeEnF^ZNG0HQFF*zQ{-Ap!&Z^8Px z5c)xun;9z_i7{D&^h34ri7}o883D3iOpJknfuDile-`sX=3oY926hH+27U%%25|;y z26+Z$24e^l5zIt&DS<IIx>IW$!clIdYGuHsG3|eQ&CnmVRV<(@?W@cp~|LBn^YG5 zJ+kl@h)~(YXs{4$*g|$5My`Kqn^YDqT$qg{r1RGlWE9hBSuHaaGe#3tGbp9Sz`(%# z|L^~e%<;_J3?dAQ40;S)+qG5YB?Oq6b+s8qMcA|%mDFq*O(5R1W;7BLH_>C{W0qsG zV>B1xV^q>(vST!oV`Tio#jy$G_F67>6%MW!L0!vw0+>QNR<(sy7aegI$uZh7GJ?}En=;6D7C9zy5q5DgrsgSUrm^&0>0wmTu@c#zQXMcU!-2^r zr*BD5fd#Yceo@Az^hr$9PR(HJ`8P{eOLV`hUDkv}eR)hD-2&1g#BdL8mnl>S$UR&PrciMv26hH}D4Usqi@^=bW?|rB2!OI#8Mqmuplmh< zE{0Snn~Oo4As@=-W)NnW1uDr|I2jlivKZDv*^CS#jN(u>69XTkHk8fGAi`(~WwS7d zF#1B-tPEm|iBL8hg9u|el+DEu#@G#Ib2F$hK6K76s4U7%&nQvQaMn~XGB7k%NUBuG zFUm~M%uCEsNGvVM$S*2Za8O9g&nrpI$;sDC&d)6>*DcRXNlz^)4oXcg%}Fdm2q0Kt zsYS(^`FRS4dIktV_td=9qQsKa6p$^&W$8vGC20z2Mftf3Zcy_T3X1ZxQj<&cGD=Dc ztn~Gf?PYLg$Y&^EsAMQ&$Ye-o$Y3a8P+-ttaAweCP+%}(FkmobFlA6+NMfjDP+-W1 zs>)=@V@PDkVNhU5WGH1QVaNc>6f-C=I4~$Mq=DNlB@C$yISe@r`3!mt$qe}nxma63 zsI4DtZ6s`B*jq^0RJt>yGUS2VQ;7^97p1`cQp`}skj`MlP{L5ckOp>j5!jUq3~p%d zS70b$0Lf)Bq%tHklrZRlL#c$JfWeAEpFtm|f1xQKl-jvK1QyJ}z`)4F$jr#X$jZpZ z$j->YR$8E&l3B!&lbTinVsL^J5{Si-l3$(&W+W%(q~@h07O^JhSy8$xLSaKdK!oB3he&CK4Hh7lMP#JHMu?)slnojI5sFZr!UhA7ya7n% zfq)2wG=;9NM1>7p0TBt(3L6waa$F#m8Hi<;Ae|5y87aMiQ9CkHc>_a0L~3ND?gnNZ z1y_X)EUJkq3L99R10puCDm!gpQ+AS8RE*rfn4r6XMMqgtSy3TnBWseA0!Rj8If&fA zkl>oUfmusYVFR19LYG3<21f0T2CS+ZSkwX|5(126@xQ2;rT+c|j$ z3qz6u$n6^(5+XrL5?sKJZGLz4{S~y)WGM0n8K*7yn(@a1B+^cf@_y@ zA}AujA;lmK3e61)(iTclG*~rA?x*;XeMRx!>i3OiUBlDm`>H}E+pD0C$#Y~WLNQr6udpyM49v5_UkB~oPrZ>n;I z?gl{}@4yJ}V2Gf!Vx-CjVX(N6&PE1)=g^3a{QS-v7!#c~@N0t-=>{fMr;R)yf|p6v zX#=B}vcd*t)qseNpp?6TMb)XRO95=HmZI_o#zYuf8X^zU!latGflo^@as!XE`vzWT z_k;~hs8OY`0c!+qWMB|hcGtz_0A2;JSfZ*=Ylp z@&<+kCxwI!jEP$X1Q;3k7@VBC5;h94X>TafmR5??-5{c~kwI8ncY~b42Q_; zY-Etr*4?0>vyl-*E9z`y0?|r38<|10vd%^p5UrxKkrhO%>TF~K(P}yy*+I0r&PEOp zt)a7#6GUt3DA<70xt5MX!Ull^1!v_Aj0w)5@&=SgG(m|ZA3JUHD zID%U_(LxziR^e44tr)4hK^GnejA9#fv^Fq`8h}Gt4>?p&rSx?aOu_Cn&|%oX=!%(L zH!x~rO$8uv2C*#+AmC!BY_U;zJ!upuEJLSchLV8mu7 z1!e{5%}i>{Qjt!e0*=F3p-UO8TG=gO1B)|yK1op6z^Dx=$(fuJQj|9^J13?DL~LMk zPL$rj?3@s}fmsz@PolDd!Uh&KWw%5NY2^(Z&Tbo+R5x%qgKbGrz-Eau$QI=dEY1m_ zuxC|G+`x)q>IN3IL{QxTc7$p|N&ut?L)aCmyTKe31_}xa8(7t#VW4bdp}WBXEWCk3 z*-1e`!A;qH1EaPwD7Gv?;$ROzLzE#TLQla)Sy39~VkU^70>~|}AZJtEz^dvAO6stx z6%tXHi7P=F8Z*kEXzbX|1EIpa%*yx1b0Gn@GKl+KeLF zx*KfZ!U4#_ws2vvYM53OHFi21OtoP$U}Z2v?R7SoX?H0o*nkpCmjxCz8(5t6HfU?> zZg2p30-OM0p$ke}$_h3Ldde11H#+KUHuLufxkQ1T)fP2|RX9I&MBy(h~cBNi4iQ~tFws_EaC@Jdx*Os_YCwzxkQxvp5u^shNYdG0uB`_R^JEZbgSEEqh7>T%Mq777 zDkx+&m}_sa)z;mRrnA8Ut~wpW0jtgcvp}jd!7Px{ES(LOaHZKG4p?apm<3Xr3ub|o z=ILy(f-B7jallFoz$}o`LNE)Yv`A+&Ckqp-W#pv2fg^PTvr0e(sH)Lr@ZQ02A}C@b zBV%9W21ZEUFWAVy>a>x8K?_22pwK%R7#KLgB2X4HgUd!0#*V;<4GtX<8<|sFHmZSm oyEqyc7+D-Tl0zakGBdbDMn*<%WZ==-!T7&*1558lCI%M<00*)|+5i9m 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 e6901bfe5e1e8bc3fad0d082e029f9602e8e1cc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5640 zcmZQzWME+6V`yMtW=QZ4);F@#@bF_`V0gp8zz~+4n^*MKz`!8Dz`(`9z`($fo>Q6D?87L`z`!(t zfq}UoBQ-IFwb*A00|Oh#6tj$s)I|0`<{$uxnyH|P9iu#>7^5TCFK!tzF&XY(T#RviAYFWnUm$LQ+RbFc_!g|63!xum zxtXz|kr9ueNC@_Jv9qzVFf-BDP*RYSk&+M-5fb3z;o@LpVPfFd)fP84 zRR&>oB%0CKR2jsF(afeMYU;{LZ0w>UV&=w1W-xJ(K69v?EF(nDTu_8fSrHr(X4Z_R zCT8NsMq;vz#!!~HsIifl`@)4sH*Go!BN=CJ-h6G-CdM@j7hc=E`3Mi23Og4ggq#f) zy0&nk5Eq9s2N#&Qt|Rm3ovfCYtcQuJimJ&qGZkf36GnGgE&qiJ7piR9v`J;*-y;iu zfe4jNj0OwAhAm|0VdVO!wn=5-!iCvLLOOp{$e_o-wOw0PUP6GGSy!7;RD?~NQAy2~(FEd6Yepk6aT7g8K4v*4J4SO6 zK1L-yCObwWIY!1WTpXJ~Zm;EHSK;7#5!AJ;Cx9uWV^v#NbVcw>o9NC?w4?GB8vfXDW~9 zxB1Gz&HMsX{9KHdoCv0)-Y5S53wBvBs7wcyVIXl(UV)Z{FBlm9e`j6<5&_G=2o8`* zOx6qxjHwU|VlyvbU|^19U;xozg$fLI3~>x~j7E$#j60xZDhEReC@(O8ieylIQp~`> zV8RWmTR>Wb81BLCGKJ~@`GbqW6e`Zdz|LR~WivByF}Ok5EDT%>0Z=w812;nyl+DJ# z#gGbRb1`T$MihY!(I) zMqenKl|hU#5z1y`5MeBbvbh+-7`vftZU!~RhtBy0l|`B986^rD&YB8F28N~zNtFuu zMVaZDd5Jj+iKQhO`9;MF4hm`cc_pbiIr)0Y`ME{qy5*TE>8T~fL8&j2Clo|>0hlvt9Q0jdVVg>~U2L=U(G=_YJJcbg6RE8Xe9EN-bJ%(h4e1=?x zB8GAXU50XoOokMObcR%h5{6=iAcj0fBd2c>o{5P=1AFfcGOF)}ln(IjMOmiAAi*Ir+)iY{jXGMadZu!xjy@4$_Dq@3)^ahQ{gfxY&(1;C8s);)}7&sV`la-UC z6%{uyL~dYkR(9FMz{ud7;H0~OQD=ifLYnRdCLM(og$)M+Hn6BgZPH-ma&}F24T_FX zR92Mkicr`P5D=lb!68ywVS@#TWf2*vuo0ptF=c~BK!hTcr?9~QByRvxc_1J{Ax)vH zD^XzsS3pF9w891jkQ^6?Wd>rIB}gYkMn+0+VAPI`RNlZ45Rn=gsk?z$N5NHL1B+^6 zioym~=YWU}tjbOs*p!{56%`{lFed13V9`-lR8~|-*~psYqyUnESPmjLFeJDpZ(!C^ zRM^1gtk9* zI~XD;tr)4YK^QD9q_dHM-#Ij5BR{|M2F66E4gA`mM7n`V)oCLSh~Q;Xb=trvrmV1m zSv4SHBPiu=U{Q7I>QVq(tEH&CfiV%rmWIfKv@oeAZs5~WjNHKE?7o55**#$c6KYf` zY`_|U8yOgcm0dP4I&WaG+r-Go2+k*krhNs>1<>J(b75_*+I07&PEOpEvvJU6GY4DFl^w}Cc`1}IvW|}v~@Qq z=xk&J(TX}7nLxCX&PHYst*o<=1w^apY-9z|syZ9lK(w09Ms^UbuCtK?L~H150 zItn)6bgreNkg!1@LBUyh17m_SsJsE?5lv8{($?9arM*E*OLv2gj)H=_0*>HTPP9-4 zl~s6ENGnF_ZqS9t0i)Ok9jy(Fq6Xkl)a-DO+sRXB5@a-C(GrV58uU!zUXUoD(f{HyG*YiQDLIFeapQ1EX`Yh3*Cu zosCQkVyX&y3htnyW&@L|XIGcIvb%DkLPU}@sLWG#+GNbgC@P|*yTMdv1B2KG7S#IGwdqyY!S56l}UIbT^nGq!skQ3KTZ5C_8~vDQrjxh)~$z5E!wUNr72GdNY$6 zvs9!LsDR^eR_Ia&t5$YP*udh9o=*}KHZW>KN^&OWgcRis%+84^0TCORoD-!tFgqti zZeUhL*OREMps;~OP1!BcLRxtPhqK!TCe;lb&R|;-6tG#M46;Re1B-J4DC}8P6F0D8 zn7V;QEfG{VfE}TlkP-kX!Vq>v>TWOxg@J;C!Uk3~Xc#ElSmT|H|0{w*9^^!*Kj2<=(b>Qt3dx+C7(n?@SZ{-&mhJ{u9O7;| z8yOfygf|#z>27e>*R0sd3iU-4G2@17gI0)PNYVAT=OH z97v75w(f>_kQxvp0i*`RNCc??F_LsPm}~1n!#o+p*MusUsIV96myK#5-Y$*?21XW# hj^vPtjm!)#k&%&+8yR@Cb};^L-N4ejk%_^D0RU8)F)IK7 diff --git a/static/external/fonts/rw-widgets.woff b/static/external/fonts/rw-widgets.woff deleted file mode 100644 index fc7902da3c810fe5d0d54fc2e58e203458a4d9e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3332 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 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 110664548dec16dd0039c9c2e1e03127c5ae4784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23284 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 FtO2~!?ScRR diff --git a/static/external/react-widgets/loading.gif b/static/external/react-widgets/loading.gif deleted file mode 100644 index ded8d36d48686558e7fd498eff3b6cc47b8a648a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmZ?wbhEHb6krfw_{6~Q|NnnuW8-t@&ZVcP8yg!pHa5=D}@x2}ceUUeJw}u)MpB-BN;w z-7EXK2Lm>9OhD%N^(ZPxxA5%V@T|+F&?zt^!BA2m!N)aPYDJCA*3$cL6D8Oi6s}7= zYIBy{q^hDNgv}r`j$KB|+NT^(OgJ+oOrNbaS%&Y6q~AwRr^Fen3uHcUo!Pus=GY2t zrpUMAe;At&^Bb*9k($4s1)EXE9J`WKwNDwfO?)#aEWWjS8E2~^4~wBod!mfsDz~N$ z7v-6gf?_}0${SedNcEpsQe^3a)o(@|yNcAcy`HCte31C;)5xP%b~qs>DP&4(%TBqB zNGHwnryK;B4e9a<5 z9yV@~;>6t>OutWMY&6)w*|~duuBI1ObBsVi{ee^P=A6*jS&Z*)6&6fQ=(w9W=dQ`L zR!6s^1|ky@W^ZHUWjW*^Fx#-<(6w_DaT{ZB%5!z9)0H`z*X1}k4lDE>FXUq}G+23R h!@2;8Lx~dXVYiktDU>EjG|h_^oWQ_f4N5p*3;?M9)T{si 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"));