mirror of
				https://github.com/vector-im/element-web.git
				synced 2025-11-04 02:02:14 +01:00 
			
		
		
		
	Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
		
						commit
						94b39cd309
					
				@ -35,8 +35,24 @@ limitations under the License.
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.mx_InteractiveAuthEntryComponents_termsSubmit {
 | 
			
		||||
    margin-top: 20px;
 | 
			
		||||
    margin-bottom: 5px;
 | 
			
		||||
    display: block;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// XXX: This should be a common button class
 | 
			
		||||
.mx_InteractiveAuthEntryComponents_msisdnSubmit:disabled {
 | 
			
		||||
    background-color: $light-fg-color;
 | 
			
		||||
    cursor: default;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.mx_InteractiveAuthEntryComponents_termsSubmit:disabled {
 | 
			
		||||
    background-color: $accent-color-50pct;
 | 
			
		||||
    cursor: default;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.mx_InteractiveAuthEntryComponents_termsPolicy {
 | 
			
		||||
    display: block;
 | 
			
		||||
}
 | 
			
		||||
@ -12,6 +12,7 @@ $light-fg-color: #747474;
 | 
			
		||||
// button UI (white-on-green in light skin)
 | 
			
		||||
$accent-fg-color: $primary-bg-color;
 | 
			
		||||
$accent-color: #76CFA6;
 | 
			
		||||
$accent-color-50pct: #76CFA67F;
 | 
			
		||||
 | 
			
		||||
$selection-fg-color: $primary-fg-color;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,7 @@ $focus-bg-color: #dddddd;
 | 
			
		||||
// button UI (white-on-green in light skin)
 | 
			
		||||
$accent-fg-color: #ffffff;
 | 
			
		||||
$accent-color: #76CFA6;
 | 
			
		||||
$accent-color-50pct: #76CFA67F;
 | 
			
		||||
 | 
			
		||||
$selection-fg-color: $primary-bg-color;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -45,7 +45,7 @@ export async function startAnyRegistrationFlow(options) {
 | 
			
		||||
    // caution though.
 | 
			
		||||
    const hasIlagFlow = flows.some((flow) => {
 | 
			
		||||
        return flow.stages.every((stage) => {
 | 
			
		||||
            return ['m.login.dummy', 'm.login.recaptcha'].includes(stage);
 | 
			
		||||
            return ['m.login.dummy', 'm.login.recaptcha', 'm.login.terms'].includes(stage);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -68,6 +68,11 @@ export default React.createClass({
 | 
			
		||||
        // If true, poll to see if the auth flow has been completed
 | 
			
		||||
        // out-of-band
 | 
			
		||||
        poll: PropTypes.bool,
 | 
			
		||||
 | 
			
		||||
        // If true, components will be told that the 'Continue' button
 | 
			
		||||
        // is managed by some other party and should not be managed by
 | 
			
		||||
        // the component itself.
 | 
			
		||||
        continueIsManaged: PropTypes.bool,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getInitialState: function() {
 | 
			
		||||
@ -128,6 +133,12 @@ export default React.createClass({
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    tryContinue: function() {
 | 
			
		||||
        if (this.refs.stageComponent && this.refs.stageComponent.tryContinue) {
 | 
			
		||||
            this.refs.stageComponent.tryContinue();
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _authStateUpdated: function(stageType, stageState) {
 | 
			
		||||
        const oldStage = this.state.authStage;
 | 
			
		||||
        this.setState({
 | 
			
		||||
@ -192,6 +203,7 @@ export default React.createClass({
 | 
			
		||||
                fail={this._onAuthStageFailed}
 | 
			
		||||
                setEmailSid={this._setEmailSid}
 | 
			
		||||
                makeRegistrationUrl={this.props.makeRegistrationUrl}
 | 
			
		||||
                showContinue={!this.props.continueIsManaged}
 | 
			
		||||
            />
 | 
			
		||||
        );
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@ -101,6 +101,9 @@ export default React.createClass({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    onSubmit: function(ev) {
 | 
			
		||||
        if (this.refs.uiAuth) {
 | 
			
		||||
            this.refs.uiAuth.tryContinue();
 | 
			
		||||
        }
 | 
			
		||||
        this.setState({
 | 
			
		||||
            doingUIAuth: true,
 | 
			
		||||
        });
 | 
			
		||||
@ -217,6 +220,8 @@ export default React.createClass({
 | 
			
		||||
                onAuthFinished={this._onUIAuthFinished}
 | 
			
		||||
                inputs={{}}
 | 
			
		||||
                poll={true}
 | 
			
		||||
                ref="uiAuth"
 | 
			
		||||
                continueIsManaged={true}
 | 
			
		||||
            />;
 | 
			
		||||
        }
 | 
			
		||||
        const inputClasses = classnames({
 | 
			
		||||
 | 
			
		||||
@ -222,6 +222,7 @@ export const TermsAuthEntry = React.createClass({
 | 
			
		||||
        stageParams: PropTypes.object.isRequired,
 | 
			
		||||
        errorText: PropTypes.string,
 | 
			
		||||
        busy: PropTypes.bool,
 | 
			
		||||
        showContinue: PropTypes.bool,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    componentWillMount: function() {
 | 
			
		||||
@ -275,19 +276,30 @@ export const TermsAuthEntry = React.createClass({
 | 
			
		||||
        });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _trySubmit: function(policyId) {
 | 
			
		||||
    tryContinue: function() {
 | 
			
		||||
        this._trySubmit();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _togglePolicy: function(policyId) {
 | 
			
		||||
        const newToggles = {};
 | 
			
		||||
        let allChecked = true;
 | 
			
		||||
        for (const policy of this.state.policies) {
 | 
			
		||||
            let checked = this.state.toggledPolicies[policy.id];
 | 
			
		||||
            if (policy.id === policyId) checked = !checked;
 | 
			
		||||
 | 
			
		||||
            newToggles[policy.id] = checked;
 | 
			
		||||
        }
 | 
			
		||||
        this.setState({"toggledPolicies": newToggles});
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _trySubmit: function() {
 | 
			
		||||
        let allChecked = true;
 | 
			
		||||
        for (const policy of this.state.policies) {
 | 
			
		||||
            let checked = this.state.toggledPolicies[policy.id];
 | 
			
		||||
            allChecked = allChecked && checked;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.setState({"toggledPolicies": newToggles});
 | 
			
		||||
        if (allChecked) this.props.submitAuthDict({type: TermsAuthEntry.LOGIN_TYPE});
 | 
			
		||||
        else this.setState({errorText: _t("Please review and accept all of the homeserver's policies")});
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    render: function() {
 | 
			
		||||
@ -303,27 +315,35 @@ export const TermsAuthEntry = React.createClass({
 | 
			
		||||
            allChecked = allChecked && checked;
 | 
			
		||||
 | 
			
		||||
            checkboxes.push(
 | 
			
		||||
                <label key={"policy_checkbox_" + policy.id}>
 | 
			
		||||
                    <input type="checkbox" onClick={() => this._trySubmit(policy.id)} checked={checked} />
 | 
			
		||||
                <label key={"policy_checkbox_" + policy.id} className="mx_InteractiveAuthEntryComponents_termsPolicy">
 | 
			
		||||
                    <input type="checkbox" onClick={() => this._togglePolicy(policy.id)} checked={checked} />
 | 
			
		||||
                    <a href={policy.url} target="_blank" rel="noopener">{ policy.name }</a>
 | 
			
		||||
                </label>,
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let errorSection;
 | 
			
		||||
        if (this.props.errorText) {
 | 
			
		||||
        if (this.props.errorText || this.state.errorText) {
 | 
			
		||||
            errorSection = (
 | 
			
		||||
                <div className="error" role="alert">
 | 
			
		||||
                    { this.props.errorText }
 | 
			
		||||
                    { this.props.errorText || this.state.errorText }
 | 
			
		||||
                </div>
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let submitButton;
 | 
			
		||||
        if (this.props.showContinue !== false) {
 | 
			
		||||
            // XXX: button classes
 | 
			
		||||
            submitButton = <button className="mx_InteractiveAuthEntryComponents_termsSubmit mx_UserSettings_button"
 | 
			
		||||
                                   onClick={this._trySubmit} disabled={!allChecked}>{_t("Accept")}</button>;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
            <div>
 | 
			
		||||
                <p>{_t("Please review and accept the policies of this homeserver:")}</p>
 | 
			
		||||
                { checkboxes }
 | 
			
		||||
                { errorSection }
 | 
			
		||||
                { submitButton }
 | 
			
		||||
            </div>
 | 
			
		||||
        );
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@ -648,6 +648,7 @@
 | 
			
		||||
    "Dismiss": "Dismiss",
 | 
			
		||||
    "To continue, please enter your password.": "To continue, please enter your password.",
 | 
			
		||||
    "Password:": "Password:",
 | 
			
		||||
    "Please review and accept all of the homeserver's policies": "Please review and accept all of the homeserver's policies",
 | 
			
		||||
    "Please review and accept the policies of this homeserver:": "Please review and accept the policies of this homeserver:",
 | 
			
		||||
    "An email has been sent to %(emailAddress)s": "An email has been sent to %(emailAddress)s",
 | 
			
		||||
    "Please check your email to continue registration.": "Please check your email to continue registration.",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user