diff --git a/src/components/footer/conference/2018/footer.jsx b/src/components/footer/conference/2018/footer.jsx index 1a08cc823..e049e676c 100644 --- a/src/components/footer/conference/2018/footer.jsx +++ b/src/components/footer/conference/2018/footer.jsx @@ -11,6 +11,68 @@ require('../footer.scss'); const ConferenceFooter = props => ( +
+

Sponsors

+ +
  • + + MIT Office of Digital Learning + +
  • +
  • + + Google + +
  • +
  • + + EPAM Systems + +
  • +
  • + + Intel + +
  • +
  • + + LEGO Foundation + +
  • + +
  • + + Siegel Family Endowment + +
  • +
  • + + Scratch Foundation + +
  • +
    +

    @@ -121,16 +183,28 @@ const ConferenceFooter = props => (
  • scratch foundation blog
  • +
  • + + scratch store + +
  • diff --git a/src/components/footer/conference/footer.scss b/src/components/footer/conference/footer.scss index 4553254d3..1d48eb06e 100644 --- a/src/components/footer/conference/footer.scss +++ b/src/components/footer/conference/footer.scss @@ -17,19 +17,14 @@ width: 100%; ul { - justify-content: space-between; + margin: 5px 0; align-items: center; + justify-content: space-between; img { margin: 20px 0; max-width: 180px; - max-height: 25px; - } - } - - .nostarch { - img { - max-height: 40px; + max-height: 30px; } } @@ -38,6 +33,12 @@ max-height: 50px; } } + + .siegel { + img { + max-height: 60px; + } + } } .scratch-links { diff --git a/src/components/navigation/conference/2018/navigation.jsx b/src/components/navigation/conference/2018/navigation.jsx index 8151ab3a1..1cfbee63e 100644 --- a/src/components/navigation/conference/2018/navigation.jsx +++ b/src/components/navigation/conference/2018/navigation.jsx @@ -33,12 +33,28 @@ const Navigation = () => (
  • diff --git a/src/redux/conference-schedule.js b/src/redux/conference-schedule.js index 224341c64..2dfdd93e3 100644 --- a/src/redux/conference-schedule.js +++ b/src/redux/conference-schedule.js @@ -88,7 +88,7 @@ module.exports.getDaySchedule = day => (dispatch => { cleanedRow[columns[i]] = cur[i]; } } - cleanedRow.uri = `/conference/2016/${cleanedRow.rowid}/details`; + cleanedRow.uri = `/conference/2018/${cleanedRow.rowid}/details`; const timeSlot = cleanedRow.Chunk + cleanedRow.Start; if (typeof prev.timeSlots[timeSlot] === 'undefined') { prev.timeSlots[timeSlot] = [cleanedRow]; diff --git a/src/routes.json b/src/routes.json index d4a6e8bb6..2e7d48134 100644 --- a/src/routes.json +++ b/src/routes.json @@ -27,20 +27,6 @@ "view": "communityblocks-interviews/communityblocks-interviews", "title": "Community Blocks Beta Tester Interviews" }, - { - "name": "conference-details-2016", - "pattern": "^/conference/2016/:id/details/?$", - "routeAlias": "/conference(?!/201[4-5])", - "view": "conference/2016/details/details", - "title": "Event Details" - }, - { - "name": "conference-expectations-2016", - "pattern": "^/conference/2016/expect/?$", - "routeAlias": "/conference(?!/201[4-5])", - "view": "conference/2016/expect/expect", - "title": "What to Expect" - }, { "name": "conference-index", "pattern": "^/conference/?(\\?.*)?$", @@ -58,25 +44,39 @@ "viewportWidth": "device-width" }, { - "name": "conference-index-2016", - "pattern": "^/conference/2016/?$", + "name": "conference-details-2018", + "pattern": "^/conference/2018/:id/details/?$", "routeAlias": "/conference(?!/201[4-5])", - "view": "conference/2016/index/index", + "view": "conference/2018/details/details", + "title": "Event Details" + }, + { + "name": "conference-expectations-2018", + "pattern": "^/conference/2018/expect/?$", + "routeAlias": "/conference(?!/201[4-5])", + "view": "conference/2018/expect/expect", + "title": "What to Expect" + }, + { + "name": "conference-index-2018", + "pattern": "^/conference/2018/?$", + "routeAlias": "/conference(?!/201[4-5])", + "view": "conference/2018/index/index", "title": "Scratch Conference", "viewportWidth": "device-width" }, { - "name": "conference-plan-2016", - "pattern": "^/conference/2016/plan/?$", + "name": "conference-plan-2018", + "pattern": "^/conference/2018/plan/?$", "routeAlias": "/conference(?!/201[4-5])", - "view": "conference/2016/plan/plan", + "view": "conference/2018/plan/plan", "title": "Plan Your Visit" }, { - "name": "conference-schedule-2016", - "pattern": "^/conference/2016/schedule/?$", + "name": "conference-schedule-2018", + "pattern": "^/conference/2018/schedule/?$", "routeAlias": "/conference(?!/201[4-5])", - "view": "conference/2016/schedule/schedule", + "view": "conference/2018/schedule/schedule", "title": "Conference Schedule" }, { diff --git a/src/views/conference/2018/details/details.jsx b/src/views/conference/2018/details/details.jsx new file mode 100644 index 000000000..1e78d25a3 --- /dev/null +++ b/src/views/conference/2018/details/details.jsx @@ -0,0 +1,114 @@ +const classNames = require('classnames'); +const connect = require('react-redux').connect; +const PropTypes = require('prop-types'); +const React = require('react'); +const render = require('../../../../lib/render.jsx'); + +const detailsActions = require('../../../../redux/conference-details.js'); + +const Page = require('../../../../components/page/conference/2018/page.jsx'); + +require('./details.scss'); + +class ConferenceDetails extends React.Component { + componentDidMount () { + let pathname = window.location.pathname.toLowerCase(); + if (pathname[pathname.length - 1] === '/') { + pathname = pathname.substring(0, pathname.length - 1); + } + const path = pathname.split('/'); + const detailsId = path[path.length - 2]; + this.props.dispatch(detailsActions.startGetDetails(detailsId)); + } + render () { + let backUri = '/conference/2018/schedule'; + if (!this.props.conferenceDetails.error && !this.props.conferenceDetails.fetching) { + backUri = `${backUri}#${this.props.conferenceDetails.Day}`; + } + const classes = classNames( + 'inner', + 'details', + {fetching: this.props.conferenceDetails.fetching} + ); + return ( +
    +
    + + ← Back to Full Schedule + +
    + {this.props.conferenceDetails.error ? [ +

    Agenda Item Not Found

    + ] : [ +

    {this.props.conferenceDetails.Title}

    , +
      + {this.props.conferenceDetails.fetching ? [] : [ +
    • + presenter icon + {this.props.conferenceDetails.Presenter} +
    • , +
    • + time icon + {this.props.conferenceDetails.Start} – {this.props.conferenceDetails.End} +
    • , +
    • + event icon + {this.props.conferenceDetails.Type} +
    • + ]} +
    , +
    +

    + {this.props.conferenceDetails.Description} +

    +
    , +
    + {this.props.conferenceDetails.fetching ? [] : [ + + ← Back to Full Schedule + + ]} +
    + ]} +
    + ); + } +} + +ConferenceDetails.propTypes = { + conferenceDetails: PropTypes.object, // eslint-disable-line react/forbid-prop-types + dispatch: PropTypes.func +}; + +const mapStateToProps = state => ({ + conferenceDetails: state.conferenceDetails +}); + +const ConnectedDetails = connect(mapStateToProps)(ConferenceDetails); + +render( + , + document.getElementById('app'), + {conferenceDetails: detailsActions.detailsReducer} +); diff --git a/src/views/conference/2018/details/details.scss b/src/views/conference/2018/details/details.scss new file mode 100644 index 000000000..68ab5db56 --- /dev/null +++ b/src/views/conference/2018/details/details.scss @@ -0,0 +1,56 @@ +@import "../../../../frameless"; + +#view { + @media only screen and (max-width: $tablet - 1) { + margin-top: 100px; + } + + @media only screen and (max-width: $desktop - 1) { + text-align: left; + } +} + +.details { + width: $cols8; + + &.inner { + margin-top: 2rem; + + &.fetching { + opacity: .6; + } + } + + .back { + margin: 1rem 0; + } + + ul { + &.logistics { + margin: .25rem 0 2.5rem; + padding-left: 0; + list-style-type: none; + } + + li { + margin: .25rem 0; + + img { + margin-right: .5rem; + width: 1rem; + height: 1rem; + } + } + } + + .description { + margin: 2rem 0; + } +} + +//8 columns +@media only screen and (max-width: $desktop - 1) { + .details { + width: 100%; + } +} diff --git a/src/views/conference/2018/expect/expect.jsx b/src/views/conference/2018/expect/expect.jsx new file mode 100644 index 000000000..29067a55f --- /dev/null +++ b/src/views/conference/2018/expect/expect.jsx @@ -0,0 +1,330 @@ +const React = require('react'); +const render = require('../../../../lib/render.jsx'); + +const FlexRow = require('../../../../components/flex-row/flex-row.jsx'); +const Page = require('../../../../components/page/conference/2018/page.jsx'); +const TitleBanner = require('../../../../components/title-banner/title-banner.jsx'); + +require('./expect.scss'); + +const ConferenceExpectations = () => ( +
    + +

    + What to Expect +

    +
    + expect-image +
    +
    +
    + +
    + +

    Mitchel Resnick

    +

    + Professor of Learning Research +
    + Founder, MIT Scratch Team +
    + MIT Media Lab +

    +
    +
    +

    Welcome to Scratch@MIT 2018!

    +

    + The theme of this year’s Scratch conference is “The Next{' '} + Generation”. In choosing this phrase, we had two different{' '} + meanings in mind. +

    +

    + The theme is motivated, in part, by our work on the next generation{' '} + of Scratch. We plan to release this new version, called Scratch 3.0,{' '} + later this year. Scratch 3.0 will expand how, what, and where children{' '} + can create and learn with Scratch. At the conference, you’ll have lots{' '} + of opportunities to experiment and explore with prototype versions of{' '} + Scratch 3.0. +

    +

    + But even as we develop the next generation of software, our top{' '} + priority is always the next generation of children. +

    +

    + We continue to be amazed and delighted by all of the ways that{' '} + children around the world are creating and collaborating with Scratch.{' '} + As we see the outpouring of creativity in the Scratch community, we{' '} + become even more committed to developing a next generation of Scratch{' '} + that is truly worthy of the next generation of children. +

    +

    + At this summer’s Scratch conference, we look forward to hearing{' '} + your stories of how children are creating and learning with Scratch,{' '} + and how you are supporting them. Let’s work together to expand{' '} + opportunities for all children, from all backgrounds, to imagine,{' '} + create, and collaborate — so they can shape the world of tomorrow. +

    +
    +
    +
    +
    +
    +
    +

    Keynotes

    +
    + +
    +
    + Thursday +
    +

    The Next Generation

    + Scratch Team Photo +

    + MIT Scratch Team +
    + Mitchel Resnick (moderator) +

    +

    + Join us for an inside look at the next generation of Scratch —{' '} + and a discussion of how Scratch is opening new opportunities for the next{' '} + generation of children around the world. +

    +
    +
    +
    + Friday +
    +

    Interdisciplinary Creativity

    + Austin Kleon Photo +

    + Austin Kleon +

    + + Karen Photo +

    + Karen Brennan (moderator) +

    +
    +
    +
    + Saturday +
    +

    Growing Up with Scratch

    + Isabella, JT, and Jocelyn Photo +

    + Isabella Bruyere, JT Galla, & Jocelyn Marencik +

    + + Ricarose Photo + +

    + Ricarose Roque (moderator) +

    + +

    + What is it like to grow up with Scratch? Three long-time Scratch community{' '} + members share how they have used Scratch to express their interests, to make{' '} + friends, and to lead initiatives in their communities. +

    +
    +
    +
    +
    +
    +
    +
    +

    Daily Schedules

    +
    +

    + July 25th Icon + Wednesday at 6:00p – Early check-in and opening reception +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + July 26th Icon +

    Thursday

    +
    + 8:30a +

    Breakfast (provided)

    +
    + 9:30a +

    Keynote Presentation

    +
    + 11:00a +

    Morning Workshops

    +
    + 12:30p +

    Lunch (provided)

    +
    + 2:00p +

    Afternoon Workshops

    +
    + 4:00p +

    Poster Sessions

    +
    + 7:00p +

    Self-organized dinner excursions

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + July 27th Icon +

    Friday

    +
    + 8:30a +

    Breakfast (provided)

    +
    + 9:30a +

    Keynote Presentation

    +
    + 11:00a +

    Morning Workshops, Panels, and Ignite Talks

    +
    + 12:00p +

    Lunch (provided)

    +
    + 1:30p +

    Early Afternoon Workshops, Panels, and Ignite Talks

    +
    + 3:00p +

    Late Afternoon Workshops, Panels, and Ignite Talks

    +
    + 4:30p +

    Poster Sessions

    +
    + 6:30p +

    Conference Dinner

    +
    + + + + + + + + + + + + + + + + + + + + + +
    + July 28th Icon +

    Saturday

    +
    + 8:30a +

    Breakfast (provided)

    +
    + 9:30a +

    Keynote Presentation

    +
    + 11:00a +

    Morning Workshops, Panels and Ignite Talks

    +
    + 12:00p +

    Lunch (provided) and Wrap-up Session

    +
    + 1:30p +

    End of Conference

    +
    +
    +
    +
    +); + +render(, document.getElementById('app')); diff --git a/src/views/conference/2018/expect/expect.scss b/src/views/conference/2018/expect/expect.scss new file mode 100644 index 000000000..b96f42b9e --- /dev/null +++ b/src/views/conference/2018/expect/expect.scss @@ -0,0 +1,197 @@ +@import "../../../../colors"; +@import "../../../../frameless"; + +.expect { + .flex-row { + align-items: flex-start; + justify-content: space-between; + + .card { + width: $cols4; + + p { + text-align: left; + } + } + } + + .profile { + img { + border-radius: 8em; + width: 80%; + } + + h4 { + margin-top: 1.2rem; + } + + @media only screen and (max-width: $tablet - 1) { + img { + width: 50%; + } + + h2 { + margin: 20px 0; + text-align: center; + font-size: 1.7rem; + } + } + + @media only screen and (max-width: $desktop - 1) { + .uneven { + flex-direction: column; + align-items: center; + } + } + } + + .keynote { + background-color: $ui-purple; + padding: 48px 0 64px 0; + width: 100%; + + h2, + h3, + b, + p { + color: $ui-white; + } + + h2 { + margin-bottom: 32px; + } + + h3 { + margin: 15px 0; + } + + img { + width: 100%; + + &.moderator { + width: 50%; + } + + } + + .date { + b { + border-radius: 20px; + background-color: $ui-orange; + padding: 5px 15px; + font-size: .85rem; + } + + margin: 15px 0; + } + + @media only screen and (max-width: $desktop - 1) { + .flex-row { + flex-direction: column; + align-items: center; + + .card { + margin-top: 25px; + text-align: left; + } + } + } + } + + .schedule { + .title { + display: flex; + margin-top: 20px; + justify-content: space-between; + align-items: center; + + h2 { + margin: 0; + } + } + + img { + width: 30px; + } + + .callout { + display: flex; + padding: .85rem; + align-items: center; + + img { + margin-right: 30px; + } + } + + table { + width: $cols4; + + th { + display: flex; + border-bottom: thin solid $ui-border; + padding: 2.5%; + align-items: center; + justify-content: flex-start; + + h3 { + margin: 0; + } + + img { + margin-right: 30px; + } + } + + td { + display: flex; + border-bottom: thin solid $ui-border; + padding: 2.5%; + height: 60px; + align-items: center; + + b { + width: 30%; + line-height: 1.7em; + } + + p { + margin: 0; + width: 70%; + } + } + } + + @media only screen and (max-width: $mobile - 1) { + .flex-row { + table { + width: 100%; + } + } + } + + @media only screen and (min-width: $mobile) and (max-width: $desktop - 1) { + .flex-row { + table { + width: $cols6; + } + } + } + + @media only screen and (max-width: $desktop - 1) { + .flex-row { + flex-direction: column; + align-items: center; + + table { + margin-top: 50px; + text-align: left; + + th { + justify-content: center; + } + } + } + } + } +} diff --git a/src/views/conference/2018/index/index.jsx b/src/views/conference/2018/index/index.jsx index f570bf665..98deb6a65 100644 --- a/src/views/conference/2018/index/index.jsx +++ b/src/views/conference/2018/index/index.jsx @@ -1,210 +1,82 @@ -const FormattedDate = require('react-intl').FormattedDate; -const FormattedMessage = require('react-intl').FormattedMessage; const React = require('react'); const render = require('../../../../lib/render.jsx'); +const Button = require('../../../../components/forms/button.jsx'); const FlexRow = require('../../../../components/flex-row/flex-row.jsx'); const Page = require('../../../../components/page/conference/2018/page.jsx'); const TitleBanner = require('../../../../components/title-banner/title-banner.jsx'); -require('../../../../components/forms/button.scss'); require('./index.scss'); const ConferenceSplash = () => ( -
    +

    - + Scratch: The Next Generation

    - + July 26-28, 2018 | Cambridge, MA, USA

    - + (Opening Reception on Evening of July 25)

    -

    - -

    +

    + Scratch@MIT is sold out! +

    +

    + + + +

    -
    -
    - -
    -

    - -

    - -

    - -

    -
    -
    -

    - {' '} - {/* eslint-disable react/jsx-sort-props */} - + +

    + - - -
    -

    -
    -

    - -

    -

    - -

    -
    -
    -

    - -

    -

    - -

    -
    -
    -

    - -

    -

    - -

    -
    -
    -

    - -

    -

    - - Boston Marriott Cambridge - - ), - holidayinnLink: ( - - Holiday Inn Express and Suites - - ), - residenceinnLink: ( - - Residence Inn - - ), - lemeridienLink: ( - - Le Meridien - - ) - }} - /> -

    -

    - - AC Hotel Boston Cambridge - - ), - doubletreeLink: ( - - DoubleTree by Hilton Hotel Boston - Downtown - - ), - hotelbostonLink: ( - - Hotel Boston - - ), - mitLink: ( - - - - ) - }} - /> -

    -
    -
    -

    - -

    -

    - - conference@scratch.mit.edu - - ) - }} - /> -

    -
    -
    -

    - -

    -

    - -

    -
    -
    -

    - -

    -

    - -

    -
    -
    -

    - -

    -

    - - conference@scratch.mit.edu - - ) - }} - /> -

    -
    -
    - - -
    -
    + Plan Your Visit + + +

    + Information on traveling, staying, and exploring around the Media Lab +

    +
    +
    +

    + + schedule + Schedule + +

    +

    + Full schedule of events and sessions +

    +
    + +
    ); diff --git a/src/views/conference/2018/index/index.scss b/src/views/conference/2018/index/index.scss index a93b44c9e..853dbf255 100644 --- a/src/views/conference/2018/index/index.scss +++ b/src/views/conference/2018/index/index.scss @@ -1,6 +1,11 @@ @import "../../../../colors"; @import "../../../../frameless"; +#view { + background-color: $ui-light-gray; + min-height: initial; +} + .index { .title-banner { margin-bottom: 0; @@ -17,13 +22,13 @@ text-align: center; color: $type-white; } - - h4 { - font-weight: normal; + + h1 { + font-size: 4rem; } p { - margin-top: 3rem; + margin-top: 1rem; &.sub-button { margin-top: 1rem; @@ -41,7 +46,9 @@ a { button { - + background-color: $ui-white; + color: $ui-blue; + font-size: 1rem; } } } @@ -69,46 +76,23 @@ } } + .flex-row { align-items: flex-start; - justify-content: space-between; - &.uneven { + div { + width: 28%; + text-align: center; + img { - width: 100%; + display: block; + margin: auto; + max-width: 125px; } @media only screen and (max-width: $tablet - 1) { - img { - width: 30%; - } - } - - @media only screen and (min-width: $tablet) and (max-width: $desktop - 1) { - img { - width: 70%; - } - } - } - } - - .info { - text-align: left; - - .conf2018-question { - margin-bottom: 0; - font-weight: 500; - } - - .conf2018-answer { - margin-top: 0; - } - - @media only screen and (max-width: $desktop - 1) { - .uneven { - .short { - width: 70%; - } + margin: .5rem; + width: 125px; } } } @@ -121,133 +105,3 @@ } } } - -.conf2018-panel { - border-bottom: 1px solid $ui-border; -} - -.conf2018-panel.mod-last { - border-bottom: 0; -} - -.flex-row.conf2018-panel-title { - justify-content: flex-start; - align-items: center; -} - -.conf2018-panel-desc { - margin: 2rem 0; -} - -td { - padding: .75rem 1.25rem; - vertical-align: top; -} - -.conf2018-panel-row-icon-image { - margin-top: .125rem; - width: 1rem; - height: 1rem; -} - - -.button.mod-register { - padding: .75em 3.5em; - - text-align: center; - color: $type-white; - font-size: 1rem; - font-weight: 500; -} - -@media only screen and (max-width: $mobile - 1) { - .index.mod-2018 { - text-align: left; - } - - .title-banner-image.mod-2018 { - height: 10rem; - } - - .conf2018-panel, - .title-banner-h3.mod-2018 { - width: initial; - } - - .conf2018-panel { - margin: auto .5rem; - } - - .title-banner-h3.mod-2018 { - margin: 1rem .5rem .5rem; - font-size: 1.1rem; - } - - .flex-row.conf2018-panel-title { - flex-direction: row; - } - - .conf2018-panel-title-text { - max-width: 14rem; - } - - .conf2018-panel-row > td { - padding: .75rem .375rem .75rem 0; - } -} - -@media only screen and (min-width: $mobile) and (max-width: $tablet - 1) { - .index.mod-2018 { - text-align: left; - } - - .title-banner-image.mod-2018 { - height: 10rem; - } - - .conf2018-panel, - .title-banner-h3.mod-2018 { - margin: auto .5rem ; - width: initial; - } - - .title-banner-h3.mod-2018 { - font-size: 1.1rem; - } - - .flex-row.conf2018-panel-title { - flex-direction: row; - } - - .conf2018-panel-title-text { - max-width: 18.75rem; - } - - .button.mod-register { - padding: .75em 2em; - } -} - -@media only screen and (min-width: $tablet) and (max-width: $desktop - 1) { - .index.mod-2018 { - text-align: left; - } - - .title-banner-image.mod-2018 { - height: 15rem; - } - - .conf2018-panel, - .title-banner-h3.mod-2018 { - margin: auto; - width: 38.75rem; - } - - .title-banner-h3.mod-2018 { - font-size: 1.1rem; - } - - .button.mod-register { - padding: .75em 1.25em; - } -} diff --git a/src/views/conference/2018/index/l10n.json b/src/views/conference/2018/index/l10n.json deleted file mode 100644 index 7b0893a45..000000000 --- a/src/views/conference/2018/index/l10n.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "conference-2018.title": "Scratch Conference 2018:", - "conference-2018.subtitle": "The Next Generation", - "conference-2018.dateDesc": "July 26-28, 2018 | Cambridge, MA, USA", - "conference-2018.dateDescMore": " (with opening reception the evening of July 25)", - "conference-2018.locationDetails": "MIT Media Lab, Cambridge, MA", - "conference-2018.seeBelow": "Learn more about conference dates and locations below.", - - "conference-2018.date": "When:", - "conference-2018.location": "Where:", - - "conference-2018.desc1": "Join us for the Scratch@MIT conference, a playful gathering of educators, researchers, developers, and other members of the worldwide Scratch community.", - "conference-2018.desc2": "We're planning a very participatory conference, with an entire day of hands-on workshops and lots of opportunities for peer-to-peer discussion and collaboration. The conference is intended primarily for adults who support young people learning Scratch.", - "conference-2018.registrationDate": "Registration opens March 1, 2018.", - "conference-2018.registerNow": "Register Now!", - "conference-2018.soldOut": "Scratch@MIT is sold out!", - "conference-2018.comingSoon": "Full event schedule coming soon", - "conference-2018.sessionDesc": "Interested in offering a session? We invite four types of proposals:", - "conference-2018.sessionItem1Title": "Poster/demonstration (90 minutes).", - "conference-2018.sessionItem1Desc": "Show off your project in an exhibition setting, alongside other presenters. You will be provided with display space for a poster and table space for a computer or handouts.", - "conference-2018.sessionItem2Title": "Hands-on workshop (90 minutes).", - "conference-2018.sessionItem2Desc": "Engage participants in hands-on activities, highlighting new ways of creating and collaborating with Scratch.", - "conference-2018.sessionItem3Title": "Interactive panel (60 minutes).", - "conference-2018.sessionItem3Desc": "Discuss a Scratch-related topic in a panel with three or more people. Your proposal should describe how you will engage the audience during the session.", - "conference-2018.sessionItem4Title": "Ignite talk (5 minutes).", - "conference-2018.sessionItem4Desc": "Share what you've been doing in a short, lively presentation.", - - "conference-2018.deadline": "Deadline for proposals is February 5, 2018.", - "conference-2018.proposal": " Submit Your Proposal", - "conference-2018.proposalDeadline": "Deadline for proposals: February 5", - "conference-2018.proposalAccept": "Notification of acceptance: March 1", - - "conference-2018.registrationTitle": "Registration:", - "conference-2018.registrationEarly": "Early Bird Registration (March 1-May 1): $200", - "conference-2018.registrationStandard": "Standard Registration (after May 1): $300", - - "conference-2018.questions": "Questions? Contact the Scratch Team at {emailLink}", - "conference-2018.questionsTitle": "Questions:", - "conference-2018.soldoutQ": "The conference is sold out. What can I do?", - "conference-2018.soldoutAns": "Scratch@MIT is sold out and at capacity. Regrettably, we are unable to add any additional guests. Please keep in mind that you must have registered on Eventbrite to attend Scratch@MIT; people who are not registered / do not have a ticket will not be able to attend the conference.", - "conference-2018.submissionQ": "I missed the submission deadline. Can I still submit a proposal for the conference?", - "conference-2018.submissionAns": "We are no longer accepting proposal submissions.", - "conference-2018.regQ": "I can only attend one day of the conference. Do you offer single-day registration?", - "conference-2018.regAns": "Sorry, we are not offering single-day tickets.", - "conference-2018.accommodationsQ": "I want to plan my visit. Do you have suggestions for accommodations?", - "conference-2018.accommodationsAns1": "Yes, MIT partners with several hotels in the area who offer discounts to participants attending MIT events, including: {marriottLink} (0.4 miles from the MIT Media Lab), {holidayinnLink} (1.6 miles), {residenceinnLink} (0.3 miles), and {lemeridienLink} (0.9 miles). To reserve a room at one of these hotels, call the hotel and request the MIT discount. Advance booking is strongly recommended, as summer is a busy time in Boston. All MIT rates are subject to availability.", - "conference-2018.accommodationsAns2": "If you are looking for additional accommodation options, we also recommend the {acLink} (7.1 miles), {doubletreeLink} (3.3 miles), and {hotelbostonLink} with the code MITSC2018 (5.3 mile). You might also consider home-share options such as Airbnb. Find an extended list of accommodations {mitLink}.", - "conference-2018.here": "here", - "conference-2018.letterQ": "Can I get a visa letter?", - "conference-2018.letterAns": "Yes. Contact us at {emailLink}, and we can email you a letter.", - "conference-2018.preConfQ": "In previous years, there was an event on Wednesday evening before the conference. Will you be hosting something similar this year?", - "conference-2018.preConfAns": "There will be an informal, optional reception the evening of Wednesday, July 25. Participants may register early at this time as well.", - "conference-2018.bringQ": "What should I bring?", - "conference-2018.bringAns": "Plan to bring your personal device (laptops are preferred) and power cord. Presenters should plan to bring all additional presentation materials (we will provide projectors and screens). Snacks and beverages will be available throughout the day.", - "conference-2018.moreQ": "Have additional questions?", - "conference-2018.moreAns": "Contact the Scratch Team at {emailLink}." -} diff --git a/src/views/conference/2018/plan/plan.jsx b/src/views/conference/2018/plan/plan.jsx new file mode 100644 index 000000000..6d81586e1 --- /dev/null +++ b/src/views/conference/2018/plan/plan.jsx @@ -0,0 +1,343 @@ +const bindAll = require('lodash.bindall'); +const React = require('react'); + +const Button = require('../../../../components/forms/button.jsx'); +const FlexRow = require('../../../../components/flex-row/flex-row.jsx'); +const TitleBanner = require('../../../../components/title-banner/title-banner.jsx'); + +const render = require('../../../../lib/render.jsx'); +const Page = require('../../../../components/page/conference/2018/page.jsx'); + + +require('./plan.scss'); + +class ConferencePlan extends React.Component { + constructor (props) { + super(props); + bindAll(this, [ + 'toggleQuestion' + ]); + this.state = { + dorm: false + }; + } + toggleQuestion (element) { + this.setState({element: !this.state[element]}); + } + render () { + return ( +
    + +

    + Plan Your Visit +

    +
    + plan-image +
    +
    +
    +
    + +
    +

    Lodging

    +

    + MIT partners with several hotels in the area who offer discounts to{' '} + participants attending MIT events, including: +

    + + +

    + + Boston Marriott Cambridge + +
    + (Kendall Square, 0.4 miles from the MIT Media Lab) +

    +

    + + Holiday Inn Express and Suites + +
    + (Lechmere Station, 1.6 miles) +

    +
    + +

    + + Residence Inn + +
    + (Kendall Square, 0.3 miles) +

    +

    + + Le Meridien + +
    + (between Central and Kendall Squares, 0.9 miles) +

    +
    +
    +

    + To reserve a room at one of these hotels, call the hotel and request the{' '} + "MIT discount". Advance booking is strongly recommended, as{' '} + summer is a busy time in Boston. All MIT rates are subject to availability. +

    +

    + If you are looking for additional accommodation options, we also recommend the {' '} + + AC Hotel Boston Cambridge + (7.1 miles from the MIT Media Lab),{' '} + + DoubleTree by Hilton Hotel Boston - Downtown + (3.3 miles),{' '} + and + Hotel Boston + with the code MITSC2018 (5.3 miles).{' '} +

    +

    + You might also consider home-share options such as Airbnb. +

    +
    +
    + Lodging Illustration +
    +
    +
    +
    + +
    +

    Transportation

    +

    + The MIT Media Lab is located{' '} + in Kendall Square, Cambridge, MA, a 5-minute walk from the Kendall/MIT stop of{' '} + MBTA Red Line subway. Cambridge is a bike-friendly, walkable city, and{' '} + public transportation is encouraged. The MBTA provides free services from{' '} + Boston Logan Airport to the South Station subway stop as well. +

    +

    + Learn about{' '} + + driving, parking, and public transportation options + around the MIT Media Lab. +

    +

    + + Public parking facilities + are available near campus for a fee. +

    +

    + Learn about additional{' '} + + transportation options in Cambridge and Boston + . +

    +
    +
    + Transportation Illustration +
    +
    +
    +
    +

    Exploring Cambridge

    + +
    +

    + Try some Scratch Team favorites for snacking and dining around the Lab: +

    +
      +
    • + A4 Pizza +
    • +
    • + Abigail’s +
    • +
    • + Bailey and Sage +
    • +
    • + Clover +
    • +
    • + Commonwealth +
    • +
    • + Legal Seafood +
    • +
    • + Meadhall +
    • +
    • + Sebastian’s +
    • +
    • + Tatte +
    • +
    • + Za +
    • +
    +
    +
    +
    + +
    +

    FAQ

    +
    +
    + The conference is sold out. What can I do? +
    +
    + Scratch@MIT is sold out and at capacity. Regrettably, we are{' '} + unable to add any additional guests. Please keep in mind that{' '} + you must have registered on Eventbrite to attend Scratch@MIT;{' '} + people who are not registered / do not have a ticket will not be{' '} + able to attend the conference. +
    + +
    + I missed the submission deadline. Can I still submit a proposal for{' '} + the conference? +
    +
    + We are no longer accepting proposal submissions. +
    + +
    + I can only attend one day of the conference. Do you offer single-day{' '} + registration? +
    +
    + Sorry, we are not offering single-day tickets. +
    + +
    + Can I receive a visa letter? +
    +
    + Yes. Contact us at{' '} + conference@scratch.mit.edu{' '} + and we can email you a letter. +
    + +
    + In previous years, there was an event on Wednesday evening before the{' '} + conference. Will you be hosting something similar this year? +
    +
    + There will be an informal, optional reception the evening of Wednesday,{' '} + July 25. Participants may register early at this time as well. +
    + +
    + What should I bring? +
    +
    + Plan to bring your personal device (laptops are preferred) and power cord.{' '} + Presenters should plan to bring all additional presentation materials{' '} + (we will provide projectors and screens). Snacks and beverages will be{' '} + available throughout the day. +
    +
    +
    +
    +

    Have Additional Questions?

    + + + +
    +
    +
    +
    +
    + ); + } +} + +render(, document.getElementById('app')); diff --git a/src/views/conference/2018/plan/plan.scss b/src/views/conference/2018/plan/plan.scss new file mode 100644 index 000000000..f1e4948ac --- /dev/null +++ b/src/views/conference/2018/plan/plan.scss @@ -0,0 +1,113 @@ +@import "../../../../colors"; +@import "../../../../frameless"; + +.plan { + section { + border-bottom: 2px solid $ui-border; + + &.last { + border-bottom: 0; + } + } + + .flex-row { + align-items: flex-start; + justify-content: space-between; + + &.uneven { + img { + width: 100%; + } + + @media only screen and (max-width: $tablet - 1) { + img { + width: 30%; + } + } + + @media only screen and (min-width: $tablet) and (max-width: $desktop - 1) { + img { + width: 70%; + } + } + } + } + + .lodging { + text-align: left; + + @media only screen and (max-width: $desktop - 1) { + .uneven { + .short { + display: none; + } + } + } + } + + .transportation { + .uneven { + align-items: center; + } + + @media only screen and (max-width: $desktop - 1) { + .flex-row { + flex-direction: column-reverse; + } + } + } + + .explore { + div { + margin-top: 30px; + } + + ul { + display: flex; + max-height: 23rem; + flex-flow: column wrap; + justify-content: flex-start; + } + + @media only screen and (max-width: $tablet - 1) { + ul { + max-height: 100%; + } + } + + @media only screen and (max-width: $desktop - 1) { + div { + text-align: left; + } + } + } + + .faq { + dl { + dt { + font-weight: bold; + } + + dd { + margin: 8px 0 32px 0; + } + } + + .short { + margin-top: 64px; + border: 2px solid $ui-border; + border-radius: 4px; + background-color: $ui-white; + padding: 16px; + text-align: center; + + h3 { + margin: 0; + } + + @media only screen and (max-width: $tablet - 1) { + margin-top: 0; + } + } + } +} diff --git a/src/views/conference/2018/schedule/schedule.jsx b/src/views/conference/2018/schedule/schedule.jsx new file mode 100644 index 000000000..d5f62db19 --- /dev/null +++ b/src/views/conference/2018/schedule/schedule.jsx @@ -0,0 +1,186 @@ +const bindAll = require('lodash.bindall'); +const classNames = require('classnames'); +const connect = require('react-redux').connect; +const PropTypes = require('prop-types'); +const React = require('react'); + +const scheduleActions = require('../../../../redux/conference-schedule.js'); + +const FlexRow = require('../../../../components/flex-row/flex-row.jsx'); +const SubNavigation = require('../../../../components/subnavigation/subnavigation.jsx'); +const TitleBanner = require('../../../../components/title-banner/title-banner.jsx'); + +const render = require('../../../../lib/render.jsx'); +const Page = require('../../../../components/page/conference/2018/page.jsx'); + + +require('./schedule.scss'); + +class ConferenceSchedule extends React.Component { + constructor (props) { + super(props); + bindAll(this, [ + 'handleScheduleChange', + 'renderChunkItems' + ]); + } + componentDidMount () { + const day = window.location.hash.substr(1) || 'thursday'; + this.handleScheduleChange(day); + } + handleScheduleChange (day) { + window.history.replaceState(history.state, '', `#${day}`); + this.props.dispatch(scheduleActions.startGetSchedule(day)); + } + renderChunkItems (timeSlot) { + return timeSlot.map(item => { + if (item.Presenter) { + return ( + +
    +

    {item.Title}

    + +

    + time icon + {item.Start} – {item.End} +

    +
    + +

    + presenter icon + {item.Presenter} +

    +

    + event icon + {item.Type} +

    +
    +
    +
    + ); + } + return ( +
    +

    {item.Title}

    + +

    {item.Start} – {item.End}

    +

    {item.Location}

    +
    +
    + ); + }); + } + render () { + const tabClasses = { + thursday: classNames({ + selected: (this.props.conferenceSchedule.day === 'thursday') + }), + friday: classNames({ + selected: (this.props.conferenceSchedule.day === 'friday') + }), + saturday: classNames({ + last: true, + selected: (this.props.conferenceSchedule.day === 'saturday') + }) + }; + const handleScheduleMethods = { + thursday: () => { + this.handleScheduleChange('thursday'); + }, + friday: () => { + this.handleScheduleChange('friday'); + }, + saturday: () => { + this.handleScheduleChange('saturday'); + } + }; + + return ( +
    + +

    + Schedule +

    +
    + +
  • + July 26th Icon + Thursday +
  • +
  • + July 27th Icon + Friday +
  • +
  • + July 28th Icon + Saturday +
  • + +
    + {this.props.conferenceSchedule.timeSlots.map(timeSlot => ([ +

    + {timeSlot.info.name} – {timeSlot.info.time} +

    , + this.renderChunkItems(timeSlot.items) + ]))} +
    + + ); + } +} + +ConferenceSchedule.propTypes = { + conferenceSchedule: PropTypes.object, // eslint-disable-line react/forbid-prop-types + dispatch: PropTypes.func +}; + +const mapStateToProps = state => ({ + conferenceSchedule: state.conferenceSchedule +}); + +const ConnectedSchedule = connect(mapStateToProps)(ConferenceSchedule); + +render( + , + document.getElementById('app'), + {conferenceSchedule: scheduleActions.scheduleReducer} +); diff --git a/src/views/conference/2018/schedule/schedule.scss b/src/views/conference/2018/schedule/schedule.scss new file mode 100644 index 000000000..aa4dc891d --- /dev/null +++ b/src/views/conference/2018/schedule/schedule.scss @@ -0,0 +1,150 @@ +@import "../../../../colors"; +@import "../../../../frameless"; + +.schedule { + .title-banner { + margin-bottom: 0; + } + + .sub-nav { + z-index: -1; + box-shadow: 0 2px 5px $ui-dark-gray; + padding: 0; + + li { + margin: 0; + border: 0; + border-top: 4px solid transparent; + border-left: 2px solid $active-gray; + border-radius: 0; + padding: .75em 1em; + color: $type-gray; + font-size: 1rem; + + &.last { + border-right: 2px solid $active-gray; + } + + &:hover, + &:active, + &.selected { + border-top: 4px solid $ui-orange; + border-left: 2px solid $active-gray; + box-shadow: none; + background-color: inherit; + } + + &.selected { + font-weight: 700; + } + } + + img { + margin-right: .5em; + width: 2em; + vertical-align: middle; + } + } + + .inner { + h2 { + &.breaking-title { + margin: 4rem 0 2rem 0; + border-bottom: 1px solid $ui-dark-gray; + width: 100%; + height: 1.7rem; // match the line-height for h2 + text-align: center; + } + + span { + background-color: $background-color; + padding: 0 10px; + } + } + + a { + &.item-url { + display: block; + + &:hover { + background-color: lighten($ui-blue, 40); + } + } + } + + .agenda-item { + margin: 1rem 0; + border: 1px solid $active-gray; + border-radius: 5px; + padding: 1.25rem 2.25rem; + + &.no-click { + background-color: $ui-gray; + } + + .flex-row { + margin: .5rem 0; + justify-content: space-between; + align-items: flex-start; + + p { + margin: 0; + width: 48%; + text-align: left; + } + + img { + margin-right: .5rem; + width: 1rem; + height: 1rem; + } + } + } + } + + @media only screen and (max-width: $mobile - 1) { + .sub-nav { + flex-wrap: nowrap; + } + + .inner { + h2 { + &.breaking-title { + margin: 2rem 0 2rem; + height: 100%; + font-size: 1.5rem; + } + } + + .agenda-item { + h3 { + font-size: 1.2rem; + } + } + } + } + + @media only screen and (max-width: $tablet - 1) { + .inner { + h2 { + &.breaking-title { + border-bottom: 0; + } + + span { + background-color: transparent; + padding: 0; + } + } + + .agenda-item { + .flex-row { + p { + margin: .5rem 0; + width: 100%; + } + } + } + } + } +} diff --git a/static/images/conference/expect/karen.jpg b/static/images/conference/expect/2016/karen.jpg similarity index 100% rename from static/images/conference/expect/karen.jpg rename to static/images/conference/expect/2016/karen.jpg diff --git a/static/images/conference/expect/mimi-nichole.jpg b/static/images/conference/expect/2016/mimi-nichole.jpg similarity index 100% rename from static/images/conference/expect/mimi-nichole.jpg rename to static/images/conference/expect/2016/mimi-nichole.jpg diff --git a/static/images/conference/expect/mitch.jpg b/static/images/conference/expect/2016/mitch.jpg similarity index 100% rename from static/images/conference/expect/mitch.jpg rename to static/images/conference/expect/2016/mitch.jpg diff --git a/static/images/conference/expect/2018/austin_kleon.png b/static/images/conference/expect/2018/austin_kleon.png new file mode 100644 index 000000000..7cd62204d Binary files /dev/null and b/static/images/conference/expect/2018/austin_kleon.png differ diff --git a/static/images/conference/expect/2018/growing-up-with-scratch-presenters.png b/static/images/conference/expect/2018/growing-up-with-scratch-presenters.png new file mode 100644 index 000000000..66d22c03d Binary files /dev/null and b/static/images/conference/expect/2018/growing-up-with-scratch-presenters.png differ diff --git a/static/images/conference/expect/2018/karen.jpg b/static/images/conference/expect/2018/karen.jpg new file mode 100755 index 000000000..62993f53f Binary files /dev/null and b/static/images/conference/expect/2018/karen.jpg differ diff --git a/static/images/conference/expect/2018/mitch.jpg b/static/images/conference/expect/2018/mitch.jpg new file mode 100644 index 000000000..db3171893 Binary files /dev/null and b/static/images/conference/expect/2018/mitch.jpg differ diff --git a/static/images/conference/expect/2018/ricarose.png b/static/images/conference/expect/2018/ricarose.png new file mode 100644 index 000000000..f59028109 Binary files /dev/null and b/static/images/conference/expect/2018/ricarose.png differ diff --git a/static/images/conference/footer/google.png b/static/images/conference/footer/2016/google.png similarity index 100% rename from static/images/conference/footer/google.png rename to static/images/conference/footer/2016/google.png diff --git a/static/images/conference/footer/intel.png b/static/images/conference/footer/2016/intel.png similarity index 100% rename from static/images/conference/footer/intel.png rename to static/images/conference/footer/2016/intel.png diff --git a/static/images/conference/footer/lego-foundation.png b/static/images/conference/footer/2016/lego-foundation.png similarity index 100% rename from static/images/conference/footer/lego-foundation.png rename to static/images/conference/footer/2016/lego-foundation.png diff --git a/static/images/conference/footer/mit-odl.png b/static/images/conference/footer/2016/mit-odl.png similarity index 100% rename from static/images/conference/footer/mit-odl.png rename to static/images/conference/footer/2016/mit-odl.png diff --git a/static/images/conference/footer/no-starch.png b/static/images/conference/footer/2016/no-starch.png similarity index 100% rename from static/images/conference/footer/no-starch.png rename to static/images/conference/footer/2016/no-starch.png diff --git a/static/images/conference/footer/scratch-foundation.png b/static/images/conference/footer/2016/scratch-foundation.png similarity index 100% rename from static/images/conference/footer/scratch-foundation.png rename to static/images/conference/footer/2016/scratch-foundation.png diff --git a/static/images/conference/footer/siegel-endowment.png b/static/images/conference/footer/2016/siegel-endowment.png similarity index 100% rename from static/images/conference/footer/siegel-endowment.png rename to static/images/conference/footer/2016/siegel-endowment.png diff --git a/static/images/conference/footer/2018/epam.png b/static/images/conference/footer/2018/epam.png new file mode 100644 index 000000000..ed8727d37 Binary files /dev/null and b/static/images/conference/footer/2018/epam.png differ diff --git a/static/images/conference/footer/2018/google.png b/static/images/conference/footer/2018/google.png new file mode 100644 index 000000000..b2591cf7e Binary files /dev/null and b/static/images/conference/footer/2018/google.png differ diff --git a/static/images/conference/footer/2018/intel.png b/static/images/conference/footer/2018/intel.png new file mode 100644 index 000000000..eb342a6cf Binary files /dev/null and b/static/images/conference/footer/2018/intel.png differ diff --git a/static/images/conference/footer/2018/lego-foundation.png b/static/images/conference/footer/2018/lego-foundation.png new file mode 100644 index 000000000..0bb0c3358 Binary files /dev/null and b/static/images/conference/footer/2018/lego-foundation.png differ diff --git a/static/images/conference/footer/2018/mit-odl.png b/static/images/conference/footer/2018/mit-odl.png new file mode 100644 index 000000000..6ef276d05 Binary files /dev/null and b/static/images/conference/footer/2018/mit-odl.png differ diff --git a/static/images/conference/footer/2018/scratch-foundation.png b/static/images/conference/footer/2018/scratch-foundation.png new file mode 100644 index 000000000..931de921c Binary files /dev/null and b/static/images/conference/footer/2018/scratch-foundation.png differ diff --git a/static/images/conference/footer/2018/siegel.png b/static/images/conference/footer/2018/siegel.png new file mode 100644 index 000000000..5e1c260d2 Binary files /dev/null and b/static/images/conference/footer/2018/siegel.png differ diff --git a/static/images/conference/footer/shopify-white.svg b/static/images/conference/footer/shopify-white.svg new file mode 100644 index 000000000..41aba96b0 --- /dev/null +++ b/static/images/conference/footer/shopify-white.svg @@ -0,0 +1,17 @@ + + + + + + diff --git a/static/images/conference/index/2018/title-banner.jpg b/static/images/conference/index/2018/title-banner.jpg index d93c73a59..c1d7b7c7c 100644 Binary files a/static/images/conference/index/2018/title-banner.jpg and b/static/images/conference/index/2018/title-banner.jpg differ diff --git a/static/images/conference/schedule/schedule.png b/static/images/conference/schedule/2016/schedule.png similarity index 100% rename from static/images/conference/schedule/schedule.png rename to static/images/conference/schedule/2016/schedule.png diff --git a/static/images/conference/schedule/2018/schedule.png b/static/images/conference/schedule/2018/schedule.png new file mode 100644 index 000000000..8703f9839 Binary files /dev/null and b/static/images/conference/schedule/2018/schedule.png differ diff --git a/static/images/conference/schedule/coming-soon.png b/static/images/conference/schedule/coming-soon.png deleted file mode 100644 index 3ac47fcd6..000000000 Binary files a/static/images/conference/schedule/coming-soon.png and /dev/null differ diff --git a/static/svgs/conference/expect/aug3-icon.svg b/static/svgs/conference/expect/aug3-icon.svg deleted file mode 100755 index f0b0d40a7..000000000 --- a/static/svgs/conference/expect/aug3-icon.svg +++ /dev/null @@ -1 +0,0 @@ -aug3-icon \ No newline at end of file diff --git a/static/svgs/conference/expect/aug4-icon.svg b/static/svgs/conference/expect/aug4-icon.svg deleted file mode 100755 index 7766e2ddb..000000000 --- a/static/svgs/conference/expect/aug4-icon.svg +++ /dev/null @@ -1 +0,0 @@ -aug4-icon \ No newline at end of file diff --git a/static/svgs/conference/expect/aug5-icon.svg b/static/svgs/conference/expect/aug5-icon.svg deleted file mode 100755 index b4aaafc54..000000000 --- a/static/svgs/conference/expect/aug5-icon.svg +++ /dev/null @@ -1 +0,0 @@ -aug5-icon \ No newline at end of file diff --git a/static/svgs/conference/expect/aug6-icon.svg b/static/svgs/conference/expect/aug6-icon.svg deleted file mode 100755 index 1a6b824a4..000000000 --- a/static/svgs/conference/expect/aug6-icon.svg +++ /dev/null @@ -1 +0,0 @@ -aug6-icon \ No newline at end of file diff --git a/static/svgs/conference/expect/july25-icon.svg b/static/svgs/conference/expect/july25-icon.svg new file mode 100644 index 000000000..d1121cd88 --- /dev/null +++ b/static/svgs/conference/expect/july25-icon.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/svgs/conference/expect/july26-icon.svg b/static/svgs/conference/expect/july26-icon.svg new file mode 100644 index 000000000..25f4e447f --- /dev/null +++ b/static/svgs/conference/expect/july26-icon.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/svgs/conference/expect/july27-icon.svg b/static/svgs/conference/expect/july27-icon.svg new file mode 100644 index 000000000..830cd8300 --- /dev/null +++ b/static/svgs/conference/expect/july27-icon.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/svgs/conference/expect/july28-icon.svg b/static/svgs/conference/expect/july28-icon.svg new file mode 100644 index 000000000..bf11fbdd0 --- /dev/null +++ b/static/svgs/conference/expect/july28-icon.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + +