{{/*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
*/}}

{{ define "main" }}
    <h2 class="page-header">Meetups</h2>
    <h5 class="meetups-page page-subtitle">
        Meetups are a great way for the community to meet face-to-face
    </h5>
    <div class="meetups">
        <script type="application/x-template" id="meetup-template">
            <div class="list-item">
                <div class="card">
                    <div class="box-event">
                        <p class="box-event__meetup--location" data-name="location"></p>
                        <p class="box-event__meetup--members">
                            {{ with resources.Get "icons/members-icon.svg" }}
                                {{ .Content | safeHTML }}
                            {{ end }}
                            <span data-name="members-count"></span>
                        </p>
                        <p class="box-event__meetup--next-meetup">
                            Next meetup:<br>
                            <span class="bodytext__medium--greyish-brown font-weight-500" data-name="date"></span>
                        </p>
                        <a href="">
                            <button class="btn-hollow btn-blue bodytext__medium--cerulean-blue">Learn more</button>
                        </a>
                    </div>
                </div>
            </div>
        </script>
        <div class="search-form">
            <input class="search-form__input" placeholder="Country or city" type="search" id="search" size="16">
            <button class="search-form__button">
                {{ with resources.Get "icons/search-icon.svg" }}
                    {{ .Content | safeHTML }}
                {{ end }}
            </button>
        </div>
        <div id="events-container" class="list-items">
            {{ range .Site.Data.meetups }}
                <div class="list-item">
                    {{ partial "boxes/event" . }}
                </div>
            {{ end }}
        </div>
        <div>
            {{ partial "buttons/button-filled" (dict "text" "Show more" "class" "more") }}
        </div>
    </div>
    <div class="video-section-container no-width-restriction">
        {{ partial "video-section" . }}
    </div>
    <div>
        <h4 class="page-header host-header">Want to host a meetup?</h4>
        <div class="text-with-icon-list">
            {{ partial "text-with-icon" (dict "logo_path" "icons/meetup-icon.svg" "header" "Plan a meetup" "text" "Create an event using facebook.com or meetup.com and invite some interesting speakers. Drinks and snacks are always nice.") }}
            {{ partial "text-with-icon" (dict "logo_path" "icons/intent-icon.svg" "header" "Voice your intent" "text" "In description of your event remember to say who is the target audience. Beginners, intermediates, developers or maybe architects?") }}
            {{ partial "text-with-icon" (dict "logo_path" "icons/date-icon.svg" "header" "Set up the date" "text" "Good date is essential for high frequency. Morning and evening times are good idea. ") }}
            {{ partial "text-with-icon" (dict "logo_path" "icons/promote-icon.svg" "header" "Promote it!" "text" "Talk about your meetup as loud as possible! Reach out to community and we can publish your event on [#announcements](https://apache-airflow.slack.com/messages/announcements) channel and tweet about it on [@ApacheAirflow](https://twitter.com/ApacheAirflow).") }}
        </div>
    </div>
{{ end }}
