aboutsummaryrefslogtreecommitdiffstats
path: root/packages/website/ts
diff options
context:
space:
mode:
authorfragosti <francesco.agosti93@gmail.com>2018-06-02 08:25:50 +0800
committerfragosti <francesco.agosti93@gmail.com>2018-06-02 08:25:50 +0800
commit073a96cf63a8b2e5639d15133d09545f7bde1388 (patch)
tree8c2250740101b6b26e3d48745e06bca46e59260d /packages/website/ts
parent817d9b0d3e1becdb2e8dbf51caa09edab8d14ab0 (diff)
downloaddexon-0x-contracts-073a96cf63a8b2e5639d15133d09545f7bde1388.tar.gz
dexon-0x-contracts-073a96cf63a8b2e5639d15133d09545f7bde1388.tar.zst
dexon-0x-contracts-073a96cf63a8b2e5639d15133d09545f7bde1388.zip
Implement subscription form
Diffstat (limited to 'packages/website/ts')
-rw-r--r--packages/website/ts/components/forms/subscribe_form.tsx121
-rw-r--r--packages/website/ts/components/ui/button.tsx79
-rw-r--r--packages/website/ts/components/ui/container.tsx15
-rw-r--r--packages/website/ts/components/ui/input.tsx43
-rw-r--r--packages/website/ts/components/ui/text.tsx56
-rw-r--r--packages/website/ts/pages/landing/landing.tsx38
-rw-r--r--packages/website/ts/utils/backend_client.ts4
7 files changed, 288 insertions, 68 deletions
diff --git a/packages/website/ts/components/forms/subscribe_form.tsx b/packages/website/ts/components/forms/subscribe_form.tsx
index 3a6d0901f..99686efce 100644
--- a/packages/website/ts/components/forms/subscribe_form.tsx
+++ b/packages/website/ts/components/forms/subscribe_form.tsx
@@ -1,7 +1,12 @@
import { colors } from '@0xproject/react-shared';
import * as React from 'react';
-import RaisedButton from 'material-ui/RaisedButton';
+import { Button } from 'ts/components/ui/button';
+import { Input } from 'ts/components/ui/input';
+import { Text } from 'ts/components/ui/text';
+import { logUtils } from '@0xproject/utils';
+import { Container } from 'ts/components/ui/container';
+import { styled } from 'ts/style/theme';
import { backendClient } from 'ts/utils/backend_client';
export interface SubscribeFormProps {}
@@ -15,54 +20,102 @@ export enum SubscribeFormStatus {
export interface SubscribeFormState {
emailText: string;
+ lastSubmittedEmail: string;
status: SubscribeFormStatus;
}
export class SubscribeForm extends React.Component<SubscribeFormProps, SubscribeFormState> {
public state = {
emailText: '',
+ lastSubmittedEmail: '',
status: SubscribeFormStatus.None,
};
public render(): React.ReactNode {
+ const formFontSize = '15px';
return (
- <div>
- Subscribe to our newsletter for 0x relayer and dApp updates
- <div>
- <input value={this.state.emailText} onChange={this._handleEmailInputChange.bind(this)} />
- <RaisedButton
- labelStyle={{
- textTransform: 'none',
- fontSize: 15,
- fontWeight: 400,
- }}
- buttonStyle={{
- borderRadius: 6,
- }}
- style={{
- boxShadow: '0px 0px 4px rgba(0, 0, 0, 0.25)',
- borderRadius: 6,
- height: 48,
- width: 120,
- }}
- labelColor="white"
- backgroundColor="#252525"
- onClick={this._handleSubscribeClickAsync.bind(this)}
- label="Subscribe"
- />
- </div>
- </div>
+ <Container className="flex flex-column items-center justify-between md-mx2 sm-mx2">
+ <Container marginBottom="15px">
+ <Text fontFamily="Roboto Mono" fontColor={colors.grey} center={true}>
+ Subscribe to our newsletter for 0x relayer and dApp updates
+ </Text>
+ </Container>
+ <form onSubmit={this._handleFormSubmitAsync.bind(this)}>
+ <Container className="flex flex-wrap justify-center items-center">
+ <Container marginTop="15px">
+ <Input
+ placeholder="you@email.com"
+ value={this.state.emailText}
+ fontColor={colors.white}
+ fontSize={formFontSize}
+ backgroundColor="#343333"
+ width="275px"
+ onChange={this._handleEmailInputChange.bind(this)}
+ />
+ </Container>
+ <Container marginLeft="15px" marginTop="15px">
+ <Button
+ type="submit"
+ backgroundColor="#252525"
+ fontColor={colors.white}
+ fontSize={formFontSize}
+ >
+ Subscribe
+ </Button>
+ </Container>
+ </Container>
+ </form>
+ {this._renderMessage()}
+ </Container>
);
}
+ private _renderMessage(): React.ReactNode {
+ let message = null;
+ switch (this.state.status) {
+ case SubscribeFormStatus.Error:
+ message = 'Sorry, something went wrong. Try again later.';
+ break;
+ case SubscribeFormStatus.Loading:
+ message = 'One second...';
+ break;
+ case SubscribeFormStatus.Success:
+ message = `Thanks! ${this.state.lastSubmittedEmail} is now on the mailing list.`;
+ break;
+ case SubscribeFormStatus.None:
+ break;
+ }
+ return (
+ <Container isHidden={!message} marginTop="30px">
+ <Text center={true} fontFamily="Roboto Mono" fontColor={colors.grey}>
+ {message || 'spacer text'}
+ </Text>
+ </Container>
+ );
+ }
+
private _handleEmailInputChange(event: React.ChangeEvent<HTMLInputElement>): void {
this.setState({ emailText: event.target.value });
}
- private async _handleSubscribeClickAsync(): Promise<void> {
- this._setStatus(SubscribeFormStatus.Loading);
- const isSuccess = await backendClient.subscribeToNewsletterAsync(this.state.emailText);
- const status = isSuccess ? SubscribeFormStatus.Success : SubscribeFormStatus.Error;
- this._setStatus(status);
+ private async _handleFormSubmitAsync(event: React.FormEvent<HTMLInputElement>): Promise<void> {
+ event.preventDefault();
+ if (!this.state.emailText) {
+ return;
+ }
+ this.setState({
+ status: SubscribeFormStatus.Loading,
+ lastSubmittedEmail: this.state.emailText,
+ });
+ try {
+ const response = await backendClient.subscribeToNewsletterAsync(this.state.emailText);
+ const status = response.status === 200 ? SubscribeFormStatus.Success : SubscribeFormStatus.Error;
+ this._setStatus(status);
+ } catch (error) {
+ logUtils.log(error);
+ this._setStatus(SubscribeFormStatus.Error);
+ } finally {
+ this.setState({ emailText: '' });
+ }
}
- private _setStatus(status: SubscribeFormStatus): void {
- this.setState({ status });
+ private _setStatus(status: SubscribeFormStatus, then?: () => void): void {
+ this.setState({ status }, then);
}
}
diff --git a/packages/website/ts/components/ui/button.tsx b/packages/website/ts/components/ui/button.tsx
new file mode 100644
index 000000000..e6e31374f
--- /dev/null
+++ b/packages/website/ts/components/ui/button.tsx
@@ -0,0 +1,79 @@
+import { colors } from '@0xproject/react-shared';
+import { darken } from 'polished';
+import * as React from 'react';
+import { styled } from 'ts/style/theme';
+
+export interface ButtonProps {
+ className?: string;
+ fontSize?: string;
+ fontColor?: string;
+ backgroundColor?: string;
+ borderColor?: string;
+ width?: string;
+ type?: string;
+ onClick?: (event: React.MouseEvent<HTMLElement>) => void;
+}
+
+const PlainButton: React.StatelessComponent<ButtonProps> = ({ children, onClick, type, className }) => (
+ <button type={type} className={className} onClick={onClick}>
+ {children}
+ </button>
+);
+
+export const Button = styled(PlainButton)`
+ cursor: pointer;
+ font-size: ${props => props.fontSize};
+ color: ${props => props.fontColor};
+ padding: 0.8em 2.2em;
+ border-radius: 6px;
+ box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.25);
+ font-weight: 500;
+ font-family: 'Roboto';
+ width: ${props => props.width};
+ background-color: ${props => props.backgroundColor};
+ border: ${props => (props.borderColor ? `1px solid ${props.borderColor}` : 'none')};
+ &:hover {
+ background-color: ${props => darken(0.1, props.backgroundColor)};
+ }
+ &:active {
+ background-color: ${props => darken(0.2, props.backgroundColor)};
+ }
+`;
+
+Button.defaultProps = {
+ fontSize: '12px',
+ backgroundColor: colors.white,
+ width: 'auto',
+};
+
+Button.displayName = 'Button';
+
+type CTAType = 'light' | 'dark';
+
+export interface CTAProps {
+ type?: CTAType;
+ fontSize?: string;
+ width?: string;
+}
+
+export const CTA: React.StatelessComponent<CTAProps> = ({ children, type, fontSize, width }) => {
+ const isLight = type === 'light';
+ const backgroundColor = isLight ? colors.white : colors.heroGrey;
+ const fontColor = isLight ? colors.heroGrey : colors.white;
+ const borderColor = isLight ? undefined : colors.white;
+ return (
+ <Button
+ fontSize={fontSize}
+ backgroundColor={backgroundColor}
+ fontColor={fontColor}
+ width={width}
+ borderColor={borderColor}
+ >
+ {children}
+ </Button>
+ );
+};
+
+CTA.defaultProps = {
+ type: 'dark',
+};
diff --git a/packages/website/ts/components/ui/container.tsx b/packages/website/ts/components/ui/container.tsx
index d577447b0..c6a78e181 100644
--- a/packages/website/ts/components/ui/container.tsx
+++ b/packages/website/ts/components/ui/container.tsx
@@ -11,13 +11,20 @@ export interface ContainerProps {
paddingBottom?: StringOrNum;
paddingRight?: StringOrNum;
paddingLeft?: StringOrNum;
+ backgroundColor?: string;
+ borderRadius?: StringOrNum;
maxWidth?: StringOrNum;
- children?: React.ReactNode;
+ isHidden?: boolean;
+ className?: string;
}
-export const Container: React.StatelessComponent<ContainerProps> = (props: ContainerProps) => {
- const { children, ...style } = props;
- return <div style={style}>{children}</div>;
+export const Container: React.StatelessComponent<ContainerProps> = ({ children, className, isHidden, ...style }) => {
+ const visibility = isHidden ? 'hidden' : undefined;
+ return (
+ <div style={{ ...style, visibility }} className={className}>
+ {children}
+ </div>
+ );
};
Container.displayName = 'Container';
diff --git a/packages/website/ts/components/ui/input.tsx b/packages/website/ts/components/ui/input.tsx
new file mode 100644
index 000000000..75a453eae
--- /dev/null
+++ b/packages/website/ts/components/ui/input.tsx
@@ -0,0 +1,43 @@
+import { colors } from '@0xproject/react-shared';
+import * as React from 'react';
+import { styled } from 'ts/style/theme';
+
+export interface InputProps {
+ className?: string;
+ value?: string;
+ width?: string;
+ fontSize?: string;
+ fontColor?: string;
+ placeholderColor?: string;
+ placeholder?: string;
+ backgroundColor?: string;
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
+}
+
+const PlainInput: React.StatelessComponent<InputProps> = ({ value, className, placeholder, onChange }) => (
+ <input className={className} value={value} onChange={onChange} placeholder={placeholder} />
+);
+
+export const Input = styled(PlainInput)`
+ font-size: ${props => props.fontSize};
+ width: ${props => props.width};
+ padding: 0.8em 1.2em;
+ border-radius: 3px;
+ font-family: 'Roboto Mono';
+ color: ${props => props.fontColor};
+ border: none;
+ background-color: ${props => props.backgroundColor};
+ &::placeholder {
+ color: ${props => props.placeholder};
+ }
+`;
+
+Input.defaultProps = {
+ width: 'auto',
+ backgroundColor: colors.white,
+ fontColor: colors.darkestGrey,
+ placeholderColor: colors.grey500,
+ fontSize: '12px',
+};
+
+Input.displayName = 'Input';
diff --git a/packages/website/ts/components/ui/text.tsx b/packages/website/ts/components/ui/text.tsx
new file mode 100644
index 000000000..259365618
--- /dev/null
+++ b/packages/website/ts/components/ui/text.tsx
@@ -0,0 +1,56 @@
+import { colors } from '@0xproject/react-shared';
+import * as React from 'react';
+import { styled } from 'ts/style/theme';
+import { Deco, Key } from 'ts/types';
+import { Translate } from 'ts/utils/translate';
+
+export type TextTag = 'p' | 'div' | 'span' | 'label';
+
+export interface TextProps {
+ className?: string;
+ Tag?: TextTag;
+ fontSize?: string;
+ fontFamily?: string;
+ fontColor?: string;
+ lineHeight?: string;
+ center?: boolean;
+ fontWeight?: number;
+}
+
+const PlainText: React.StatelessComponent<TextProps> = ({ children, className, Tag }) => (
+ <Tag className={className}>{children}</Tag>
+);
+
+export const Text = styled(PlainText)`
+ font-family: ${props => props.fontFamily};
+ font-weight: ${props => props.fontWeight};
+ font-size: ${props => props.fontSize};
+ ${props => (props.lineHeight ? `line-height: ${props.lineHeight}` : '')};
+ ${props => (props.center ? 'text-align: center' : '')};
+ color: ${props => props.fontColor};
+`;
+
+Text.defaultProps = {
+ fontFamily: 'Roboto',
+ fontWeight: 400,
+ fontColor: colors.white,
+ fontSize: '14px',
+ Tag: 'div',
+};
+
+Text.displayName = 'Text';
+
+interface TranslatedProps {
+ children: Key;
+ translate: Translate;
+ deco?: Deco;
+}
+
+export type TranslatedTextProps = TextProps & TranslatedProps;
+
+export const TranslatedText: React.StatelessComponent<TranslatedTextProps> = ({
+ translate,
+ children,
+ deco,
+ ...textProps
+}) => <Text {...textProps}>{translate.get(children, deco)}</Text>;
diff --git a/packages/website/ts/pages/landing/landing.tsx b/packages/website/ts/pages/landing/landing.tsx
index 016c62a30..0911bb2cf 100644
--- a/packages/website/ts/pages/landing/landing.tsx
+++ b/packages/website/ts/pages/landing/landing.tsx
@@ -1,7 +1,7 @@
import { colors } from '@0xproject/react-shared';
import * as _ from 'lodash';
-import RaisedButton from 'material-ui/RaisedButton';
import * as React from 'react';
+import { CTA } from 'ts/components/ui/button';
import DocumentTitle = require('react-document-title');
import { Link } from 'react-router-dom';
import { Footer } from 'ts/components/footer';
@@ -237,7 +237,7 @@ export class Landing extends React.Component<LandingProps, LandingState> {
<div className="clearfix py4" style={{ backgroundColor: colors.heroGrey }}>
<div className="mx-auto max-width-4 clearfix">
{this._renderWhatsNew()}
- <div className="lg-pt4 md-pt4 sm-pt2 lg-pb4 md-pb4 lg-my4 md-my4 sm-mt2 sm-mb4 clearfix">
+ <div className="lg-pt4 md-pt4 sm-pt2 lg-pb4 md-pb4 lg-mt4 md-mt4 sm-mt2 sm-mb4 clearfix">
<div className="col lg-col-5 md-col-5 col-12 sm-center">
<img src="/images/landing/hero_chip_image.png" height={isSmallScreen ? 300 : 395} />
</div>
@@ -272,13 +272,9 @@ export class Landing extends React.Component<LandingProps, LandingState> {
<div className="pt3 clearfix sm-mx-auto" style={{ maxWidth: 389 }}>
<div className="lg-pr2 md-pr2 col col-6 sm-center">
<Link to={WebsitePaths.ZeroExJs} className="text-decoration-none">
- <RaisedButton
- style={{ borderRadius: 6, minWidth: 157.36 }}
- buttonStyle={{ borderRadius: 6 }}
- labelStyle={buttonLabelStyle}
- label={this.props.translate.get(Key.BuildCallToAction, Deco.Cap)}
- onClick={_.noop}
- />
+ <CTA width="175px" type="light">
+ {this.props.translate.get(Key.BuildCallToAction, Deco.Cap)}
+ </CTA>
</Link>
</div>
<div className="col col-6 sm-center">
@@ -287,23 +283,17 @@ export class Landing extends React.Component<LandingProps, LandingState> {
target="_blank"
className="text-decoration-none"
>
- <RaisedButton
- style={{ borderRadius: 6, minWidth: 150 }}
- buttonStyle={lightButtonStyle}
- labelColor="white"
- backgroundColor={colors.heroGrey}
- labelStyle={buttonLabelStyle}
- label={this.props.translate.get(Key.CommunityCallToAction, Deco.Cap)}
- onClick={_.noop}
- />
+ <CTA width="175px">
+ {this.props.translate.get(Key.CommunityCallToAction, Deco.Cap)}
+ </CTA>
</a>
</div>
</div>
- <SubscribeForm />
</div>
</div>
</div>
</div>
+ <SubscribeForm />
</div>
);
}
@@ -784,15 +774,7 @@ export class Landing extends React.Component<LandingProps, LandingState> {
</div>
<div className="sm-center sm-pt2 lg-table-cell md-table-cell">
<Link to={WebsitePaths.ZeroExJs} className="text-decoration-none">
- <RaisedButton
- style={{ borderRadius: 6, minWidth: 150 }}
- buttonStyle={lightButtonStyle}
- labelColor={colors.white}
- backgroundColor={colors.heroGrey}
- labelStyle={buttonLabelStyle}
- label={this.props.translate.get(Key.BuildCallToAction, Deco.Cap)}
- onClick={_.noop}
- />
+ <CTA fontSize="15px">{this.props.translate.get(Key.BuildCallToAction, Deco.Cap)}</CTA>
</Link>
</div>
</div>
diff --git a/packages/website/ts/utils/backend_client.ts b/packages/website/ts/utils/backend_client.ts
index fb7c21c59..6b16aea6b 100644
--- a/packages/website/ts/utils/backend_client.ts
+++ b/packages/website/ts/utils/backend_client.ts
@@ -34,11 +34,11 @@ export const backendClient = {
const result = await fetchUtils.requestAsync(utils.getBackendBaseUrl(), WIKI_ENDPOINT);
return result;
},
- async subscribeToNewsletterAsync(email: string): Promise<boolean> {
+ async subscribeToNewsletterAsync(email: string): Promise<Response> {
const result = await fetchUtils.postAsync(utils.getBackendBaseUrl(), SUBSCRIBE_SUBSTACK_NEWSLETTER_ENDPOINT, {
email,
referrer: window.location.href,
});
- return result.status === 200;
+ return result;
},
};
/span>="weight" value="bold"/> </attributes> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkHBox" id="hbox170"> <property name="visible">True</property> <child> <object class="GtkLabel" id="label465"> <property name="visible">True</property> <property name="xpad">12</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkTable" id="table10"> <property name="visible">True</property> <property name="column_spacing">6</property> <property name="row_spacing">2</property> <child> <object class="GtkVBox" id="signature_vbox"> <property name="visible">True</property> <property name="orientation">vertical</property> <child> <placeholder/> </child> </object> </child> </object> <packing> <property name="position">1</property> </packing> </child> </object> <packing> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkVBox" id="frame6"> <property name="visible">True</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="label477"> <property name="visible">True</property> <property name="xalign">0</property> <property name="label" translatable="yes">Encryption</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkHBox" id="hbox171"> <property name="visible">True</property> <child> <object class="GtkLabel" id="label478"> <property name="visible">True</property> <property name="xpad">12</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkTable" id="table11"> <property name="visible">True</property> <property name="column_spacing">6</property> <property name="row_spacing">2</property> <child> <object class="GtkVBox" id="encryption_vbox"> <property name="visible">True</property> <property name="orientation">vertical</property> <child> <placeholder/> </child> </object> </child> </object> <packing> <property name="position">1</property> </packing> </child> </object> <packing> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="position">1</property> </packing> </child> <child internal-child="action_area"> <object class="GtkHButtonBox" id="dialog-action_area2"> <property name="visible">True</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="okbutton1"> <property name="label">gtk-ok</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-5">okbutton1</action-widget> </action-widgets> </object> <object class="GtkDialog" id="subscribe_dialog"> <property name="title" translatable="yes">Folder Subscriptions</property> <property name="default_width">600</property> <property name="default_height">400</property> <property name="type_hint">dialog</property> <property name="has_separator">False</property> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox1"> <property name="visible">True</property> <property name="orientation">vertical</property> <child> <object class="GtkVBox" id="vbox2"> <property name="visible">True</property> <property name="border_width">12</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <child> <object class="GtkTable" id="top_items_table"> <property name="visible">True</property> <property name="n_rows">2</property> <property name="n_columns">3</property> <property name="column_spacing">12</property> <property name="row_spacing">6</property> <child> <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="label" translatable="yes">S_erver:</property> <property name="use_underline">True</property> <property name="xalign">1</property> </object> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> <object class="GtkComboBox" id="store_combobox"> <property name="visible">True</property> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> <object class="GtkProgressBar" id="progress_bar"> <property name="visible">True</property> <property name="pulse_step">0.10000000149</property> </object> <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> </packing> </child> <child> <object class="GtkLabel" id="filterlabel"> <property name="visible">True</property> <property name="label" translatable="yes">S_how only items containing:</property> <property name="use_underline">True</property> <property name="xalign">1</property> </object> <packing> <property name="left_attach">0</property> <property name="right_attach">1</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> <object class="GtkEntry" id="filter_entry"> <property name="visible">True</property> <property name="secondary_icon_stock">gtk-clear</property> <property name="secondary_icon_activatable">True</property> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">3</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="y_options"></property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkHBox" id="tree_box"> <property name="visible">True</property> <property name="spacing">6</property> <child> <placeholder/> </child> </object> <packing> <property name="position">1</property> </packing> </child> </object> <packing> <property name="position">1</property> </packing> </child> <child internal-child="action_area"> <object class="GtkHButtonBox" id="dialog-action_area1"> <property name="visible">True</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="expand_button"> <property name="label" translatable="yes">E_xpand all</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_underline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="collapse_button"> <property name="label" translatable="yes">Collapse _all</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_underline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkButton" id="refresh_button"> <property name="label">gtk-refresh</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkButton" id="close_button"> <property name="label">gtk-close</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">3</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="0">refresh_button</action-widget> <action-widget response="-7">close_button</action-widget> </action-widgets> </object> <object class="GtkDialog" id="license_dialog"> <property name="title" translatable="yes">License Agreement</property> <property name="type_hint">dialog</property> <child internal-child="vbox"> <object class="GtkVBox" id="dialog_vbox"> <property name="visible">True</property> <property name="orientation">vertical</property> <child> <object class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel" id="license_top_label"> <property name="visible">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkScrolledWindow" id="lic_scrolledwindow"> <property name="visible">True</property> <property name="can_focus">True</property> <child> <object class="GtkTextView" id="license_textview"> <property name="width_request">500</property> <property name="height_request">400</property> <property name="visible">True</property> <property name="can_focus">True</property> </object> </child> </object> <packing> <property name="position">1</property> </packing> </child> <child> <object class="GtkCheckButton" id="license_checkbutton"> <property name="label" translatable="yes">_Tick this to accept the license agreement</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_underline">True</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> </object> <packing> <property name="position">2</property> </packing> </child> <child internal-child="action_area"> <object class="GtkHButtonBox" id="dialog-action_area4"> <property name="visible">True</property> <property name="layout_style">end</property> <child> <object class="GtkButton" id="lic_no_button"> <property name="label">gtk-no</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="lic_yes_button"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <child> <object class="GtkAlignment" id="alignment1"> <property name="visible">True</property> <property name="xscale">0</property> <property name="yscale">0</property> <child> <object class="GtkHBox" id="hbox3"> <property name="visible">True</property> <property name="spacing">2</property> <child> <object class="GtkImage" id="image1"> <property name="visible">True</property> <property name="stock">gtk-yes</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="label2"> <property name="visible">True</property> <property name="label" translatable="yes">_Accept License</property> <property name="use_underline">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> </child> </object> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> </object> </child> <action-widgets> <action-widget response="-6">lic_no_button</action-widget> <action-widget response="-3">lic_yes_button</action-widget> </action-widgets> </object> <object class="GtkListStore" id="source_model"> <columns> <!-- column-name Translated --> <column type="gchararray"/> <!-- column-name Raw --> <column type="gpointer"/> </columns> </object> <object class="GtkListStore" id="combo_model"> <columns> <!-- column-name Flag --> <column type="gchararray"/> </columns> <data> <row> <col id="0" translatable="yes">Call</col> </row> <row> <col id="0" translatable="yes">Do Not Forward</col> </row> <row> <col id="0" translatable="yes">Follow-Up</col> </row> <row> <col id="0" translatable="yes">For Your Information</col> </row> <row> <col id="0" translatable="yes">Forward</col> </row> <row> <col id="0" translatable="yes">No Response Necessary</col> </row> <row> <col id="0" translatable="yes" comments="Past tense, as in &quot;has been read&quot;.">Read</col> </row> <row> <col id="0" translatable="yes">Reply</col> </row> <row> <col id="0" translatable="yes">Reply to All</col> </row> <row> <col id="0" translatable="yes">Review</col> </row> </data> </object> <object class="GtkVBox" id="toplevel"> <property name="visible">True</property> <property name="border_width">6</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <child> <object class="GtkHBox" id="hbox2"> <property name="visible">True</property> <property name="spacing">6</property> <child> <object class="GtkImage" id="pixmap"> <property name="visible">True</property> <property name="icon_name">stock_mail-flag-for-followup</property> <property name="icon-size">6</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkLabel" id="lblDirections"> <property name="visible">True</property> <property name="label" translatable="yes">The messages you have selected for follow up are listed below. Please select a follow up action from the "Flag" menu.</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkScrolledWindow" id="scrolledwindow1"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="hscrollbar_policy">automatic</property> <property name="vscrollbar_policy">automatic</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="message_list"> <property name="visible">True</property> <property name="can_focus">True</property> </object> </child> </object> <packing> <property name="position">1</property> </packing> </child> <child> <object class="GtkTable" id="table2"> <property name="visible">True</property> <property name="n_rows">3</property> <property name="n_columns">3</property> <property name="column_spacing">6</property> <property name="row_spacing">6</property> <child> <object class="GtkLabel" id="label3"> <property name="visible">True</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Flag:</property> <property name="use_underline">True</property> <property name="justify">center</property> </object> <packing> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> <object class="GtkLabel" id="label4"> <property name="visible">True</property> <property name="xalign">0</property> <property name="label" translatable="yes">_Due By:</property> <property name="use_underline">True</property> <property name="justify">center</property> </object> <packing> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> <object class="GtkButton" id="clear"> <property name="label">gtk-clear</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> </object> <packing> <property name="left_attach">2</property> <property name="right_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> <object class="EDateEdit" id="target_date"> <property name="allow-no-date-set">True</property> <property name="visible">True</property> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">3</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> <property name="y_options">GTK_FILL</property> </packing> </child> <child> <object class="GtkCheckButton" id="completed"> <property name="label" translatable="yes">Co_mpleted</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_underline">True</property> <property name="draw_indicator">True</property> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">3</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> <object class="GtkComboBoxEntry" id="combo"> <property name="visible">True</property> <property name="model">combo_model</property> </object> <packing> <property name="left_attach">1</property> <property name="right_attach">2</property> <property name="x_options">GTK_FILL</property> <property name="y_options"></property> </packing> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> <child> <placeholder/> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> </object> <object class="GtkVBox" id="vfolder_source_frame"> <property name="visible">True</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkLabel" id="label13"> <property name="visible">True</property> <property name="xalign">0</property> <property name="label" translatable="yes">Search Folder Sources</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkHBox" id="hbox9"> <property name="visible">True</property> <child> <object class="GtkLabel" id="label14"> <property name="visible">True</property> <property name="label" translatable="no"> </property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkVBox" id="vbox5"> <property name="visible">True</property> <property name="border_width">6</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkRadioButton" id="local_rb"> <property name="label" translatable="yes">All local folders</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_underline">True</property> <property name="draw_indicator">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkRadioButton" id="remote_rb"> <property name="label" translatable="yes">All active remote folders</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_underline">True</property> <property name="draw_indicator">True</property> <property name="group">local_rb</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> <child> <object class="GtkRadioButton" id="local_and_remote_rb"> <property name="label" translatable="yes">All local and active remote folders</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_underline">True</property> <property name="draw_indicator">True</property> <property name="group">local_rb</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkRadioButton" id="specific_rb"> <property name="label" translatable="yes">Specific folders</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="use_underline">True</property> <property name="draw_indicator">True</property> <property name="group">local_rb</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">3</property> </packing> </child> <child> <object class="GtkHBox" id="source_selector"> <property name="visible">True</property> <property name="spacing">6</property> <child> <object class="GtkScrolledWindow" id="source_scrolled_window"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hscrollbar_policy">automatic</property> <property name="vscrollbar_policy">automatic</property> <property name="shadow_type">in</property> <child> <object class="GtkTreeView" id="source_list"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="model">source_model</property> <property name="headers_visible">False</property> <child> <object class="GtkTreeViewColumn" id="source_column"> <property name="title">column</property> <child> <object class="GtkCellRendererText" id="source_renderer"/> <attributes> <attribute name="text">0</attribute> </attributes> </child> </object> </child> </object> </child> </object> <packing> <property name="position">0</property> </packing> </child> <child> <object class="GtkVBox" id="vbox4"> <property name="visible">True</property> <property name="orientation">vertical</property> <property name="spacing">1</property> <child> <object class="GtkVButtonBox" id="vbuttonbox3"> <property name="visible">True</property> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkButton" id="source_add"> <property name="label">gtk-add</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkButton" id="source_remove"> <property name="label">gtk-remove</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="can_default">True</property> <property name="receives_default">False</property> <property name="use_stock">True</property> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> <property name="position">1</property> </packing> </child> </object> <packing> <property name="position">4</property> </packing> </child> </object> <packing> <property name="position">1</property> </packing> </child> </object> <packing> <property name="position">1</property> </packing> </child> </object> </interface>