예제 #1
0
 def render_login_panel():
     return __pragma__("xtrans", None, "{}", """ (
         <div>
             <h5>Please Login:</h5>
             <LoginFormContainer />
         </div>
     ); """)
예제 #2
0
def Home():
    return __pragma__(
        "xtrans", None, "{}", """ (
        <div className="home">
            <h1>Welcome Home!!</h1>
        </div>
    ); """)
예제 #3
0
 def render_albums(album):
     return __pragma__(
         "js", "{}", """ (
         <AlbumDetail
             key={album.title}
             album={album} />
     ); """)
예제 #4
0
    def render(self):
        data, fetch_users, set_user = \
            destruct(self.props, "data", "fetch_users", "set_user")

        def render_item(enum_):
            i, user = enum_
            on_click = lambda: set_user(user)
            return __pragma__("xtrans", None, "{}", """ (
                <UserItem
                    key={i}
                    user={user}
                    onClick={on_click} />
            ); """)

        return __pragma__("xtrans", None, "{}", """ (
            <div className="container">
                <Button
                    onClick={fetch_users}
                    text="Fetch Users"
                    className="btn btn-blue" />
                <div id="users">
                    { map(render_item, enumerate(data.users)) }
                </div>
            </div>
        ); """)
예제 #5
0
def Header(props):
    view_style, text_style = styles.values()
    return __pragma__(
        "js", "{}", """ (
        <View style={view_style}>
            <Text style={text_style}>{props.header_text}</Text>
        </View>
    ); """)
예제 #6
0
def Card(props):
    container_style, = styles.values()
    return __pragma__(
        "js", "{}", """ (
        <View style={container_style}>
            {props.children}
        </View>
    ); """)
예제 #7
0
def Navbar(props):
    return __pragma__(
        "xtrans", None, "{}", """ (
        <nav>
            <Link to="/">Home</Link>
            <Link to="users">Users</Link>
        </nav>
    ); """)
예제 #8
0
def App():
    return __pragma__(
        "js", "{}", """ (
        <View style={{ "flex": 1 }}>
            <Header header_text={"Albums"} />
            <AlbumList />
        </View>
    ); """)
예제 #9
0
def Button(props):
    return __pragma__(
        "xtrans", None, "{}", """ (
        <button
            onClick={props.onClick}
            className={props.className}
        >{props.text}</button>
    ); """)
예제 #10
0
 def render_item(enum_):
     i, user = enum_
     on_click = lambda: set_user(user)
     return __pragma__("xtrans", None, "{}", """ (
         <UserItem
             key={i}
             user={user}
             onClick={on_click} />
     ); """)
예제 #11
0
def App(props):
    return __pragma__("xtrans", None, "{}", """ (
        <div className="appComp">
            <Navbar />
            <div>
                <h1>This is our App component</h1>
                {props.children}
            </div>
        </div>
    ); """)
예제 #12
0
 def render_spinner(self):
     loading = True
     return __pragma__(
         "xtrans", None, "{}", """ (
         <div className="flex-center">
             <RingLoader
                 color="#999"
                 loading={loading} />
         </div>
     ); """)
예제 #13
0
def UserProfile(props):
    user_profile = props.user_profile
    title, first, last = \
        destruct(user_profile["name"], "title", "first", "last")
    full_name = f"{title.capitalize()}. {first.capitalize()} {last.capitalize()}"

    if not user_profile:
        return __pragma__(
            "xtrans", None, "{}", """ (
            <h1>Looks like you haven't selected a user</h1>
        ); """)

    return __pragma__(
        "xtrans", None, "{}", """ (
        <div className="container">
            <img src={user_profile.picture.large} />
            <span>{full_name}</span>
            <span>{user_profile.email}</span>
        </div>
    ); """)
예제 #14
0
def Button(props):
    button_style, text_style = styles.values()
    return __pragma__("js", "{}", """ (
        <TouchableOpacity
            style={button_style}
            onPress={props.onPress}>
            <Text style={text_style}>
                {props.children}
            </Text>
        </TouchableOpacity>
    ); """)
예제 #15
0
 def render_checkmark(self, todo):
     if todo["complete"]:
         return __pragma__(
             "xtrans", None, "{}", """ (
             <div className="flex-column flex-center margin">
                 <FontAwesomeIcon
                     name="check-circle"
                     size="2x"
                     className="green-text" />
             </div>
         ); """)
     return None
예제 #16
0
 def render_todo_panel():
     return __pragma__("xtrans", None, "{}", """ (
         <div>
             <TodoListContainer />
             <Form
                 className="padding"
                 onSubmit={on_submit}
             >
                 <FormPanelContainer />
                 <ButtonPanelContainer />
             </Form>
         </div>
     ); """)
예제 #17
0
def App(props):
    def render_login_panel():
        return __pragma__("xtrans", None, "{}", """ (
            <div>
                <h5>Please Login:</h5>
                <LoginFormContainer />
            </div>
        ); """)

    def on_submit(e):
        e.preventDefault()

    def render_todo_panel():
        return __pragma__("xtrans", None, "{}", """ (
            <div>
                <TodoListContainer />
                <Form
                    className="padding"
                    onSubmit={on_submit}
                >
                    <FormPanelContainer />
                    <ButtonPanelContainer />
                </Form>
            </div>
        ); """)

    logged_in, error = destruct(props["login_user"], "logged_in", "error")
    visible_component = render_todo_panel() if logged_in else render_login_panel()

    return __pragma__("xtrans", None, "{}", """ (
        <Row>
            <Col
                lg={{size: 6, offset: 3}}
                md={{size: 8, offset: 2}}
                sm={{size: 10, offset: 1}}
                xs="12"
            >
                <Jumbotron>
                    <div className="flex-column">
                        <div className="flex-center padding">
                            <h2>My Todos</h2>
                        </div>
                        {visible_component}
                        <span className="red-text">{error}</span>
                    </div>
                </Jumbotron>
            </Col>
        </Row>
    ); """)
예제 #18
0
def UserItem(props):
    thumbnail = props.user.picture.thumbnail
    username = props.user.login.username
    to_path = f"/user:{username}"

    return __pragma__("xtrans", None, "{}", """ (
        <Link
            className="box"
            onClick={props.onClick}
            to={to_path}
        >
            <img src={thumbnail} />
            <span>{username}</span>
        </Link>
    ); """)
def FormPanel(props):
    def on_text_change(e):
        props.form_panel_update(e.target.value)

    return __pragma__(
        "xtrans", None, "{}", """ (
        <FormGroup>
            <Label for="text_input">Enter new todo text:</Label>
            <Input
                onChange={on_text_change}
                value={props.form_panel.text}
                id="text_input"
                placeholder="What to do?" />
        </FormGroup>
    ); """)
예제 #20
0
    def render(self):
        todo_list = self.props["todo_list"]
        if todo_list["loading"]:
            return self.render_spinner()

        list_items = map(self.render_list_item, todo_list["todos"])
        return __pragma__(
            "xtrans", None, "{}", """ (
            <div>
                <ListGroup>
                    {list_items}
                </ListGroup>
                <span className="red-text">{todo_list.error}</span>
            </div>
        ); """)
예제 #21
0
def LoginForm(props):
    def on_input_change(e):
        props.login_form_update(e.target.id, e.target.value)

    def on_submit_login(e):
        username, password = destruct(props["login_form"], "username_text",
                                      "password_text")
        if username and password:
            props.clear_login_form()
            props.login_user(username, password)
        e.preventDefault()

    def on_click_register(e):
        username, password = destruct(props["login_form"], "username_text",
                                      "password_text")
        if username and password:
            props.clear_login_form()
            props.register_user(username, password)

    return __pragma__(
        "xtrans", None, "{}", """ (
        <Form className="padding" onSubmit={on_submit_login}>
            <FormGroup>
                <Label for="username_text">Enter your username</Label>
                <Input
                    onChange={on_input_change}
                    value={props.login_form.username_text}
                    placeholder="Your Username"
                    id="username_text" />
            </FormGroup>
            <FormGroup>
                <Label for="password_text">Enter your password</Label>
                <Input
                    onChange={on_input_change}
                    value={props.login_form.password_text}
                    type="password"
                    id="password_text" />
            </FormGroup>
            <Button
                className="fixed-height margin"
                type="submit"
            >Login</Button>
            <Button
                className="fixed-height"
                onClick={on_click_register}
            >Register</Button>
        </Form>
    ); """)
예제 #22
0
    def render(self, props):
        console.log(self.state)

        def render_albums(album):
            return __pragma__(
                "js", "{}", """ (
                <AlbumDetail
                    key={album.title}
                    album={album} />
            ); """)

        return __pragma__(
            "js", "{}", """ (
            <ScrollView>
                { map(render_albums, self.state.albums) }
            </ScrollView>
        ); """)
예제 #23
0
def AlbumDetail(props):
    artist, image, thumbnail_image, title, url = \
        destruct(props.album,
                 "artist", "image", "thumbnail_image", "title", "url")
    (header_content_style, header_text_style, thumbnail_style,
     thumbnail_container_style, image_style) = styles.values()

    def on_press():
        return Linking.openURL(url)

    return __pragma__(
        "js", "{}", """ (
        <Card>
            <CardSection>
                <View style={thumbnail_container_style}>
                    <Image
                        source={{ "uri": thumbnail_image }}
                        style={thumbnail_style} />
                </View>
                <View style={header_content_style}>
                    <Text style={header_text_style}>
                        {title}
                    </Text>
                    <Text>{artist}</Text>
                </View>
            </CardSection>

            <CardSection>
                <Image
                    source={{ "uri": image }}
                    style={image_style} />
            </CardSection>

            <CardSection>
                <Button onPress={on_press}>
                    Buy Now
                </Button>
            </CardSection>
        </Card>
    ); """)
def ButtonPanel(props):
    def on_click_add():
        todo_text = props.form_panel["text"]
        token = props.login_user["token"]
        if todo_text:
            props.add_new_todo(todo_text, token)
            props.form_panel_update("")

    def on_click_clear():
        todo_text = props.form_panel["text"]
        if todo_text:
            props.form_panel_update("")

    def on_click_logout():
        on_click_clear()
        props.logout_user()

    return __pragma__(
        "xtrans", None, "{}", """ (
        <div className="flex-center">
            <div className="flex-container">
                <Button
                    className="fixed-height"
                    onClick={on_click_add}
                    color="success"
                    type="submit"
                >Add Todo</Button>
                <Button
                    className="fixed-height"
                    onClick={on_click_clear}
                    color="warning"
                >Clear Text</Button>
                <Button
                    className="fixed-height"
                    onClick={on_click_logout}
                >Logout</Button>
            </div>
        </div>
    ); """)
예제 #25
0
 def render_list_item(self, todo):
     return __pragma__(
         "xtrans", None, "{}", """ (
         <ListGroupItem
             className="flex-center"
             key={todo.id}
         >
             {self.render_checkmark(todo)}
             <div className="list-item">
                 {todo.text}
             </div>
             <Button
                 className="fixed-height margin"
                 color="primary"
                 onClick={self.on_click_complete(todo)}
                 disabled={todo.complete}
             >Complete</Button>
             <Button
                 className="fixed-height"
                 color="danger"
                 onClick={self.on_click_delete(todo)}
             >Delete</Button>
         </ListGroupItem>
     ); """)
from Component_py.stubs import require, __pragma__, document  # __:skip
from containers.AppContainer import AppContainer
from store import store

React = require("react")
ReactDOM = require("react-dom")
Provider = require("react-redux").Provider

app = __pragma__("xtrans", None, "{}", """ (
    <Provider store={store}>
        <AppContainer />
    </Provider>
); """)
ReactDOM.render(app, document.getElementById("root"))
예제 #27
0
파일: index.py 프로젝트: ylwb/Component.py
from Component_py.stubs import __pragma__, require, document  # __:skip
from app import App

React = require("react")
ReactDOM = require("react-dom")

app = __pragma__("xtrans", None, "{}", "<App />")
ReactDOM.render(app, document.getElementById("root"))
예제 #28
0
from Component_py.stubs import require, console, __pragma__  # __:skip
from Component_py.component import Component
from components.AlbumDetail import AlbumDetail

React = require("react")
ScrollView = require("react-native").ScrollView

__pragma__("skip")


def fetch(s):
    return None


__pragma__("noskip")


class AlbumList(Component):
    def __init__(self, props):
        super().__init__(props)
        self.state = {"albums": []}

    def componentDidMount(self):
        def parse(response):
            return response.json()

        def resolve(data):
            self.setState({"albums": data})

        def reject(error):
            console.log(error)