diff options
Diffstat (limited to 'web/react/components')
-rw-r--r-- | web/react/components/delete_post_modal.jsx | 2 | ||||
-rw-r--r-- | web/react/components/file_preview.jsx | 2 | ||||
-rw-r--r-- | web/react/components/login.jsx | 14 | ||||
-rw-r--r-- | web/react/components/post_body.jsx | 4 | ||||
-rw-r--r-- | web/react/components/post_right.jsx | 4 | ||||
-rw-r--r-- | web/react/components/sidebar_header.jsx | 4 | ||||
-rw-r--r-- | web/react/components/signup_team.jsx | 20 | ||||
-rw-r--r-- | web/react/components/signup_team_complete.jsx | 144 | ||||
-rw-r--r-- | web/react/components/signup_user_complete.jsx | 52 | ||||
-rw-r--r-- | web/react/components/view_image.jsx | 6 |
10 files changed, 134 insertions, 118 deletions
diff --git a/web/react/components/delete_post_modal.jsx b/web/react/components/delete_post_modal.jsx index 11970bc2b..f0cb809af 100644 --- a/web/react/components/delete_post_modal.jsx +++ b/web/react/components/delete_post_modal.jsx @@ -98,7 +98,7 @@ module.exports = React.createClass({ : "" } </div> <div className="modal-footer"> - <button type="button" className="btn btn-default" data-dismiss="modal">Close</button> + <button type="button" className="btn btn-default" data-dismiss="modal">Cancel</button> <button type="button" className="btn btn-danger" data-dismiss="modal" onClick={this.handleDelete}>Delete</button> </div> </div> diff --git a/web/react/components/file_preview.jsx b/web/react/components/file_preview.jsx index fdd12feec..7c1db3e10 100644 --- a/web/react/components/file_preview.jsx +++ b/web/react/components/file_preview.jsx @@ -24,7 +24,7 @@ module.exports = React.createClass({ if (filename.indexOf("/api/v1/files/get") != -1) { filename = filename.split("/api/v1/files/get")[1]; } - filename = window.location.origin + "/api/v1/files/get" + filename; + filename = utils.getWindowLocationOrigin() + "/api/v1/files/get" + filename; if (type === "image") { previews.push( diff --git a/web/react/components/login.jsx b/web/react/components/login.jsx index 05918650b..fe0a47777 100644 --- a/web/react/components/login.jsx +++ b/web/react/components/login.jsx @@ -103,13 +103,9 @@ module.exports = React.createClass({ return ( <div className="signup-team__container"> - <div> - <span className="signup-team__name">{ teamDisplayName }</span> - <br/> - <span className="signup-team__subdomain">/{ teamName }/</span> - <br/> - <br/> - </div> + <h5 className="margin--less">Sign in to:</h5> + <h2 className="signup-team__name">{ teamDisplayName }</h2> + <h2 className="signup-team__subdomain">on { config.SiteName }</h2> <form onSubmit={this.handleSubmit}> <div className={server_error ? 'form-group has-error' : 'form-group'}> { server_error } @@ -124,13 +120,13 @@ module.exports = React.createClass({ <button type="submit" className="btn btn-primary">Sign in</button> </div> { login_message } - <div className="form-group form-group--small"> + <div className="form-group margin--extra form-group--small"> <span><a href="/find_team">{"Find other " + strings.TeamPlural}</a></span> </div> <div className="form-group"> <a href={"/" + teamName + "/reset_password"}>I forgot my password</a> </div> - <div className="external-link"> + <div className="margin--extra"> <span>{"Want to create your own " + strings.Team + "?"} <a href="/" className="signup-team-login">Sign up now</a></span> </div> </form> diff --git a/web/react/components/post_body.jsx b/web/react/components/post_body.jsx index 9f598ecb3..641ffeef2 100644 --- a/web/react/components/post_body.jsx +++ b/web/react/components/post_body.jsx @@ -32,7 +32,7 @@ module.exports = React.createClass({ if (fileInfo.path.indexOf("/api/v1/files/get") != -1) { fileInfo.path = fileInfo.path.split("/api/v1/files/get")[1]; } - fileInfo.path = window.location.origin + "/api/v1/files/get" + fileInfo.path; + fileInfo.path = utils.getWindowLocationOrigin() + "/api/v1/files/get" + fileInfo.path; if (type === "image") { $('<img/>').attr('src', fileInfo.path+'_thumb.jpg').load(function(path, name){ return function() { @@ -112,7 +112,7 @@ module.exports = React.createClass({ if (fileInfo.path.indexOf("/api/v1/files/get") != -1) { fileInfo.path = fileInfo.path.split("/api/v1/files/get")[1]; } - fileInfo.path = window.location.origin + "/api/v1/files/get" + fileInfo.path; + fileInfo.path = utils.getWindowLocationOrigin() + "/api/v1/files/get" + fileInfo.path; if (type === "image") { if (i < Constants.MAX_DISPLAY_FILES) { diff --git a/web/react/components/post_right.jsx b/web/react/components/post_right.jsx index 567be1962..8097a181e 100644 --- a/web/react/components/post_right.jsx +++ b/web/react/components/post_right.jsx @@ -98,7 +98,7 @@ RootPost = React.createClass({ if (fileInfo.path.indexOf("/api/v1/files/get") != -1) { fileInfo.path = fileInfo.path.split("/api/v1/files/get")[1]; } - fileInfo.path = window.location.origin + "/api/v1/files/get" + fileInfo.path; + fileInfo.path = utils.getWindowLocationOrigin() + "/api/v1/files/get" + fileInfo.path; if (ftype === "image") { var url = fileInfo.path.replace(re1, '%20').replace(re2, '%28').replace(re3, '%29'); @@ -208,7 +208,7 @@ CommentPost = React.createClass({ if (fileInfo.path.indexOf("/api/v1/files/get") != -1) { fileInfo.path = fileInfo.path.split("/api/v1/files/get")[1]; } - fileInfo.path = window.location.origin + "/api/v1/files/get" + fileInfo.path; + fileInfo.path = utils.getWindowLocationOrigin() + "/api/v1/files/get" + fileInfo.path; if (type === "image") { var url = fileInfo.path.replace(re1, '%20').replace(re2, '%28').replace(re3, '%29'); diff --git a/web/react/components/sidebar_header.jsx b/web/react/components/sidebar_header.jsx index 5b442aeac..e7512934a 100644 --- a/web/react/components/sidebar_header.jsx +++ b/web/react/components/sidebar_header.jsx @@ -68,10 +68,10 @@ var NavbarDropdown = React.createClass({ for (var i = 0; i < this.state.teams.length; i++) { var teamName = this.state.teams[i]; - teams.push(<li key={ teamName }><a href={window.location.origin + "/" + teamName }>Switch to { teamName }</a></li>); + teams.push(<li key={ teamName }><a href={utils.getWindowLocationOrigin() + "/" + teamName }>Switch to { teamName }</a></li>); } } - teams.push(<li><a href={window.location.origin + "/signup_team" }>Create a New Team</a></li>); + teams.push(<li><a href={utils.getWindowLocationOrigin() + "/signup_team" }>Create a New Team</a></li>); return ( <ul className="nav navbar-nav navbar-right"> diff --git a/web/react/components/signup_team.jsx b/web/react/components/signup_team.jsx index 362f79163..edd48e0b9 100644 --- a/web/react/components/signup_team.jsx +++ b/web/react/components/signup_team.jsx @@ -20,21 +20,12 @@ module.exports = React.createClass({ state.email_error = ""; } - team.display_name = this.refs.name.getDOMNode().value.trim(); - if (!team.display_name) { - state.name_error = "This field is required"; - state.inValid = true; - } - else { - state.name_error = ""; - } - if (state.inValid) { this.setState(state); return; } - client.signupTeam(team.email, team.display_name, + client.signupTeam(team.email, function(data) { if (data["follow_link"]) { window.location.href = data["follow_link"]; @@ -55,7 +46,6 @@ module.exports = React.createClass({ render: function() { var email_error = this.state.email_error ? <label className='control-label'>{ this.state.email_error }</label> : null; - var name_error = this.state.name_error ? <label className='control-label'>{ this.state.name_error }</label> : null; var server_error = this.state.server_error ? <div className={ "form-group has-error" }><label className='control-label'>{ this.state.server_error }</label></div> : null; return ( @@ -64,15 +54,11 @@ module.exports = React.createClass({ <input autoFocus={true} type="email" ref="email" className="form-control" placeholder="Email Address" maxLength="128" /> { email_error } </div> - <div className={ name_error ? "form-group has-error" : "form-group" }> - <input type="text" ref="name" className="form-control" placeholder={utils.toTitleCase(strings.Company) + " Name"} maxLength="64" /> - { name_error } - </div> { server_error } <div className="form-group"> - <button className="btn btn-md btn-primary" type="submit">Sign up for Free</button> + <button className="btn btn-md btn-primary" type="submit">Sign up</button> </div> - <div className="form-group form-group--small"> + <div className="form-group margin--extra-2x"> <span><a href="/find_team">{"Find my " + strings.Team}</a></span> </div> </form> diff --git a/web/react/components/signup_team_complete.jsx b/web/react/components/signup_team_complete.jsx index 3e8a57308..21f9edef1 100644 --- a/web/react/components/signup_team_complete.jsx +++ b/web/react/components/signup_team_complete.jsx @@ -42,11 +42,15 @@ WelcomePage = React.createClass({ state.email_error = ""; } - client.signupTeam(email, this.props.state.team.name, + client.signupTeam(email, function(data) { - this.props.state.wizard = "finished"; - this.props.updateParent(this.props.state); - window.location.href = "/signup_team_confirm/?email=" + encodeURI(email); + if (data["follow_link"]) { + window.location.href = data["follow_link"]; + } else { + this.props.state.wizard = "finished"; + this.props.updateParent(this.props.state); + window.location.href = "/signup_team_confirm/?email=" + encodeURIComponent(team.email); + } }.bind(this), function(err) { this.state.server_error = err.message; @@ -80,19 +84,25 @@ WelcomePage = React.createClass({ <div> <p> <img className="signup-team-logo" src="/static/images/logo.png" /> - <h2>Welcome!</h2> - <h3>{"Let's set up your " + strings.Team + " on " + config.SiteName + "."}</h3> + <h3 className="sub-heading">Welcome to:</h3> + <h1 className="margin--top-none">{config.SiteName}</h1> </p> + <p className="margin--less">Let's setup your new team</p> <p> Please confirm your email address:<br /> - <span className="black">{ this.props.state.team.email }</span><br /> + <div className="inner__content"> + <div className="block--gray">{ this.props.state.team.email }</div> + </div> + </p> + <p className="margin--extra color--light"> + Your account will administer the new team site. <br /> + You can add other administrators later. </p> <div className="form-group"> <button className="btn-primary btn form-group" type="submit" onClick={this.submitNext}><i className="glyphicon glyphicon-ok"></i>Yes, this address is correct</button> { storage_error } </div> <hr /> - <p>If this is not correct, you can switch to a different email. We'll send you a new invite right away.</p> <div className={ this.state.use_diff ? "" : "hidden" }> <div className={ email_error ? "form-group has-error" : "form-group" }> <div className="row"> @@ -105,7 +115,7 @@ WelcomePage = React.createClass({ { server_error } <button className="btn btn-md btn-primary" type="button" onClick={this.handleDiffSubmit} type="submit">Use this instead</button> </div> - <button type="button" onClick={this.handleDiffEmail} className={ this.state.use_diff ? "btn-default btn hidden" : "btn-default btn" }>Use a different address</button> + <a href="#" onClick={this.handleDiffEmail} className={ this.state.use_diff ? "hidden" : "" }>Use a different email</a> </div> ); } @@ -128,6 +138,7 @@ TeamDisplayNamePage = React.createClass({ this.props.state.wizard = "team_url"; this.props.state.team.display_name = display_name; + this.props.state.team.name = utils.cleanUpUrlable(display_name); this.props.updateParent(this.props.state); }, getInitialState: function() { @@ -158,9 +169,11 @@ TeamDisplayNamePage = React.createClass({ </div> { name_error } </div> - <p>{"Your " + strings.Team + " name shows in menus and headings. It may include the name of your " + strings.Company + ", but it's not required."}</p> - <button type="button" className="btn btn-default" onClick={this.submitBack}><i className="glyphicon glyphicon-chevron-left"></i> Back</button> - <button type="submit" className="btn-primary btn" onClick={this.submitNext}>Next<i className="glyphicon glyphicon-chevron-right"></i></button> + <div>{"Name your " + strings.Team + " in any language. Your " + strings.Team + " name shows in menus and headings."}</div> + <button type="submit" className="btn btn-primary margin--extra" onClick={this.submitNext}>Next<i className="glyphicon glyphicon-chevron-right"></i></button> + <div className="margin--extra"> + <a href="#" onClick={this.submitBack}>Back to previous step</a> + </div> </form> </div> ); @@ -248,17 +261,23 @@ TeamURLPage = React.createClass({ <div className="row"> <div className="col-sm-11"> <div className="input-group"> - <span className="input-group-addon">{ window.location.origin + "/" }</span> + <span className="input-group-addon">{ utils.getWindowLocationOrigin() + "/" }</span> <input type="text" ref="name" className="form-control" placeholder="" maxLength="128" defaultValue={this.props.state.team.name} autoFocus={true} onFocus={this.handleFocus}/> </div> </div> </div> { name_error } </div> - <p className="black">{"Pick something short and memorable for your " + strings.Team + "'s web address."}</p> - <p>{"Your " + strings.Team + " URL can only contain lowercase letters, numbers and dashes. Also, it needs to start with a letter and cannot end in a dash."}</p> - <button type="button" className="btn btn-default" onClick={this.submitBack}><i className="glyphicon glyphicon-chevron-left"></i> Back</button> - <button type="submit" className="btn-primary btn" onClick={this.submitNext}>Next<i className="glyphicon glyphicon-chevron-right"></i></button> + <p>{"Choose the web address of your new " + strings.Team + ":"}</p> + <ul className="color--light"> + <li>Short and memorable is best</li> + <li>Use lower case letters, numbers and dashes</li> + <li>Must start with a letter and can't end in a dash</li> + </ul> + <button type="submit" className="btn btn-primary margin--extra" onClick={this.submitNext}>Next<i className="glyphicon glyphicon-chevron-right"></i></button> + <div className="margin--extra"> + <a href="#" onClick={this.submitBack}>Back to previous step</a> + </div> </form> </div> ); @@ -461,14 +480,16 @@ SendInivtesPage = React.createClass({ return ( <div> <form> - <img className="signup-team-logo" src="/static/images/logo.png" /> - <h2>Send Invitations</h2> - { emails } - <div className="form-group"><button type="button" className="btn-default btn" onClick={this.submitAddInvite}>Add Invitation</button></div> - <div className="form btn-default-group"><button type="button" className="btn btn-default" onClick={this.submitBack}><i className="glyphicon glyphicon-chevron-left"></i> Back</button> <button type="submit" className="btn-primary btn" onClick={this.submitNext}>Next<i className="glyphicon glyphicon-chevron-right"></i></button></div> - </form> - <p>{"If you'd prefer, you can send invitations after you finish setting up the "+ strings.Team + "."}</p> - <div><a href="#" onClick={this.submitSkip}>Skip this step</a></div> + <img className="signup-team-logo" src="/static/images/logo.png" /> + <h2>{"Invite " + utils.toTitleCase(strings.Team) + " Members"}</h2> + { emails } + <div className="form-group text-right"><a href="#" onClick={this.submitAddInvite}>Add Invitation</a></div> + <div className="form-group"><button type="submit" className="btn-primary btn" onClick={this.submitNext}>Next<i className="glyphicon glyphicon-chevron-right"></i></button></div> + </form> + <p className="color--light">{"if you prefer, you can invite " + strings.Team + " members later"}<br /> and <a href="#" onClick={this.submitSkip}>skip this step</a> for now.</p> + <div className="margin--extra"> + <a href="#" onClick={this.submitBack}>Back to previous step</a> + </div> </div> ); } @@ -512,19 +533,24 @@ UsernamePage = React.createClass({ <div> <form> <img className="signup-team-logo" src="/static/images/logo.png" /> - <h2>Choose a username</h2> - <div className={ name_error ? "form-group has-error" : "form-group" }> - <div className="row"> - <div className="col-sm-9"> - <input autoFocus={true} type="text" ref="name" className="form-control" placeholder="" defaultValue={this.props.state.user.username} maxLength="128" /> + <h2 className="margin--less">Your username</h2> + <h5 className="color--light">{"Select a memorable username that makes it easy for " + strings.Team + "mates to identify you:"}</h5> + <div className="inner__content margin--extra"> + <div className={ name_error ? "form-group has-error" : "form-group" }> + <div className="row"> + <div className="col-sm-11"> + <h5><strong>Choose your username</strong></h5> + <input autoFocus={true} type="text" ref="name" className="form-control" placeholder="" defaultValue={this.props.state.user.username} maxLength="128" /> + <div className="color--light form__hint">Usernames must begin with a letter and contain 3 to 15 characters made up of lowercase letters, numbers, and the symbols '.', '-' and '_'</div> + </div> + </div> + { name_error } </div> </div> - { name_error } + <button type="submit" className="btn btn-primary margin--extra" onClick={this.submitNext}>Next<i className="glyphicon glyphicon-chevron-right"></i></button> + <div className="margin--extra"> + <a href="#" onClick={this.submitBack}>Back to previous step</a> </div> - <p>{"Pick something " + strings.Team + "mates will recognize. Your username is how you will appear to others."}</p> - <p>It can be made of lowercase letters and numbers.</p> - <button type="button" className="btn btn-default" onClick={this.submitBack}><i className="glyphicon glyphicon-chevron-left"></i> Back</button> - <button type="submit" className="btn-primary btn" onClick={this.submitNext}>Next<i className="glyphicon glyphicon-chevron-right"></i></button> </form> </div> ); @@ -542,15 +568,15 @@ PasswordPage = React.createClass({ var password = this.refs.password.getDOMNode().value.trim(); if (!password || password.length < 5) { - this.setState({name_error: "Please enter at least 5 characters"}); + this.setState({password_error: "Please enter at least 5 characters"}); return; } - this.setState({name_error: ""}); + this.setState({password_error: null, server_error: null}); $('#finish-button').button('loading'); var teamSignup = JSON.parse(JSON.stringify(this.props.state)); teamSignup.user.password = password; - teamSignup.user.allow_marketing = this.refs.email_service.getDOMNode().checked; + teamSignup.user.allow_marketing = true; delete teamSignup.wizard; var ctl = this; @@ -566,7 +592,7 @@ PasswordPage = React.createClass({ props.state.wizard = "finished"; props.updateParent(props.state, true); - window.location.href = window.location.origin + '/' + props.state.team.name + '/login?email=' + encodeURIComponent(teamSignup.team.email); + window.location.href = utils.getWindowLocationOrigin() + '/' + props.state.team.name + '/login?email=' + encodeURIComponent(teamSignup.team.email); // client.loginByEmail(teamSignup.team.domain, teamSignup.team.email, teamSignup.user.password, // function(data) { @@ -582,7 +608,7 @@ PasswordPage = React.createClass({ }, 5000); }.bind(this), function(err) { - this.setState({name_error: err.message}); + this.setState({server_error: err.message}); $('#sign-up-button').button('reset'); }.bind(this) ); @@ -594,30 +620,37 @@ PasswordPage = React.createClass({ client.track('signup', 'signup_team_07_password'); - var name_error = this.state.name_error ? <label className="control-label">{ this.state.name_error }</label> : null; + var password_error = this.state.password_error ? <label className="control-label">{ this.state.password_error }</label> : null; + var server_error = this.state.server_error ? <label className="control-label">{ this.state.server_error }</label> : null; return ( <div> <form> <img className="signup-team-logo" src="/static/images/logo.png" /> - <h2>Choose a password</h2> - <p>You'll use your email address ({this.props.state.team.email}) and password to log into {config.SiteName}.</p> - <div className={ name_error ? "form-group has-error" : "form-group" }> - <div className="row"> - <div className="col-sm-9"> - <input autoFocus={true} type="password" ref="password" className="form-control" placeholder="" maxLength="128" /> + <h2 className="margin--less">Your password</h2> + <h5 className="color--light">Select a password that you'll use to login with your email address:</h5> + <div className="inner__content margin--extra"> + <h5><strong>Email</strong></h5> + <div className="block--gray form-group">{this.props.state.team.email}</div> + <div className={ password_error ? "form-group has-error" : "form-group" }> + <div className="row"> + <div className="col-sm-11"> + <h5><strong>Choose your password</strong></h5> + <input autoFocus={true} type="password" ref="password" className="form-control" placeholder="" maxLength="128" /> + <div className="color--light form__hint">Passwords must contain 5 to 50 characters. Your password will be strongest if it contains a mix of symbols, numbers, and upper and lowercase characters.</div> + </div> + </div> + { password_error } + { server_error } </div> - </div> - { name_error } - </div> - <div className="form-group checkbox"> - <label><input type="checkbox" ref="email_service" /> It's ok to send me occassional email with updates about the {config.SiteName} service.</label> </div> <div className="form-group"> - <button type="button" className="btn btn-default" onClick={this.submitBack}><i className="glyphicon glyphicon-chevron-left"></i> Back</button> - <button type="submit" className="btn-primary btn" id="finish-button" data-loading-text={"<span class='glyphicon glyphicon-refresh glyphicon-refresh-animate'></span> Creating "+strings.Team+"..."} onClick={this.submitNext}>Finish</button> + <button type="submit" className="btn btn-primary margin--extra" id="finish-button" data-loading-text={"<span class='glyphicon glyphicon-refresh glyphicon-refresh-animate'></span> Creating "+strings.Team+"..."} onClick={this.submitNext}>Finish</button> </div> <p>By proceeding to create your account and use { config.SiteName }, you agree to our <a href={ config.TermsLink }>Terms of Service</a> and <a href={ config.PrivacyLink }>Privacy Policy</a>. If you do not agree, you cannot use {config.SiteName}.</p> + <div className="margin--extra"> + <a href="#" onClick={this.submitBack}>Back to previous step</a> + </div> </form> </div> ); @@ -640,9 +673,6 @@ module.exports = React.createClass({ props.wizard = "welcome"; props.team = {}; props.team.email = this.props.email; - props.team.display_name = this.props.name; - props.team.company_name = this.props.name; - props.team.name = utils.cleanUpUrlable(this.props.name); props.team.allowed_domains = ""; props.invites = []; props.invites.push(""); diff --git a/web/react/components/signup_user_complete.jsx b/web/react/components/signup_user_complete.jsx index bbf1f670c..670aab943 100644 --- a/web/react/components/signup_user_complete.jsx +++ b/web/react/components/signup_user_complete.jsx @@ -40,7 +40,7 @@ module.exports = React.createClass({ this.setState({name_error: "", email_error: "", password_error: "", server_error: ""}); - this.state.user.allow_marketing = this.refs.email_service.getDOMNode().checked; + this.state.user.allow_marketing = true; client.createUser(this.state.user, this.state.data, this.state.hash, function(data) { @@ -104,8 +104,8 @@ module.exports = React.createClass({ var yourEmailIs = this.state.user.email == "" ? "" : <span>Your email address is { this.state.user.email }. </span> var email = ( - <div className={ this.state.original_email == "" ? "" : "hidden"} > - <label className="control-label">Email</label> + <div className={ this.state.original_email == "" ? "margin--extra" : "hidden"} > + <h5><strong>What's your email address?</strong></h5> <div className={ email_error ? "form-group has-error" : "form-group" }> <input type="email" ref="email" className="form-control" defaultValue={ this.state.user.email } placeholder="" maxLength="128" /> { email_error } @@ -124,29 +124,33 @@ module.exports = React.createClass({ return ( <div> <img className="signup-team-logo" src="/static/images/logo.png" /> - <h3 className="text-center extra-margin">Signup to { config.SiteName }</h3> - <div className="form-group form-group--small"> - <span></span> - </div> + <h5 className="margin--less">Welcome to:</h5> + <h2 className="signup-team__name">{ this.props.teamDisplayName }</h2> + <h2 className="signup-team__subdomain">on { config.SiteName }</h2> + <h4 className="color--light">Let's create your account</h4> { signup_message } - <label className="control-label">Username</label> - <div className={ name_error ? "form-group has-error" : "form-group" }> - <input type="text" ref="name" className="form-control" placeholder="" maxLength="128" /> - { name_error } - <p className="form__hint">Your username can be made of lowercase letters and numbers.</p> - <p className="form__hint">{"Pick something " + strings.Team + "mates will recognize. Your username is how you will appear to others"}</p> - </div> - { email } - <label className="control-label">Password</label> - <div className={ password_error ? "form-group has-error" : "form-group" }> - <input type="password" ref="password" className="form-control" placeholder="" maxLength="128" /> - { password_error } - </div> - <p className={ this.state.original_email == "" ? "hidden" : ""}>{ yourEmailIs } You’ll use this address to sign in to {config.SiteName}.</p> - <div className="checkbox"><label><input type="checkbox" ref="email_service" /> It's ok to send me occassional email with updates about the {config.SiteName} service. </label></div> - <p><button onClick={this.handleSubmit} className="btn-primary btn">Create Account</button></p> + <div className="inner__content"> + { email } + <p className={ this.state.original_email == "" ? "hidden" : ""}>{ yourEmailIs } You’ll use this address to sign in to {config.SiteName}.</p> + <div className="margin--extra"> + <h5><strong>Choose your username</strong></h5> + <div className={ name_error ? "form-group has-error" : "form-group" }> + <input type="text" ref="name" className="form-control" placeholder="" maxLength="128" /> + { name_error } + <p className="form__hint">Username must begin with a letter, and contain between 3 to 15 lowercase characters made up of numbers, letters, and the symbols '.', '-' and '_'"</p> + </div> + </div> + <div className="margin--extra"> + <h5><strong>Choose your password</strong></h5> + <div className={ password_error ? "form-group has-error" : "form-group" }> + <input type="password" ref="password" className="form-control" placeholder="" maxLength="128" /> + { password_error } + </div> + </div> + </div> + <p className="margin--extra"><button onClick={this.handleSubmit} className="btn-primary btn">Create Account</button></p> { server_error } - <p>By proceeding to create your account and use { config.SiteName }, you agree to our <a href={ config.TermsLink }>Terms of Service</a> and <a href={ config.PrivacyLink }>Privacy Policy</a>. If you do not agree, you cannot use {config.SiteName}.</p> + <p>By creating an account and using Mattermost you are agreeing to our <a href={ config.TermsLink }>Terms of Service</a>. If you do not agree, you cannot use this service.</p> </div> ); } diff --git a/web/react/components/view_image.jsx b/web/react/components/view_image.jsx index c107de4d7..7b096c629 100644 --- a/web/react/components/view_image.jsx +++ b/web/react/components/view_image.jsx @@ -40,7 +40,7 @@ module.exports = React.createClass({ if (fileInfo.path.indexOf("/api/v1/files/get") !== -1) { fileInfo.path = fileInfo.path.split("/api/v1/files/get")[1]; } - fileInfo.path = window.location.origin + "/api/v1/files/get" + fileInfo.path; + fileInfo.path = utils.getWindowLocationOrigin() + "/api/v1/files/get" + fileInfo.path; src = fileInfo['path'] + '_preview.jpg'; } @@ -148,7 +148,7 @@ module.exports = React.createClass({ if (info.path.indexOf("/api/v1/files/get") !== -1) { info.path = info.path.split("/api/v1/files/get")[1]; } - info.path = window.location.origin + "/api/v1/files/get" + info.path; + info.path = utils.getWindowLocationOrigin() + "/api/v1/files/get" + info.path; preview_filename = info['path'] + '_preview.jpg'; } @@ -166,7 +166,7 @@ module.exports = React.createClass({ if (download_link.indexOf("/api/v1/files/get") !== -1) { download_link = download_link.split("/api/v1/files/get")[1]; } - download_link = window.location.origin + "/api/v1/files/get" + download_link; + download_link = utils.getWindowLocationOrigin() + "/api/v1/files/get" + download_link; return ( <div className="modal fade image_modal" ref="modal" id={this.props.modalId} tabIndex="-1" role="dialog" aria-hidden="true"> |