|
| 1 | +--- |
| 2 | +description: Summary of the conference and its instances throughout the years. |
| 3 | +--- |
| 4 | +<!DOCTYPE html> |
| 5 | +<html> |
| 6 | + |
| 7 | +<head> |
| 8 | + {% include head.html %} |
| 9 | + {% if page.mastodon %} |
| 10 | + <link rel="stylesheet" type="text/css" href="{{ "/static/css/mastodon.css" | prepend:site.baseurl_root }}"> |
| 11 | + <script> |
| 12 | + document.addEventListener("DOMContentLoaded", function () { |
| 13 | + fetch("{{page.mastodon}}.rss") |
| 14 | + .then(function (response) { |
| 15 | + return response.text(); |
| 16 | + }) |
| 17 | + .then(function (xmlText) { |
| 18 | + var parser = new DOMParser(); |
| 19 | + var xml = parser.parseFromString(xmlText, "text/xml"); |
| 20 | + var items = xml.querySelectorAll("item"); |
| 21 | + var feedContainer = document.getElementById("mastodon-feed"); |
| 22 | + var postLimit = 2; // Number of posts to display |
| 23 | + |
| 24 | + if (feedContainer) { |
| 25 | + for (var i = 0; i < postLimit && i < items.length; i++) { |
| 26 | + var item = items[i]; |
| 27 | + var post = item.querySelector("description").textContent; |
| 28 | + var link = item.querySelector("link").textContent; |
| 29 | + var pubDate = item.querySelector("pubDate").textContent; |
| 30 | + |
| 31 | + var feedItem = document.createElement("div"); |
| 32 | + feedItem.setAttribute("class", "timeline-item") |
| 33 | + feedItem.innerHTML = '<div class="timeline-content">' + post + '</div><a href="' + link + '">' + pubDate + ' by {{page.conference}}</a>'; |
| 34 | + feedContainer.appendChild(feedItem); |
| 35 | + } |
| 36 | + } |
| 37 | + }) |
| 38 | + .catch(function (error) { |
| 39 | + console.log("Error fetching Mastodon RSS feed:", error); |
| 40 | + }); |
| 41 | + }); |
| 42 | + </script> |
| 43 | + {% elsif page.twitter %} |
| 44 | + <style> |
| 45 | + #twitter-widget { |
| 46 | + width: 100%; |
| 47 | + } |
| 48 | + |
| 49 | + .twitter-timeline { |
| 50 | + width: 100% !important; |
| 51 | + } |
| 52 | + </style> |
| 53 | + {% endif %} |
| 54 | +</head> |
| 55 | + |
| 56 | +<body> |
| 57 | + {% include header.html %} |
| 58 | + {% if page.alt_name and page.alt_name != nil %} |
| 59 | + {% assign confs = site.data.archive | concat: site.data.conferences | concat: site.data.legacy | where_exp:"item","page.conference contains item.conference or item.conference contains page.conference or page.alt_name == item.alt_name or page.conference contains item.alt_name or item.conference contains page.alt_name" | sort: "year" | reverse %} |
| 60 | + {% else %} |
| 61 | + {% assign confs = site.data.archive | concat: site.data.conferences | concat: site.data.legacy | where_exp:"item","page.conference contains item.conference or item.conference contains page.conference" | sort: "year" | reverse %} |
| 62 | + {% endif %} |
| 63 | + <div class="container"> |
| 64 | + <div class="page-header" id="conf-title"> |
| 65 | + <div class="row"> |
| 66 | + <div class="col-sm-12"> |
| 67 | + {% include_cached breadcrumbs.html url=page.url %} |
| 68 | + <h1> |
| 69 | + <span id="conf-title-href" href="{{site.baseurl_root}}/summary/{{page.conference | slugify: 'latin'}}/">{{title}}</span> |
| 70 | + <span id="twitter-box"><a href="https://twitter.com/share" class="twitter-share-button" |
| 71 | + data-text="Conference instances for the #{{ page.conference }} conference!" data-show-count="false" |
| 72 | + style="font-size:13px;">Tweet</a> |
| 73 | + <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> |
| 74 | + </span> |
| 75 | + </h1> |
| 76 | + </div> |
| 77 | + </div> |
| 78 | + <div class="row"> |
| 79 | + <div class="col-sm-12" id="conf-subs"> |
| 80 | + <span id="conf-subs" title="Conference subjects"> |
| 81 | + {% assign subs = page.sub | split: "," %} |
| 82 | + {% for sub in subs %} |
| 83 | + <span class="{{sub}}-tag badge badge-light conf-sub conf-{{sub}}"> |
| 84 | + {% for tp in site.data.types %} |
| 85 | + {% if sub == tp.sub %} |
| 86 | + {{tp.name}} |
| 87 | + {% endif %} |
| 88 | + {% endfor %} |
| 89 | + </span> |
| 90 | + {% endfor %} |
| 91 | + </span> |
| 92 | + </div> |
| 93 | + </div> |
| 94 | + </div> |
| 95 | + <div id="page-content"> |
| 96 | + <div id="conf-key-facts" class="row"> |
| 97 | + <div class="col-12 col-md-6"> |
| 98 | + <div> |
| 99 | + <img src="/static/img/203-earth.svg" class="badge-link" alt="Earth Icon" width="16" height="16" /> |
| 100 | + <a id="conf-website" target="_blank" href="{{confs[0].link}}">{{confs[0].link}}</a> |
| 101 | + </div> |
| 102 | + {% if confs[0].twitter %} |
| 103 | + <div> |
| 104 | + <img src="/static/img/407-twitter.svg" class="badge-link" alt="Twitter icon" width="16" height="16" /> |
| 105 | + <a id="conf-twitter" target="_blank" href="https://twitter.com/{{confs[0].twitter}}">@{{confs[0].twitter}}</a> |
| 106 | + </div> |
| 107 | + {% endif %} |
| 108 | + {% if confs[0].mastodon %} |
| 109 | + <div> |
| 110 | + <img src="/static/img/407-mastodon.svg" class="badge-link" alt="Mastodon icon" width="16" height="16" /> |
| 111 | + <a id="conf-mastodon" target="_blank" href="{{confs[0].mastodon}}">Mastodon</a> |
| 112 | + </div> |
| 113 | + {% endif %} |
| 114 | + </div> |
| 115 | + <div class="col-12 col-md-6"> |
| 116 | + {% if confs[0].mastodon %} |
| 117 | + <!-- Mastodon timeline --> |
| 118 | + <div class="meta">Mastodon Posts by {{page.conference}}:</div> |
| 119 | + <div id="mastodon-feed"></div> |
| 120 | + <a href="{{ page.mastodon }}">See all Mastodon posts for {{ page.conference }}</a> |
| 121 | + {% elsif confs[0].twitter %} |
| 122 | + <!-- Twitter timeline --> |
| 123 | + <div id="twitter-widget"> |
| 124 | + <a class="twitter-timeline" href="https://twitter.com/{{page.twitter}}" data-tweet-limit=2>Tweets by |
| 125 | + {{confs[0].twitter}}</a> |
| 126 | + <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> |
| 127 | + </div> |
| 128 | + {% endif %} |
| 129 | + </div> |
| 130 | + </div> |
| 131 | + <hr /> |
| 132 | + <div id="all_confs"> |
| 133 | + {% for conf in confs %} |
| 134 | + {% assign subs = conf.sub | split: "," %} |
| 135 | + <div id="{{conf.conference | slugify: "latin"}}-{{conf.year}}" |
| 136 | + class="ConfItem {% for sub in subs %} {{sub | strip}}-conf {% endfor %}"> |
| 137 | + <div class="row conf-row"> |
| 138 | + <div class="col-6"> |
| 139 | + <span class="conf-title"> |
| 140 | + <a title="Deadline Details" |
| 141 | + href="{{site.baseurl}}/conference/{{conf.conference | slugify: "latin"}}-{{conf.year}}/">{{conf.conference}} {{conf.year}}</a> |
| 142 | + </span> |
| 143 | + <span class="conf-title-small"> |
| 144 | + <a title="Deadline Details" |
| 145 | + href="{{site.baseurl}}/conference/{{conf.conference | slugify: "latin"}}-{{conf.year}}/">{{conf.conference}} '{{conf.year | |
| 146 | + slice: -2, 3}}</a> |
| 147 | + </span> |
| 148 | + <span class="conf-title-icon"> |
| 149 | + <a title="Conference Website" href="{{conf.link}}" target="_blank"><img src="/static/img/203-earth.svg" |
| 150 | + class="badge-link" alt="Link to Conference Website" width="16" height="16" /></a> |
| 151 | + ​ |
| 152 | + </span> |
| 153 | + {% if conf.cfp_link %} |
| 154 | + <span class="conf-title-icon"> |
| 155 | + <a title="Call for Participation for {{conf.conference}}" href="{{conf.cfp_link}}" target="_blank"><img |
| 156 | + src="/static/img/035-file-text.svg" class="badge-link" |
| 157 | + alt="Link to Call for Participation for {{conf.conference}}" width="16" height="16" /></a> |
| 158 | + ​ |
| 159 | + </span> |
| 160 | + {% endif %} |
| 161 | + {% if conf.finaid %} |
| 162 | + <span class="conf-title-icon"> |
| 163 | + <a title="Financial Aid from {{conf.conference}}" href="{{conf.finaid}}" target="_blank"><img |
| 164 | + src="/static/img/066-lifebuoy.svg" class="badge-link" alt="Link to Sponsorship page of {{conf.conference}}" |
| 165 | + width="16" height="16" /></a> |
| 166 | + ​ |
| 167 | + </span> |
| 168 | + {% endif %} |
| 169 | + {% if conf.sponsor %} |
| 170 | + <span class="conf-title-icon"> |
| 171 | + <a title="Sponsorship Opportunity for {{conf.conference}}" href="{{conf.sponsor}}" target="_blank"><img |
| 172 | + src="/static/img/060-coin-dollar.svg" class="badge-link" alt="Link to Sponsorship page of {{conf.conference}}" |
| 173 | + width="16" height="16" /></a> |
| 174 | + ​ |
| 175 | + </span> |
| 176 | + {% endif %} |
| 177 | + {% if conf.mastodon %} |
| 178 | + <span class="conf-title-icon"> |
| 179 | + <a title="Mastodon for {{conf.conference}}" href="{{conf.mastodon}}" target="_blank"><img |
| 180 | + src="/static/img/407-mastodon.svg" class="badge-link" alt="Link to Conference Mastodon" width="16" |
| 181 | + height="16" /></a> |
| 182 | + ​ |
| 183 | + </span> |
| 184 | + {% elsif conf.twitter %} |
| 185 | + <span class="conf-title-icon"> |
| 186 | + <a title="Twitter for {{conf.conference}}" href="https://twitter.com/{{conf.twitter}}" target="_blank"><img |
| 187 | + src="/static/img/407-twitter.svg" class="badge-link" alt="Link to Conference Twitter" width="16" |
| 188 | + height="16" /></a> |
| 189 | + ​ |
| 190 | + </span> |
| 191 | + {% endif %} |
| 192 | + </div> |
| 193 | + <div class="col-6"> |
| 194 | + <span class="countdown-display conf-timer" |
| 195 | + data-deadline="{% if conf.cfp_ext %}{{ conf.cfp_ext }}{% else %}{{ conf.cfp }}{% endif %}" |
| 196 | + data-timezone="{% if conf.timezone %}{{ conf.timezone }}{% else %}UTC-12{% endif %}"> |
| 197 | + {% if conf.cfp == "TBA" or conf.cfp == "Cancelled" or conf.cfp == "None" %}{{ conf.cfp }}{% endif %} |
| 198 | + </span> |
| 199 | + <span class="countdown-display countdown-small conf-timer" |
| 200 | + data-deadline="{% if conf.cfp_ext %}{{ conf.cfp_ext }}{% else %}{{ conf.cfp }}{% endif %}" |
| 201 | + data-timezone="{% if conf.timezone %}{{ conf.timezone }}{% else %}UTC-12{% endif %}"> |
| 202 | + {% if conf.cfp == "TBA" or conf.cfp == "Cancelled" or conf.cfp == "None" %}{{ conf.cfp }}{% endif %} |
| 203 | + </span> |
| 204 | + </div> |
| 205 | + </div> |
| 206 | + <div class="row"> |
| 207 | + <div class="col-12 col-sm-6"> |
| 208 | + <div class="meta"> |
| 209 | + |
| 210 | + <span class="conf-date">{%- translate_file dates/pretty_dates.html start=conf.start end=conf.end -%}.</span> |
| 211 | + <span class="conf-place"> |
| 212 | + {% if conf.place == "Online" %} |
| 213 | + <a href="#">{{conf.place}}</a> |
| 214 | + {% else %} |
| 215 | + <a href="http://maps.google.com/?q={{conf.place}}">{{conf.place}}</a> |
| 216 | + {% if conf.extra_places %} |
| 217 | + {% for place in conf.extra_places %} |
| 218 | + & <a href="http://maps.google.com/?q={{place}}">{{place}}</a> |
| 219 | + {% endfor %} |
| 220 | + {% endif %} |
| 221 | + {% endif %} |
| 222 | + </span> |
| 223 | + </div> |
| 224 | + {% if conf.note %} |
| 225 | + <div class="note"> |
| 226 | + <b>Note: </b>{{conf.note}} |
| 227 | + </div> |
| 228 | + {% endif %} |
| 229 | + |
| 230 | + </div> |
| 231 | + <div class="col-12 col-sm-6"> |
| 232 | + <div class="deadline"> |
| 233 | + <div>Deadline: |
| 234 | + <span class="deadline-time">{{conf.cfp | date: "%A, %e %B %Y"}}</span> |
| 235 | + </div> |
| 236 | + </div> |
| 237 | + |
| 238 | + </div> |
| 239 | + </div> |
| 240 | + <div class="row"> |
| 241 | + <div class="col-6"> |
| 242 | + {% assign subs = conf.sub | split: "," %} |
| 243 | + {% for sub in subs %} |
| 244 | + <span title="Click to only show {{sub | strip}} conferences" data-sub="{{sub | strip}}" |
| 245 | + class="badge badge-light conf-sub {{sub | strip}}-tag"></span> |
| 246 | + {% endfor %} |
| 247 | + </div> |
| 248 | + <div class="col-6"> |
| 249 | + <div class="calendar"></div> |
| 250 | + </div> |
| 251 | + </div> |
| 252 | + <hr> |
| 253 | + </div> |
| 254 | + {% endfor %} |
| 255 | + </div> |
| 256 | + {% if page.place == confs[0].place and confs[0].place == confs[1].place %} |
| 257 | + <div class="row"> |
| 258 | + {% google_map zoom="6" width="100%" %} |
| 259 | + </div> |
| 260 | + {% endif %} |
| 261 | + </div> |
| 262 | +</div> |
| 263 | +<footer> |
| 264 | + {% include_cached footer.html %} |
| 265 | + {% assign title_length = page.title | size | minus: 27 %} |
| 266 | + {% assign sliced_title = page.title | slice: 0, title_length %} |
| 267 | + |
| 268 | + {% include_cached trademarks.html title=sliced_title %} |
| 269 | +</footer> |
| 270 | + <script type="text/javascript" charset="utf-8"> |
| 271 | + $(function () { |
| 272 | + |
| 273 | + var DateTime = luxon.DateTime; |
| 274 | + var today = DateTime.now(); |
| 275 | + |
| 276 | + {% include load_data.js %} |
| 277 | + {% include utils.js %} |
| 278 | + {% include multiselect_handler.js %} |
| 279 | + |
| 280 | + // Set time zone to local timezone on web copy |
| 281 | + $('.local-timezone').text(today.toFormat('z')); |
| 282 | + |
| 283 | + {% for conf in confs %} |
| 284 | + {% if conf.cfp_ext %} |
| 285 | + {% assign cfp = conf.cfp_ext %} |
| 286 | + {% else %} |
| 287 | + {% assign cfp = conf.cfp %} |
| 288 | + {% endif %} |
| 289 | + {% assign subs = conf.sub | split: "," %} |
| 290 | + {% for sub in subs %} |
| 291 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}} .{{sub | strip}}-tag').html("{% t 'subs.{{sub | strip}}' %}".toLocaleLowerCase("{{ site.lang }}")); |
| 292 | + {% endfor %} |
| 293 | + {% if cfp == "TBA" or cfp == "Cancelled" or cfp == "None" %} |
| 294 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}} .deadline-time').html("{{cfp}}"); |
| 295 | + {% if cfp == "TBA" %} |
| 296 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}}').attr("cfpDiff", Infinity); |
| 297 | + {% else %} |
| 298 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}}').attr("cfpDiff", -Infinity); |
| 299 | + {% endif %} |
| 300 | + {% else %} |
| 301 | + |
| 302 | + // Use specified timezone for deadlines if available else use AoE timezone |
| 303 | + {% if conf.timezone %} |
| 304 | + var cfpDate = DateTime.fromSQL("{{cfp}}", { zone: "{{conf.timezone}}" }); |
| 305 | + var confDate = DateTime.fromSQL("{{conf.start}}", { zone: "{{conf.timezone}}" }); |
| 306 | + {% else %} |
| 307 | + var cfpDate = DateTime.fromSQL("{{cfp}}", { zone: "UTC-12" }); |
| 308 | + var confDate = DateTime.fromSQL("{{conf.start}}", { zone: "UTC-12" }); |
| 309 | + {% endif %} |
| 310 | + |
| 311 | + // check if timezone is valid otherwise replace by system timezone |
| 312 | + if (cfpDate.invalid || confDate.invalid) { |
| 313 | + var cfpDate = DateTime.fromSQL("{{cfp}}"); |
| 314 | + var confDate = DateTime.fromSQL("{{conf.start}}"); |
| 315 | + console.log("Invalid timezone in {{conf.conference | slugify: "latin"}}-{{conf.year}}. Using system timezone instead."); |
| 316 | + } |
| 317 | + |
| 318 | + // Countdown timers are now handled by countdown-simple.js automatically |
| 319 | + |
| 320 | + // deadline in local timezone |
| 321 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}} .deadline-time').html(cfpDate.setZone('system').toLocaleString(DateTime.DATE_HUGE)); |
| 322 | + |
| 323 | + // add calendar button |
| 324 | + try { |
| 325 | + var myCalendar = createCalendarFromObject({ |
| 326 | + id: '{{conf.conference | slugify: "latin"}}-{{conf.year}}', |
| 327 | + title: '{{conf.conference}} {{conf.year}} deadline', |
| 328 | + start_date: cfpDate.toJSDate(), |
| 329 | + duration: 60, |
| 330 | + place: '{{conf.place}}', |
| 331 | + link: '{{conf.link}}' |
| 332 | + }); |
| 333 | + var calendarContainer = document.querySelector('#{{conf.conference | slugify: "latin"}}-{{conf.year}} .calendar'); |
| 334 | + if (calendarContainer) { |
| 335 | + calendarContainer.appendChild(myCalendar); |
| 336 | + } |
| 337 | + } catch (err) { |
| 338 | + var calendarContainer = document.querySelector('#{{conf.conference | slugify: "latin"}}-{{conf.year}} .calendar'); |
| 339 | + if (calendarContainer) { |
| 340 | + var errorMsg = document.createElement('p'); |
| 341 | + errorMsg.textContent = 'Calendar not available.'; |
| 342 | + calendarContainer.appendChild(errorMsg); |
| 343 | + } |
| 344 | + console.log("Error in cfp date."); |
| 345 | + } |
| 346 | + |
| 347 | + // check if date has passed, add 'past' class to it |
| 348 | + cfpDiff = cfpDate.diffNow("seconds"); |
| 349 | + confDiff = confDate.diffNow("seconds"); |
| 350 | + |
| 351 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}}').attr("cfpDiff", cfpDiff.toMillis()); |
| 352 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}}').attr("confDiff", confDiff.toMillis()); |
| 353 | + |
| 354 | + if (cfpDiff < 0) { |
| 355 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}}').addClass('pastcfp'); |
| 356 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}} .calendar').remove(); |
| 357 | + } |
| 358 | + |
| 359 | + if (confDiff < 0) { |
| 360 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}}').addClass('pastconf'); |
| 361 | + $('#{{conf.conference | slugify: "latin"}}-{{conf.year}} .calendar').remove(); |
| 362 | + } |
| 363 | + {% endif %} |
| 364 | + {% endfor %} |
| 365 | + |
| 366 | + // Sort conferences by CFP deadline |
| 367 | + $("#all_confs .ConfItem").sort(function (a, b) { |
| 368 | + return $(a).attr('cfpDiff') - $(b).attr('cfpDiff'); |
| 369 | + }).appendTo($("#all_confs")); |
| 370 | + }); |
| 371 | + </script> |
| 372 | + |
| 373 | + {% include sneks.html %} |
| 374 | +</body> |
| 375 | + |
| 376 | +</html> |
0 commit comments