// 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} /> }
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 ); }
.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" }) ) ) ) ); })