示例#1
0
// Subroutes
function ForecastRoute({ name, date }) {
    if (externals.has(name)) {
        open(name)

        return <Redirect to="/forecasts" />
    }

    if (typeof date === 'string') {
        const parsed = parse(date)

        if (isValid(parsed)) {
            if (isPast(parsed)) {
                return <Redirect to={`/forecasts/archives/${name}/${date}`} />
            }

            return <Redirect to={`/forecasts/${name}`} />
        }
    }

    return <Forecast name={name} />
}
示例#2
0
export function view(ctrl, options) {
    var status  = "draft",
        publish = options.data.published_at || options.data.published,
        future  = isFuture(ctrl.start.date + " " + ctrl.start.time),
        locked  = config.locked;

    if(isFuture(publish)) {
        status = "scheduled";
    } else if(isPast(publish)) {
        status = "published";
    }

    return m("div", { class : css.head },
        m("div", { class : css.main },
            m("p", { class : css[status] },
                upper(status)
            ),
            m("div", { class : css.actions },
                ctrl.saving ?
                    "SAVING..." : m("button", {
                        // Attrs
                        class    : css.save,
                        title    : "Save your changes",
                        disabled : locked || null,

                        // Events
                        onclick : ctrl.save.bind(null, options)
                    },
                    m("svg", { class : css.icon },
                        m("use", { href : icons + "#save" })
                    ),
                    "Save"
                )
            ),
            m("div", { class : css.publishing },
                m("button", {
                        // Attrs
                        class : css.schedule,
                        title : "Schedule a publish",

                        // Events
                        onclick : ctrl.toggle.bind(null, undefined)
                    },
                    m("svg", { class : css.onlyIcon },
                        m("use", { href : icons + "#schedule" })
                    )
                ),
                m("button", {
                        // Attrs
                        class    : css.publish,
                        title    : future ? "Schedule publish" : "Publish now",
                        disabled : locked || null,

                        // Events
                        onclick : ctrl.publish
                    },
                    m("svg", { class : css.icon },
                        m("use", { href : icons + (future ? "#schedule" : "#publish") })
                    ),
                    future ? "Schedule" : "Publish"
                ),
                status === "draft" ?
                    null :
                    m("button", {
                            // Attrs
                            class    : css.unpublish,
                            title    : "Unpublish immediately",
                            disabled : locked || null,

                            // Events
                            onclick : ctrl.unpublish
                        },
                        m("svg", { class : css.icon },
                            m("use", { href : icons + "#remove" })
                        ),
                        "Unpublish"
                    )
            )
        ),
        ctrl.schedule ? m("div", { class : css.details },
            m("div", { class : css.start },
                m("p",
                    m("label", { for : "published_at_date" }, "Publish at")
                ),
                m("p",
                    m("input", {
                        class : css.date,
                        type  : "date",
                        id    : "published_at_date",
                        value : ctrl.start.date,

                        // Events
                        oninput : m.withAttr("value", ctrl.update.bind(ctrl, "start", "date"))
                    })
                ),
                m("p",
                    m("input", {
                        class : css.date,
                        type  : "time",
                        id    : "published_at_time",
                        value : ctrl.start.time,

                        // Events
                        oninput : m.withAttr("value", ctrl.update.bind(ctrl, "start", "time"))
                    })
                )
            ),
            m("div", { class : css.end },
                m("p",
                    m("label", { for : "unpublished_at_date" }, "Until (optional)")
                ),
                m("p",
                    m("input", {
                        class : css.date,
                        type  : "date",
                        id    : "unpublished_at_date",
                        value : ctrl.end.date,

                        // Events
                        oninput : m.withAttr("value", ctrl.update.bind(ctrl, "end", "date"))
                    })
                ),
                m("p",
                    m("input", {
                        class : css.date,
                        type  : "time",
                        id    : "unpublished_at_time",
                        value : ctrl.end.time,

                        // Events
                        oninput : m.withAttr("value", ctrl.update.bind(ctrl, "end", "time"))
                    })
                )
            )
        ) : null
    );
}
示例#3
0
                .map(function(data) {
                    var url      = "/content/" + ctrl.schema.key + "/" + data.key,
                        cssClass = css.item,
                        status;

                    if(data.published_at && current.indexOf(url) === 0) {
                        cssClass = css.activePublished;
                    } else if(current.indexOf(url) === 0) {
                        cssClass = css.active;
                    } else if(data.published_at) {
                        cssClass = css.published_at;
                    }

                    if(isFuture(data.published_at)) {
                        status = "scheduled: " + format(data.published_at, dateFormat);
                    } else if(isPast(data.published_at)) {
                        status = "published: " + format(data.published_at, dateFormat);
                    } else if(data.updated_at) {
                        status = "updated: " + format(data.updated_at, dateFormat);
                    } else {
                        // Prevents a flash of NaN/NaN/NaN on new creation
                        status = "updated:";
                    }

                    return m("li", { class : cssClass },
                        m("a", {
                                class  : css.anchor,
                                href   : prefix("/content/" + ctrl.schema.key + "/" + data.key),
                                config : m.route
                            },
                            m("h3", { class : css.heading }, name(ctrl.schema, data)),
                            m("p", { class : css.date },
                                status
                            )
                        ),
                        m("div", { class : css.actions },
                            ctrl.schema.preview ?
                                m("a", {
                                        class  : css.preview,
                                        title  : "Preview",
                                        href   : ctrl.schema.preview + data.key,
                                        target : "_blank"
                                    },
                                    m("svg", { class : css.icon },
                                        m("use", { href : icons + "#preview" })
                                    )
                                ) :
                                null,
                            m("button", {
                                    // Attrs
                                    class    : css.remove,
                                    title    : "Remove",
                                    disabled : locked || null,

                                    // Events
                                    onclick : ctrl.remove.bind(ctrl, data)
                                },
                                m("svg", { class : css.icon },
                                    m("use", { href : icons + "#remove" })
                                )
                            )
                        )
                    );
                })