├── CNAME ├── ai-deadlines.ics ├── .gitignore ├── static ├── img │ ├── favicon.png │ ├── calendar.png │ ├── 072-location.svg │ ├── 084-calendar.svg │ ├── 269-info.svg │ ├── 033-books.svg │ └── 203-earth.svg ├── fonts │ ├── KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2 │ ├── KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2 │ ├── KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2 │ ├── KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2 │ ├── KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2 │ ├── KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2 │ ├── KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2 │ ├── KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2 │ ├── KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2 │ ├── KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2 │ ├── KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2 │ ├── KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2 │ └── KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2 ├── css │ ├── calendar.css │ ├── js-year-calendar.min.css │ └── deadlines.css └── js │ ├── store.min.js │ ├── jquery.countdown.min.js │ ├── ouical.min.js │ ├── popper.min.js │ ├── bootstrap-multiselect.min.js │ └── moment.min.js ├── Gemfile ├── _config.yml ├── .travis.yml ├── _includes ├── load_data.js ├── handle_url_retrieval.js ├── google_analytics.js ├── multiselect_handler.js ├── utils.js ├── head.html ├── header.html ├── footer.html └── calendar.js ├── _data └── types.yml ├── LICENSE ├── _layouts └── calendar.ics ├── utils └── process.py ├── README.md ├── calendar.html ├── _plugins └── data_page_generator.rb ├── _pages └── conference.html ├── Gemfile.lock └── index.html /CNAME: -------------------------------------------------------------------------------- 1 | aideadlin.es -------------------------------------------------------------------------------- /ai-deadlines.ics: -------------------------------------------------------------------------------- 1 | --- 2 | layout: calendar 3 | --- -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .bundle 3 | vendor 4 | .vscode 5 | .DS_Store 6 | .idea -------------------------------------------------------------------------------- /static/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/img/favicon.png -------------------------------------------------------------------------------- /static/img/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/img/calendar.png -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem "github-pages", group: :jekyll_plugins 4 | gem 'html-proofer' 5 | 6 | gem "webrick", "~> 1.7" 7 | -------------------------------------------------------------------------------- /static/fonts/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /static/fonts/KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paperswithcode/ai-deadlines/HEAD/static/fonts/KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2 -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | title: AI Conference Deadlines 2 | description: Countdowns to top CV/NLP/ML/Robotics/AI conference deadlines 3 | author: Abhishek Das 4 | 5 | domain: "aideadlin.es" 6 | baseurl: "" 7 | 8 | twitter_hashtag: machinelearning 9 | github_username: paperswithcode 10 | github_repo: ai-deadlines 11 | 12 | markdown: kramdown 13 | ga_id: 14 | 15 | include: ['_pages'] 16 | -------------------------------------------------------------------------------- /static/css/calendar.css: -------------------------------------------------------------------------------- 1 | .color-box { 2 | width: 16px; 3 | height: 16px; 4 | display: inline-block; 5 | background-color: #ccc; 6 | border-radius: 5px; 7 | } 8 | 9 | .deadline-text { 10 | text-decoration: underline; 11 | text-decoration-color: red; 12 | } 13 | 14 | @media only screen and (max-width: 550px) { 15 | #calendar-page { 16 | display: inline; 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.4 4 | script: 5 | - bundle exec jekyll build --future 6 | - bundle exec htmlproofer ./_site --only-4xx --check-favicon --check-html --url-ignore "/#.*/" --http-status-ignore "400,441" 7 | env: 8 | global: 9 | - NOKOGIRI_USE_SYSTEM_LIBRARIES=true 10 | branches: 11 | only: 12 | - gh-pages 13 | - /.*/ 14 | notifications: 15 | on_success: never 16 | on_failure: always 17 | -------------------------------------------------------------------------------- /_includes/load_data.js: -------------------------------------------------------------------------------- 1 | 2 | var subs = []; 3 | var _all_subs = []; 4 | // Get all subs 5 | var conf_type_data = {{ site.data.types | jsonify}}; 6 | var sub2name = {}; var name2sub = {}; 7 | for (var i = 0; i < conf_type_data.length; i++) { 8 | _all_subs[i] = conf_type_data[i]['sub']; 9 | sub2name[conf_type_data[i]['sub']] = conf_type_data[i]['name']; 10 | name2sub[conf_type_data[i]['name']] = conf_type_data[i]['sub']; 11 | } 12 | const all_subs = _all_subs; 13 | 14 | -------------------------------------------------------------------------------- /_includes/handle_url_retrieval.js: -------------------------------------------------------------------------------- 1 | // Get subjects from URL/Cache 2 | var url = new URL(window.location); 3 | subs = url.searchParams.get("sub"); 4 | if (subs == undefined) { 5 | subs = store.get("{{site.domain}}-subs"); 6 | } else { 7 | subs = subs.toUpperCase().split(","); 8 | } 9 | 10 | // Apply selections 11 | if (subs == undefined) { 12 | subs = all_subs; 13 | } 14 | $("#subject-select").multiselect("select", subs); 15 | update_filtering({ subs: subs, all_subs: all_subs }); 16 | -------------------------------------------------------------------------------- /static/img/072-location.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /static/img/084-calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /_includes/google_analytics.js: -------------------------------------------------------------------------------- 1 | (function (i, s, o, g, r, a, m) { 2 | i["GoogleAnalyticsObject"] = r; 3 | (i[r] = 4 | i[r] || 5 | function () { 6 | (i[r].q = i[r].q || []).push(arguments); 7 | }), 8 | (i[r].l = 1 * new Date()); 9 | (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]); 10 | a.async = 1; 11 | a.src = g; 12 | m.parentNode.insertBefore(a, m); 13 | })( 14 | window, 15 | document, 16 | "script", 17 | "https://www.google-analytics.com/analytics.js", 18 | "ga" 19 | ); 20 | ga("create", "{{ site.ga_id }}", "auto"); 21 | ga("send", "pageview"); 22 | -------------------------------------------------------------------------------- /_data/types.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Machine Learning 3 | sub: ML 4 | color: "#ffd300" 5 | - name: Computer Vision 6 | sub: CV 7 | color: "#deff0a" 8 | - name: Computer Graphics 9 | sub: CG 10 | color: "#0aefff" 11 | - name: Natural Language Proc 12 | sub: NLP 13 | color: "#147df5" 14 | - name: Robotics 15 | sub: RO 16 | color: "#0aff99" 17 | - name: Speech/SigProc 18 | sub: SP 19 | color: "#580aff" 20 | - name: Data Mining 21 | sub: DM 22 | color: "#be0aff" 23 | - name: Automated Planning 24 | sub: AP 25 | color: "#a432a8" 26 | - name: Knowledge Representation 27 | sub: KR 28 | color: "#32a855" 29 | - name: Human-Computer Interaction 30 | sub: HCI 31 | color: "#a83232" 32 | -------------------------------------------------------------------------------- /static/img/269-info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /static/img/033-books.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Abhishek Das 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /static/img/203-earth.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /_includes/multiselect_handler.js: -------------------------------------------------------------------------------- 1 | // Multi-select handler 2 | $("#subject-select").multiselect({ 3 | includeSelectAllOption: true, 4 | numberDisplayed: 5, 5 | onChange: function (option, checked, select) { 6 | var csub = $(option).val(); 7 | if (checked == true) { 8 | if (subs.indexOf(csub) < 0) subs.push(csub); 9 | } else { 10 | var idx = subs.indexOf(csub); 11 | if (idx >= 0) subs.splice(idx, 1); 12 | // In case a conf with multiple types (including this type) is wrongly hid, show all confs with at least one checked type. 13 | for (var i = 0; i < subs.length; i++) { 14 | // $('.' + subs[i] + '-conf').show(); 15 | } 16 | } 17 | update_filtering({ subs: subs, all_subs: all_subs }); 18 | }, 19 | onSelectAll: function (options) { 20 | subs = all_subs; 21 | update_filtering({ subs: subs, all_subs: all_subs }); 22 | }, 23 | onDeselectAll: function (options) { 24 | subs = []; 25 | update_filtering({ subs: subs, all_subs: all_subs }); 26 | }, 27 | buttonText: function (options, select) { 28 | if (options.length === 0) { 29 | return "None selected"; 30 | } else { 31 | var labels = []; 32 | options.each(function () { 33 | if ($(this).attr("value") !== undefined) { 34 | labels.push($(this).attr("value")); 35 | } else { 36 | labels.push($(this).html()); 37 | } 38 | }); 39 | return labels.join(", ") + ""; 40 | } 41 | }, 42 | buttonTitle: function (options, select) { 43 | return ""; 44 | }, 45 | }); 46 | -------------------------------------------------------------------------------- /_includes/utils.js: -------------------------------------------------------------------------------- 1 | // Borrowed from https://github.com/moment/moment-timezone/issues/167 2 | // Adds support for time zones 'UTC-12'..'UTC+12' 3 | function addUtcTimeZones() { 4 | // Moment.js uses the IANA timezone database, which supports generic time zones like 'Etc/GMT+1'. 5 | // However, the signs for these time zones are inverted compared to ISO 8601. 6 | // For more details, see https://github.com/moment/moment-timezone/issues/167 7 | for (let offset = -12; offset <= 12; offset++) { 8 | const posixSign = offset <= 0 ? "+" : "-"; 9 | const isoSign = offset >= 0 ? "+" : "-"; 10 | const link = `Etc/GMT${posixSign}${Math.abs( 11 | offset 12 | )}|UTC${isoSign}${Math.abs(offset)}`; 13 | moment.tz.link(link); 14 | } 15 | } 16 | 17 | function update_filtering(data) { 18 | var page_url = "{{site.baseurl}}"; 19 | store.set("{{site.domain}}-subs", data.subs); 20 | 21 | $(".confItem").hide(); 22 | for (const j in data.all_subs) { 23 | const s = data.all_subs[j]; 24 | const identifier = "." + s + "-conf"; 25 | if (data.subs.includes(s)) { 26 | $(identifier).show(); 27 | } 28 | } 29 | 30 | if (subs.length == 0) { 31 | window.history.pushState("", "", page_url); 32 | } else { 33 | window.history.pushState("", "", page_url + "/?sub=" + data.subs.join()); 34 | } 35 | } 36 | 37 | function createCalendarFromObject(data) { 38 | return createCalendar({ 39 | options: { 40 | class: "calendar-obj", 41 | 42 | // You can pass an ID. If you don't, one will be generated for you 43 | id: data.id, 44 | }, 45 | data: { 46 | // Event title 47 | title: data.title, 48 | 49 | // Event start date 50 | start: data.date, 51 | 52 | // Event duration 53 | duration: 60, 54 | }, 55 | }); 56 | } 57 | -------------------------------------------------------------------------------- /_layouts/calendar.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | METHOD:PUBLISH 3 | VERSION:2.0 4 | PRODID:-//{{ site.domain }}//ai-deadlines//EN 5 | X-PUBLISHED-TTL:PT1H 6 | {%- for conf in site.data.conferences -%} 7 | {% if conf.abstract_deadline and conf.abstract_deadline != "TBA" %} 8 | BEGIN:VEVENT 9 | SUMMARY:{{ conf.title }} {{ conf.year }} abstract deadline 10 | UID:{{ conf.id }}-abstract {% if conf.timezone contains "UTC" %} {% assign tz = conf.timezone | split: "UTC" %} {% if tz[1] contains "-" %} {% assign tz = tz[1] | replace: "-", "+" %} {% else if tz[1] contains "+" %} {% assign tz = tz[1] | replace: "+", "-" %} {% else assign tz = tz[1] %} {% endif %} 11 | ORGANIZER:aideadlin.es 12 | DTSTAMP:{{ site.time | date: "%Y%m%dT%H%M%SZ" }} 13 | DTSTART;TZID=Etc/GMT{{ tz }}:{{ conf.abstract_deadline | date: "%Y%m%dT%H%M%S" }} 14 | {% else %} 15 | ORGANIZER:aideadlin.es 16 | DTSTAMP:{{ site.time | date: "%Y%m%dT%H%M%SZ" }} 17 | DTSTART;TZID={{ conf.timezone }}:{{ conf.abstract_deadline | date: "%Y%m%dT%H%M%S" }} 18 | {% endif %}END:VEVENT{% endif %} 19 | {% if conf.deadline != "TBA" %}BEGIN:VEVENT 20 | SUMMARY:{{ conf.title }} {{ conf.year }} deadline 21 | UID:{{ conf.id }} {% if conf.timezone contains "UTC" %} {% assign tz = conf.timezone | split: "UTC" %} {% if tz[1] contains "-" %} {% assign tz = tz[1] | replace: "-", "+" %} {% else if tz[1] contains "+" %} {% assign tz = tz[1] | replace: "+", "-" %} {% else assign tz = tz[1] %} {% endif %} 22 | ORGANIZER:aideadlin.es 23 | DTSTAMP:{{ site.time | date: "%Y%m%dT%H%M%SZ" }} 24 | DTSTART;TZID=Etc/GMT{{ tz }}:{{ conf.deadline | date: "%Y%m%dT%H%M%S" }} 25 | {% else %} 26 | ORGANIZER:aideadlin.es 27 | DTSTAMP:{{ site.time | date: "%Y%m%dT%H%M%SZ" }} 28 | DTSTART;TZID={{ conf.timezone }}:{{ conf.deadline | date: "%Y%m%dT%H%M%S" }} 29 | {% endif %}END:VEVENT 30 | {% endif %} 31 | {%- endfor -%}END:VCALENDAR 32 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ site.title }} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /_includes/header.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{ site.domain }} 4 | was built and maintained from 2016-2021 by 5 | abhshkdz. It is now run by 6 | Papers With Code.
7 |
8 |
9 |
10 |
11 | 19 |
20 |
21 | -------------------------------------------------------------------------------- /static/js/store.min.js: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2010-2016 Marcus Westin */ 2 | (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.store = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;odocument.w=window'),u.close(),c=u.w.frames[0].document,t=c.createElement("div")}catch(l){t=i.createElement("div"),c=i.body}var f=function(e){return function(){var n=Array.prototype.slice.call(arguments,0);n.unshift(t),c.appendChild(t),t.addBehavior("#default#userData"),t.load(o);var i=e.apply(r,n);return c.removeChild(t),i}},d=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g"),s=function(e){return e.replace(/^d/,"___$&").replace(d,"___")};r.set=f(function(e,t,n){return t=s(t),void 0===n?r.remove(t):(e.setAttribute(t,r.serialize(n)),e.save(o),n)}),r.get=f(function(e,t,n){t=s(t);var i=r.deserialize(e.getAttribute(t));return void 0===i?n:i}),r.remove=f(function(e,t){t=s(t),e.removeAttribute(t),e.save(o)}),r.clear=f(function(e){var t=e.XMLDocument.documentElement.attributes;e.load(o);for(var r=t.length-1;r>=0;r--)e.removeAttribute(t[r].name);e.save(o)}),r.getAll=function(e){var t={};return r.forEach(function(e,r){t[e]=r}),t},r.forEach=f(function(e,t){for(var n,i=e.XMLDocument.documentElement.attributes,o=0;n=i[o];++o)t(n.name,r.deserialize(e.getAttribute(n.name)))})}try{var v="__storejs__";r.set(v,v),r.get(v)!=v&&(r.disabled=!0),r.remove(v)}catch(l){r.disabled=!0}return r.enabled=!r.disabled,r}(); 5 | }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 6 | },{}]},{},[1])(1) 7 | }); -------------------------------------------------------------------------------- /utils/process.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # coding: utf-8 3 | 4 | # Sort and Clean conference data. 5 | # It writes to `sorted_data.yml` and `cleaned_data.yml`, copy those to the conference.yml after screening. 6 | 7 | import yaml 8 | import datetime 9 | import sys 10 | from shutil import copyfile 11 | from builtins import input 12 | import pytz 13 | 14 | import pdb 15 | 16 | try: 17 | # for python newer than 2.7 18 | from collections import OrderedDict 19 | except ImportError: 20 | # use backport from pypi 21 | from ordereddict import OrderedDict 22 | 23 | try: 24 | from yaml import CLoader as Loader, CDumper as Dumper 25 | except ImportError: 26 | from yaml import Loader, Dumper 27 | from yaml.representer import SafeRepresenter 28 | _mapping_tag = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG 29 | 30 | 31 | def dict_representer(dumper, data): 32 | return dumper.represent_dict(data.iteritems()) 33 | 34 | 35 | def dict_constructor(loader, node): 36 | return OrderedDict(loader.construct_pairs(node)) 37 | 38 | 39 | Dumper.add_representer(OrderedDict, dict_representer) 40 | Loader.add_constructor(_mapping_tag, dict_constructor) 41 | 42 | Dumper.add_representer(str, SafeRepresenter.represent_str) 43 | 44 | 45 | def ordered_dump(data, stream=None, Dumper=yaml.Dumper, **kwds): 46 | class OrderedDumper(Dumper): 47 | pass 48 | 49 | def _dict_representer(dumper, data): 50 | return dumper.represent_mapping( 51 | yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, data.items()) 52 | 53 | OrderedDumper.add_representer(OrderedDict, _dict_representer) 54 | return yaml.dump(data, stream, OrderedDumper, **kwds) 55 | 56 | 57 | dateformat = '%Y-%m-%d %H:%M:%S' 58 | tba_words = ["tba", "tbd"] 59 | 60 | right_now = datetime.datetime.utcnow().replace( 61 | microsecond=0).strftime(dateformat) 62 | 63 | 64 | # Helper function for yes no questions 65 | def query_yes_no(question, default="no"): 66 | """Ask a yes/no question via input() and return their answer. 67 | 68 | "question" is a string that is presented to the user. 69 | "default" is the presumed answer if the user just hits . 70 | It must be "yes" (the default), "no" or None (meaning 71 | an answer is required of the user). 72 | 73 | The "answer" return value is True for "yes" or False for "no". 74 | """ 75 | valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} 76 | if default is None: 77 | prompt = " [y/n] " 78 | elif default == "yes": 79 | prompt = " [Y/n] " 80 | elif default == "no": 81 | prompt = " [y/N] " 82 | else: 83 | raise ValueError("invalid default answer: '%s'" % default) 84 | 85 | while True: 86 | sys.stdout.write(question + prompt) 87 | choice = input().lower() 88 | if default is not None and choice == '': 89 | return valid[default] 90 | elif choice in valid: 91 | return valid[choice] 92 | else: 93 | sys.stdout.write("Please respond with 'yes' or 'no' " 94 | "(or 'y' or 'n').\n") 95 | 96 | 97 | # Sort: 98 | 99 | with open("../_data/conferences.yml", 'r') as stream: 100 | try: 101 | data = yaml.load(stream, Loader=Loader) 102 | print("Initial Sorting:") 103 | for q in data: 104 | print(q["deadline"], " - ", q["title"]) 105 | print("\n\n") 106 | conf = [x for x in data if x['deadline'].lower() not in tba_words] 107 | tba = [x for x in data if x['deadline'].lower() in tba_words] 108 | 109 | # just sort: 110 | conf.sort(key=lambda x: pytz.utc.normalize(datetime.datetime.strptime(x['deadline'], dateformat).replace(tzinfo=pytz.timezone(x['timezone'].replace('UTC+', 'Etc/GMT-').replace('UTC-', 'Etc/GMT+'))))) 111 | print("Date Sorting:") 112 | for q in conf + tba: 113 | print(q["deadline"], " - ", q["title"]) 114 | print("\n\n") 115 | conf.sort(key=lambda x: pytz.utc.normalize(datetime.datetime.strptime(x['deadline'], dateformat).replace(tzinfo=pytz.timezone(x['timezone'].replace('UTC+', 'Etc/GMT-').replace('UTC-', 'Etc/GMT+')))).strftime(dateformat) < right_now) 116 | print("Date and Passed Deadline Sorting with tba:") 117 | for q in conf + tba: 118 | print(q["deadline"], " - ", q["title"]) 119 | print("\n\n") 120 | 121 | with open('sorted_data.yml', 'w') as outfile: 122 | for line in ordered_dump( 123 | conf + tba, 124 | Dumper=yaml.SafeDumper, 125 | default_flow_style=False, 126 | explicit_start=True).splitlines(): 127 | outfile.write(line.replace('- title:', '\n- title:')) 128 | outfile.write('\n') 129 | except yaml.YAMLError as exc: 130 | print(exc) 131 | -------------------------------------------------------------------------------- /static/js/jquery.countdown.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * The Final Countdown for jQuery v2.2.0 (http://hilios.github.io/jQuery.countdown/) 3 | * Copyright (c) 2016 Edson Hilios 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | * this software and associated documentation files (the "Software"), to deal in 7 | * the Software without restriction, including without limitation the rights to 8 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | * the Software, and to permit persons to whom the Software is furnished to do so, 10 | * subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in all 13 | * copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | */ 22 | !function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){"use strict";function b(a){if(a instanceof Date)return a;if(String(a).match(g))return String(a).match(/^[0-9]*$/)&&(a=Number(a)),String(a).match(/\-/)&&(a=String(a).replace(/\-/g,"/")),new Date(a);throw new Error("Couldn't cast `"+a+"` to a date object.")}function c(a){var b=a.toString().replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");return new RegExp(b)}function d(a){return function(b){var d=b.match(/%(-|!)?[A-Z]{1}(:[^;]+;)?/gi);if(d)for(var f=0,g=d.length;f1?c:d}var f=[],g=[],h={precision:100,elapse:!1,defer:!1};g.push(/^[0-9]*$/.source),g.push(/([0-9]{1,2}\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g.push(/[0-9]{4}([\/\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g=new RegExp(g.join("|"));var i={Y:"years",m:"months",n:"daysToMonth",d:"daysToWeek",w:"weeks",W:"weeksToMonth",H:"hours",M:"minutes",S:"seconds",D:"totalDays",I:"totalHours",N:"totalMinutes",T:"totalSeconds"},j=function(b,c,d){this.el=b,this.$el=a(b),this.interval=null,this.offset={},this.options=a.extend({},h),this.instanceNumber=f.length,f.push(this),this.$el.data("countdown-instance",this.instanceNumber),d&&("function"==typeof d?(this.$el.on("update.countdown",d),this.$el.on("stoped.countdown",d),this.$el.on("finish.countdown",d)):this.options=a.extend({},h,d)),this.setFinalDate(c),this.options.defer===!1&&this.start()};a.extend(j.prototype,{start:function(){null!==this.interval&&clearInterval(this.interval);var a=this;this.update(),this.interval=setInterval(function(){a.update.call(a)},this.options.precision)},stop:function(){clearInterval(this.interval),this.interval=null,this.dispatchEvent("stoped")},toggle:function(){this.interval?this.stop():this.start()},pause:function(){this.stop()},resume:function(){this.start()},remove:function(){this.stop.call(this),f[this.instanceNumber]=null,delete this.$el.data().countdownInstance},setFinalDate:function(a){this.finalDate=b(a)},update:function(){if(0===this.$el.closest("html").length)return void this.remove();var b,c=void 0!==a._data(this.el,"events"),d=new Date;b=this.finalDate.getTime()-d.getTime(),b=Math.ceil(b/1e3),b=!this.options.elapse&&b<0?0:Math.abs(b),this.totalSecsLeft!==b&&c&&(this.totalSecsLeft=b,this.elapsed=d>=this.finalDate,this.offset={seconds:this.totalSecsLeft%60,minutes:Math.floor(this.totalSecsLeft/60)%60,hours:Math.floor(this.totalSecsLeft/60/60)%24,days:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToWeek:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToMonth:Math.floor(this.totalSecsLeft/60/60/24%30.4368),weeks:Math.floor(this.totalSecsLeft/60/60/24/7),weeksToMonth:Math.floor(this.totalSecsLeft/60/60/24/7)%4,months:Math.floor(this.totalSecsLeft/60/60/24/30.4368),years:Math.abs(this.finalDate.getFullYear()-d.getFullYear()),totalDays:Math.floor(this.totalSecsLeft/60/60/24),totalHours:Math.floor(this.totalSecsLeft/60/60),totalMinutes:Math.floor(this.totalSecsLeft/60),totalSeconds:this.totalSecsLeft},this.options.elapse||0!==this.totalSecsLeft?this.dispatchEvent("update"):(this.stop(),this.dispatchEvent("finish")))},dispatchEvent:function(b){var c=a.Event(b+".countdown");c.finalDate=this.finalDate,c.elapsed=this.elapsed,c.offset=a.extend({},this.offset),c.strftime=d(this.offset),this.$el.trigger(c)}}),a.fn.countdown=function(){var b=Array.prototype.slice.call(arguments,0);return this.each(function(){var c=a(this).data("countdown-instance");if(void 0!==c){var d=f[c],e=b[0];j.prototype.hasOwnProperty(e)?d[e].apply(d,b.slice(1)):null===String(e).match(/^[$A-Z_][0-9A-Z_$]*$/i)?(d.setFinalDate.call(d,e),d.start()):a.error("Method %s does not exist on jQuery.countdown".replace(/\%s/gi,e))}else new j(this,b[0],b[1])})}}); -------------------------------------------------------------------------------- /static/css/js-year-calendar.min.css: -------------------------------------------------------------------------------- 1 | .calendar{padding:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr;overflow-x:hidden;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.calendar:after{clear:both;content:"";display:block}.calendar .calendar-rtl{direction:rtl}.calendar .calendar-rtl .calendar-rtl table tr td span{float:right}.calendar table{margin:auto;border-spacing:0}.calendar table td,.calendar table th{text-align:center;width:20px;height:20px;border:none;padding:4px 5px;font-size:12px}.calendar .calendar-header{width:100%;margin-bottom:20px;border:1px solid #ddd}.calendar .calendar-header table{width:100%}.calendar .calendar-header table th{font-size:22px;padding:5px 10px;cursor:pointer}.calendar .calendar-header table th:hover{background:#eee}.calendar .calendar-header table th.disabled,.calendar .calendar-header table th.disabled:hover{background:0 0;cursor:default;color:#fff}.calendar .calendar-header table th.next,.calendar .calendar-header table th.prev{width:20px}.calendar .calendar-header .year-title{font-weight:700;text-align:center;height:20px;width:auto}.calendar .calendar-header .year-neighbor{opacity:.4}@media (max-width:991px){.calendar .calendar-header .year-neighbor{display:none}}.calendar .calendar-header .year-neighbor2{opacity:.2}@media (max-width:767px){.calendar .calendar-header .year-neighbor2{display:none}}.calendar .months-container{width:100%;display:none;flex-wrap:wrap}.calendar .months-container .month-container{float:left;text-align:center;padding:0}.calendar .months-container .month-container.month-2{width:16.66666667%}.calendar .months-container .month-container.month-3{width:25%}.calendar .months-container .month-container.month-4{width:33.33333333%}.calendar .months-container .month-container.month-6{width:50%}.calendar .months-container .month-container.month-12{width:100%}.calendar table.month th.month-title{font-size:16px;padding-bottom:5px}.calendar table.month th.day-header{font-size:14px}.calendar table.month tr td,.calendar table.month tr th{padding:0}.calendar table.month tr td.hidden,.calendar table.month tr th.hidden{display:none}.calendar table.month td.week-number{cursor:default;font-weight:700;border-right:1px solid #eee;padding:5px}.calendar table.month td.day.round-left{-webkit-border-radius:8px 0 0 8px;-moz-border-radius:8px 0 0 8px;border-radius:8px 0 0 8px}.calendar table.month td.day.round-right{webkit-border-radius:0 8px 8px 0;-moz-border-radius:0 8px 8px 0;border-radius:0 8px 8px 0}.calendar table.month td.day .day-content{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:5px 6px}.calendar table.month td.new,.calendar table.month td.new:hover,.calendar table.month td.old,.calendar table.month td.old:hover{background:0 0;cursor:default}.calendar table.month td.disabled,.calendar table.month td.disabled:hover{color:#ddd}.calendar table.month td.disabled .day-content:hover,.calendar table.month td.disabled:hover .day-content:hover{background:0 0;cursor:default}.calendar table.month td.range .day-content{background:rgba(0,0,0,.2);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.calendar table.month td.range.range-start .day-content{border-top-left-radius:4px;border-bottom-left-radius:4px}.calendar table.month td.range.range-end .day-content{border-top-right-radius:4px;border-bottom-right-radius:4px}.calendar .calendar-loading-container{position:relative;text-align:center;min-height:200px}.calendar .calendar-loading-container .calendar-loading{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%)}.calendar .calendar-spinner{margin:20px auto;width:80px;text-align:center}.calendar .calendar-spinner>div{width:16px;height:16px;margin:5px;background-color:#333;border-radius:100%;display:inline-block;-webkit-animation:sk-bouncedelay 1s infinite ease-in-out both;animation:sk-bouncedelay 1s infinite ease-in-out both}.calendar .calendar-spinner>div.bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.calendar .calendar-spinner>div.bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}.calendar-context-menu,.calendar-context-menu .submenu{border:1px solid #ddd;background-color:#fff;box-shadow:2px 2px 5px rgba(0,0,0,.2);-webkit-box-shadow:2px 2px 5px rgba(0,0,0,.2);position:absolute;display:none}.calendar-context-menu .item{position:relative}.calendar-context-menu .item .content{padding:5px 10px;cursor:pointer;display:table;width:100%;white-space:nowrap;box-sizing:border-box}.calendar-context-menu .item .content:hover{background:#eee}.calendar-context-menu .item .content .text{display:table-cell}.calendar-context-menu .item .content .arrow{display:table-cell;padding-left:10px;text-align:right}.calendar-context-menu .item .submenu{top:-1px}.calendar-context-menu .item .submenu:not(.open-left){left:100%}.calendar-context-menu .item .submenu.open-left{right:100%}.calendar-context-menu .item:hover>.submenu{display:block}.table-striped .calendar table.month tr td,.table-striped .calendar table.month tr th{background-color:transparent}table.month td.day .day-content:hover{background:rgba(0,0,0,.2);cursor:pointer}@-webkit-keyframes sk-bouncedelay{0%,100%,80%{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes sk-bouncedelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## AI Deadlines [![Build Status](https://travis-ci.com/abhshkdz/ai-deadlines.svg?branch=gh-pages)](https://travis-ci.com/abhshkdz/ai-deadlines) 2 | 3 | Countdown timers to keep track of a bunch of CV/NLP/ML/RO conference deadlines. 4 | 5 | ## Contributing 6 | 7 | [![](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/images/0)](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/links/0)[![](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/images/1)](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/links/1)[![](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/images/2)](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/links/2)[![](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/images/3)](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/links/3)[![](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/images/4)](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/links/4)[![](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/images/5)](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/links/5)[![](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/images/6)](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/links/6)[![](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/images/7)](https://sourcerer.io/fame/abhshkdz/abhshkdz/ai-deadlines/links/7) 8 | 9 | Contributions are very welcome! 10 | 11 | To keep things minimal, I'm only looking to list top-tier conferences in AI as per [conferenceranks.com][6] and my judgement calls. Please feel free to maintain a separate fork if you don't see your sub-field or conference of interest listed. 12 | 13 | To add or update a deadline: 14 | - Fork the repository 15 | - Update `_data/conferences.yml` 16 | - Make sure it has the `title`, `year`, `id`, `link`, `deadline`, `timezone`, `date`, `place`, `sub` attributes 17 | + See available timezone strings [here](https://momentjs.com/timezone/). 18 | - Optionally add a `note` and `abstract_deadline` in case the conference has a separate mandatory abstract deadline 19 | - Optionally add `hindex` (refers to h5-index from [here](https://scholar.google.com/citations?view_op=top_venues&vq=eng)) 20 | - Example: 21 | ```yaml 22 | - title: BestConf 23 | year: 2022 24 | id: bestconf22 # title as lower case + last two digits of year 25 | full_name: Best Conference for Anything # full conference name 26 | link: link-to-website.com 27 | deadline: YYYY-MM-DD HH:SS 28 | abstract_deadline: YYYY-MM-DD HH:SS 29 | timezone: Asia/Seoul 30 | place: Incheon, South Korea 31 | date: September, 18-22, 2022 32 | start: YYYY-MM-DD 33 | end: YYYY-MM-DD 34 | paperslink: link-to-full-paper-list.com 35 | pwclink: link-to-papers-with-code.com 36 | hindex: 100.0 37 | sub: SP 38 | note: Important 39 | ``` 40 | - Send a pull request 41 | 42 | ## Forks & other useful listings 43 | 44 | - [geodeadlin.es][3] by @LukasMosser 45 | - [neuro-deadlines][4] by @tbryn 46 | - [ai-challenge-deadlines][5] by @dieg0as 47 | - [CV-oriented ai-deadlines (with an emphasis on medical images)][8] by @duducheng 48 | - [es-deadlines (Embedded Systems, Computer Architecture, and Cyber-physical Systems)][9] by @AlexVonB and @k0nze 49 | - [2019-2020 International Conferences in AI, CV, DM, NLP and Robotics][10] by @JackieTseng 50 | - [ccf-deadlines][11] by @ccfddl 51 | - [networking-deadlines (Computer Networking, Measurement)][12] by @andrewcchu 52 | - [ad-deadlines.com][13] by @daniel-bogdoll 53 | - [sec-deadlines.github.io/ (Security and Privacy)][14] by @clementfung 54 | - [pythondeadlin.es][15] by @jesperdramsch 55 | - [deadlines.openlifescience.ai (Healthcare domain conferences and workshops)][16] by @monk1337 56 | - [hci-deadlines.github.io (Human-Computer Interaction conferences)][17] by @makinteract 57 | - [ds-deadlines.github.io (Distributed Systems, Event-based Systems, Performance, and Software Engineering conferences)][18] by @ds-deadlines 58 | - [https://deadlines.cpusec.org/ (Computer Architecture-Security conferences)][19] by @hoseinyavarzadeh 59 | - [se-deadlines.github.io (Software engineering conferences)][20] by @sivanahamer and @imranur-rahman 60 | - [awesome-mlss (Machine Learning Summer Schools)][21] by @sshkhr and @gmberton 61 | 62 | ## License 63 | 64 | This project is licensed under [MIT][1]. 65 | 66 | It uses: 67 | 68 | - [IcoMoon Icons](https://icomoon.io/#icons-icomoon): [GPL](http://www.gnu.org/licenses/gpl.html) / [CC BY4.0](http://creativecommons.org/licenses/by/4.0/) 69 | 70 | [1]: https://abhshkdz.mit-license.org/ 71 | [2]: http://aideadlin.es/ 72 | [3]: https://github.com/LukasMosser/geo-deadlines 73 | [4]: https://github.com/tbryn/neuro-deadlines 74 | [5]: https://github.com/dieg0as/ai-challenge-deadlines 75 | [6]: http://www.conferenceranks.com/# 76 | [8]: https://m3dv.github.io/ai-deadlines/ 77 | [9]: https://ekut-es.github.io/es-deadlines/ 78 | [10]: https://jackietseng.github.io/conference_call_for_paper/conferences.html 79 | [11]: https://ccfddl.github.io/ 80 | [12]: https://noise-lab.net/networking-deadlines/ 81 | [13]: https://ad-deadlines.com/ 82 | [14]: https://sec-deadlines.github.io/ 83 | [15]: https://pythondeadlin.es/ 84 | [16]: https://deadlines.openlifescience.ai/ 85 | [17]: https://hci-deadlines.github.io/ 86 | [18]: https://ds-deadlines.github.io 87 | [19]: https://deadlines.cpusec.org/ 88 | [20]: https://se-deadlines.github.io/ 89 | [21]: https://awesome-mlss.com/ -------------------------------------------------------------------------------- /_includes/calendar.js: -------------------------------------------------------------------------------- 1 | 2 | // calendar data template 3 | var calendar_data = { 4 | clickDay: function (e) { 5 | if (e.events.length > 0) { 6 | for (var i in e.events) { 7 | window.open("{{site.baseurl}}/conference?id=" + e.events[i].abbreviation, "_self") 8 | } 9 | } 10 | }, 11 | mouseOnDay: function (e) { 12 | if (e.events.length > 0) { 13 | var content = ""; 14 | 15 | for (var i in e.events) { 16 | var headline_color = ""; 17 | var break_html = '
'; 18 | 19 | var location_html = ' ' + e.events[i].location; 20 | var date_html = ' ' + e.events[i].date; 21 | 22 | var badges_html = ""; 23 | var subs = e.events[i].subject.split(','); 24 | for (let i = 0; i < subs.length; i++) { 25 | var sub = subs[i].replace(" ", ""); 26 | badges_html += '' + sub + '' 27 | } 28 | if (e.events[i].hindex != "") { 29 | badges_html += '' + e.events[i].hindex + '' 30 | } 31 | 32 | if (i == e.events.length - 1) { 33 | break_html = ''; 34 | } 35 | 36 | 37 | if (e.events[i].id.endsWith("deadline")) { 38 | headline_color = 'deadline-text'; 39 | } else { 40 | } 41 | content += 42 | '
' + 43 | '
' + 44 | '' + e.events[i].name + '' + 45 | '
' + 46 | '
' + 47 | location_html + 48 | '
' + 49 | date_html + 50 | '
' + 51 | badges_html + 52 | '
' + 53 | break_html + 54 | '
'; 55 | } 56 | 57 | $(e.element).popover({ 58 | trigger: "manual", 59 | container: "body", 60 | html: true, 61 | content: content, 62 | }); 63 | 64 | $(e.element).popover("show"); 65 | } 66 | }, 67 | mouseOutDay: function (e) { 68 | if (e.events.length > 0) { 69 | $(e.element).popover("hide"); 70 | } 71 | }, 72 | customDayRenderer: function (cellContent, currentDate) { 73 | var today = new Date(); 74 | // render today 75 | if (today.getFullYear() === currentDate.getFullYear() && today.getMonth() === currentDate.getMonth() && today.getDate() === currentDate.getDate()) { 76 | cellContent.style = "background-color: gray;"; 77 | } 78 | }, 79 | dayContextMenu: function (e) { 80 | $(e.element).popover("hide"); 81 | }, 82 | dataSource: conf_list_all 83 | } 84 | function load_conference_list() { 85 | // Gather data 86 | var conf_list_all = []; 87 | {% for conf in site.data.conferences %} 88 | // add deadlines in red 89 | conf_list_all.push({ 90 | id: "{{conf.id}}-deadline", 91 | abbreviation: "{{conf.id}}", 92 | name: "{{conf.title}} {{conf.year}}", 93 | color: "red", 94 | location: "{{conf.place}}", 95 | date: "{{conf.date}}", 96 | hindex: "{{conf.hindex}}", 97 | subject: "{{conf.sub}}", 98 | startDate: Date.parse("{{conf.deadline}}"), 99 | endDate: Date.parse("{{conf.deadline}}"), 100 | }); 101 | 102 | // add Conferences in chosen color 103 | {% if conf.start != "" %} 104 | var color = "black"; 105 | {% assign conf_sub = conf.sub | split: ',' | first | strip %} // use first sub to choose color 106 | {% for type in site.data.types %} 107 | {% if conf_sub == type.sub %} 108 | color = "{{type.color}}"; 109 | {% endif %} 110 | {% endfor %} 111 | conf_list_all.push({ 112 | id: "{{conf.id}}-conference", 113 | abbreviation: "{{conf.id}}", 114 | name: "{{conf.title}} {{conf.year}}", 115 | color: color, 116 | location: "{{conf.place}}", 117 | date: "{{conf.date}}", 118 | hindex: "{{conf.hindex}}", 119 | subject: "{{conf.sub}}", 120 | startDate: Date.parse("{{conf.start}}"), 121 | endDate: Date.parse("{{conf.end}}"), 122 | }); 123 | {% endif %} 124 | {% endfor %} 125 | 126 | return conf_list_all; 127 | } 128 | 129 | function update_filtering(data) { 130 | store.set('{{site.domain}}-subs', data.subs); 131 | 132 | conf_list = conf_list_all.filter(v => { 133 | var commonValues = data.subs.filter(function (value) { 134 | return v.subject.indexOf(value) > -1; 135 | }); 136 | var subject_match = commonValues.length > 0; 137 | return subject_match; 138 | }); 139 | 140 | // rerender calendar 141 | calendar_data['dataSource'] = conf_list; // need to update only this 142 | calendar = new Calendar("#calendar-page", calendar_data); 143 | 144 | if (subs.length == 0) { 145 | window.history.pushState('', '', page_url); 146 | } else { 147 | window.history.pushState('', '', page_url + '/?sub=' + data.subs.join()); 148 | } 149 | } -------------------------------------------------------------------------------- /static/css/deadlines.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-size: 16px; 3 | line-height: 23px; 4 | font-weight: 300; 5 | -webkit-font-smoothing: subpixel-antialiased; 6 | } 7 | 8 | body *::selection { 9 | background: #e74c3c; 10 | color: #fff; 11 | } 12 | 13 | .container { 14 | max-width: 980px; 15 | } 16 | 17 | .top-strip { 18 | background-color: #333; 19 | height: 0.25em; 20 | width: 100%; 21 | } 22 | 23 | h1, 24 | h2, 25 | h3 { 26 | /* font-weight: 300; */ 27 | } 28 | 29 | h1 { 30 | margin: 0 0 10px; 31 | font-size: 30px; 32 | line-height: 35px; 33 | } 34 | 35 | h2 { 36 | margin: 0 0 10px; 37 | font-size: 25px; 38 | line-height: 30px; 39 | } 40 | 41 | h3 { 42 | margin: 0; 43 | font-size: 20px; 44 | line-height: 25px; 45 | } 46 | 47 | .page-header { 48 | margin-top: 20px; 49 | margin-bottom: 20px; 50 | } 51 | 52 | #conf-title.page-header { 53 | border-bottom: none; 54 | } 55 | 56 | #conf-full-name { 57 | margin-bottom: 5px; 58 | } 59 | 60 | p.authors { 61 | margin-bottom: 5px; 62 | color: #808080; 63 | font-size: 20px; 64 | } 65 | 66 | p.authors a { 67 | border-color: #dedede; 68 | } 69 | 70 | img { 71 | max-width: 100%; 72 | } 73 | 74 | p { 75 | text-align: justify; 76 | } 77 | 78 | a { 79 | text-decoration: none; 80 | border-bottom: 1px solid #ccc; 81 | color: inherit; 82 | } 83 | 84 | p.lead.authors a { 85 | border-bottom: none; 86 | } 87 | 88 | a:hover, 89 | a:focus { 90 | color: inherit; 91 | text-decoration: none; 92 | } 93 | 94 | .thumb { 95 | margin: 20px 0; 96 | border: 1px solid #808080; 97 | } 98 | 99 | pre { 100 | color: #333; 101 | font-size: 12px; 102 | line-height: 17px; 103 | } 104 | 105 | footer { 106 | font-size: 13px; 107 | } 108 | 109 | .conf-row { 110 | margin-bottom: 5px; 111 | } 112 | 113 | .conf-title, 114 | .conf-title-small, 115 | .conf-title-icon { 116 | font-size: 20px; 117 | font-weight: 400; 118 | 119 | } 120 | 121 | .conf-title-small { 122 | display: none; 123 | } 124 | 125 | .conf-title-icon { 126 | white-space: nowrap; 127 | font-size: 20px; 128 | } 129 | 130 | .deadline, 131 | .meta { 132 | font-size: 13px; 133 | } 134 | 135 | .note { 136 | font-size: 13px; 137 | margin-bottom: 5px; 138 | } 139 | 140 | .timer, 141 | .timer-small { 142 | font-size: 20px; 143 | font-weight: 400; 144 | } 145 | 146 | #confs { 147 | margin-top: 20px; 148 | } 149 | .timer-small { 150 | display: none; 151 | } 152 | 153 | #conf-timer { 154 | font-size: 72px; 155 | color: #444; 156 | margin-top: 40px; 157 | margin-bottom: 0.5em; 158 | } 159 | 160 | #conf-key-facts { 161 | margin-bottom: 10px; 162 | } 163 | 164 | .conf-sub { 165 | color: rgb(36, 101, 191); 166 | background: rgba(236, 240, 241, 0.7); 167 | font-size: 13px; 168 | padding: 3px 5px; 169 | margin-right: 8px; 170 | cursor: pointer; 171 | font-weight: 300; 172 | } 173 | 174 | .conf-sub::selection { 175 | background: #0097e6; 176 | } 177 | 178 | .checkbox input[type="checkbox"]:checked:after { 179 | background-color: #0097e6; 180 | border-color: #0097e6; 181 | } 182 | 183 | .checkbox input[type="checkbox"]:after, 184 | .checkbox input[type="checkbox"]:focus:after { 185 | border-color: #0097e6; 186 | } 187 | 188 | #sort-order-checkbox { 189 | text-align: right; 190 | font-size: 14px; 191 | padding-top: 5px; 192 | } 193 | 194 | #sort-order-checkbox input[type="checkbox"]:checked:after { 195 | background-color: #0097e6; 196 | border-color: #0097e6; 197 | } 198 | 199 | #sort-order-checkbox input[type="checkbox"]:after, 200 | #sort-order-checkbox input[type="checkbox"]:focus:after { 201 | border-color: #0097e6; 202 | } 203 | 204 | .filter-label { 205 | text-align: right; 206 | } 207 | 208 | 209 | .pwc-link { 210 | text-decoration: none; 211 | border: none; 212 | vertical-align: middle; 213 | } 214 | 215 | .pwc-link:hover { 216 | border-bottom: 1px solid #1198b2; 217 | } 218 | 219 | .icon-inner { 220 | width: .95em; 221 | height: .95em; 222 | display: inline-block; 223 | vertical-align: middle; 224 | position: relative; 225 | fill: currentColor; 226 | } 227 | 228 | .pwc-icon { 229 | color: #1198b2; 230 | } 231 | 232 | .twitter-github-icons { 233 | line-height: 16px; 234 | } 235 | 236 | #past-events-title { 237 | padding-bottom: 15px; 238 | border-bottom: 2px solid #bb2d3b; 239 | } 240 | 241 | .badge-link { 242 | vertical-align: middle; 243 | margin-bottom: 3px; 244 | margin-left: 2px; 245 | margin-right: 2px; 246 | } 247 | 248 | 249 | .badge-danger { 250 | background-color: #bb2d3b; 251 | } 252 | 253 | @media only screen and (max-width: 768px) { 254 | #conf-timer { 255 | font-size: 64px; 256 | } 257 | .calendar { 258 | margin-bottom: 10px; 259 | } 260 | .filter-label { 261 | text-align: left; 262 | } 263 | } 264 | 265 | @media only screen and (max-width: 576px) { 266 | #conf-timer { 267 | font-size: 36px; 268 | } 269 | .conf-place { 270 | display: none; 271 | } 272 | .conf-date { 273 | display: none; 274 | } 275 | .note { 276 | display: none; 277 | } 278 | .conf-row { 279 | margin-bottom: 7px; 280 | } 281 | .timer { 282 | display: none; 283 | } 284 | .timer-small { 285 | text-align: right; 286 | display: grid; 287 | } 288 | .conf-title { 289 | display: none; 290 | } 291 | .conf-title-small { 292 | display: inline; 293 | } 294 | 295 | } 296 | 297 | @media only screen and (max-width: 375px) { 298 | #conf-timer { 299 | font-size: 28px; 300 | } 301 | } 302 | 303 | .checkbox { 304 | font-size: 12px; 305 | } 306 | 307 | .calendar { 308 | font-size: 12px; 309 | margin-top: 3px; 310 | } 311 | 312 | .calendar img { 313 | margin-right: 5px; 314 | } 315 | 316 | .ind-cal { 317 | margin: 0 5px; 318 | } 319 | 320 | .calendar img { 321 | height: 20px; 322 | } 323 | -------------------------------------------------------------------------------- /calendar.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /calendar/ 3 | --- 4 | 5 | 6 | 7 | {% include head.html %} 8 | 9 | 10 | 11 | 12 | {% include header.html %} 13 |
14 |
15 |

Calendar Overview of Conference Deadlines and Dates

16 |
17 |
18 | Overview of deadlines and conference dates in a calendar. 19 | Also, countdowns to CV/NLP/ML/Robotics/AI conference deadlines. 20 |
21 |
22 |
23 | 24 |
25 | 26 | 27 |
28 |
29 |
30 |
31 |
32 | 35 |
36 |
37 | 49 |
50 |
51 |
52 |
53 |
54 | 55 |
56 |
57 | 58 | 107 |
108 |
109 |
110 |
111 | Deadlines 112 |
113 |
114 | Today 115 |
116 | {% for type in site.data.types %} 117 |
118 | {{ type.name }} 119 |
120 | {% endfor %} 121 |
122 |
123 |
124 | {% include footer.html %} 125 |
126 | 127 |
128 | 129 | 130 | 131 | 156 | 157 | -------------------------------------------------------------------------------- /_plugins/data_page_generator.rb: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | # Generate pages from individual records in yml files 3 | # (c) 2014-2016 Adolfo Villafiorita 4 | # Distributed under the conditions of the MIT License 5 | 6 | module Jekyll 7 | 8 | module Sanitizer 9 | # strip characters and whitespace to create valid filenames, also lowercase 10 | def sanitize_filename(name) 11 | if(name.is_a? Integer) 12 | return name.to_s 13 | end 14 | return name.tr( 15 | "ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÑñÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž", 16 | "AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz" 17 | ).downcase.strip.gsub(' ', '-').gsub(/[^\w.-]/, '') 18 | end 19 | end 20 | 21 | # this class is used to tell Jekyll to generate a page 22 | class DataPage < Page 23 | include Sanitizer 24 | 25 | # - site and base are copied from other plugins: to be honest, I am not sure what they do 26 | # 27 | # - `index_files` specifies if we want to generate named folders (true) or not (false) 28 | # - `dir` is the default output directory 29 | # - `data` is the data defined in `_data.yml` of the record for which we are generating a page 30 | # - `name` is the key in `data` which determines the output filename 31 | # - `template` is the name of the template for generating the page 32 | # - `extension` is the extension for the generated file 33 | def initialize(site, base, index_files, dir, data, name, template, extension) 34 | @site = site 35 | @base = base 36 | 37 | # @dir is the directory where we want to output the page 38 | # @name is the name of the page to generate 39 | # 40 | # the value of these variables changes according to whether we 41 | # want to generate named folders or not 42 | if data[name] == nil 43 | puts "error (datapage_gen). empty value for field '#{name}' in record #{data}" 44 | else 45 | filename = sanitize_filename(data[name]).to_s 46 | 47 | @dir = dir + (index_files ? "/" + filename + "/" : "") 48 | @name = (index_files ? "index" : filename) + "." + extension.to_s 49 | 50 | self.process(@name) 51 | self.read_yaml(File.join(base, '_layouts'), template + ".html") 52 | self.data['title'] = data[name] 53 | # add all the information defined in _data for the current record to the 54 | # current page (so that we can access it with liquid tags) 55 | self.data.merge!(data) 56 | end 57 | end 58 | end 59 | 60 | class DataPagesGenerator < Generator 61 | safe true 62 | 63 | # generate loops over _config.yml/page_gen invoking the DataPage 64 | # constructor for each record for which we want to generate a page 65 | 66 | def generate(site) 67 | # page_gen_dirs determines whether we want to generate index pages 68 | # (name/index.html) or standard files (name.html). This information 69 | # is passed to the DataPage constructor, which sets the @dir variable 70 | # as required by this directive 71 | index_files = site.config['page_gen-dirs'] == true 72 | 73 | # data contains the specification of the data for which we want to generate 74 | # the pages (look at the README file for its specification) 75 | data = site.config['page_gen'] 76 | if data 77 | data.each do |data_spec| 78 | index_files_for_this_data = data_spec['index_files'] != nil ? data_spec['index_files'] : index_files 79 | template = data_spec['template'] || data_spec['data'] 80 | name = data_spec['name'] 81 | dir = data_spec['dir'] || data_spec['data'] 82 | extension = data_spec['extension'] || "html" 83 | 84 | if site.layouts.key? template 85 | # records is the list of records defined in _data.yml 86 | # for which we want to generate different pages 87 | records = nil 88 | data_spec['data'].split('.').each do |level| 89 | if records.nil? 90 | records = site.data[level] 91 | else 92 | records = records[level] 93 | end 94 | end 95 | 96 | # apply filtering conditions: 97 | # - filter requires the name of a boolean field 98 | # - filter_condition evals a ruby expression 99 | records = records.select { |r| r[data_spec['filter']] } if data_spec['filter'] 100 | records = records.select { |record| eval(data_spec['filter_condition']) } if data_spec['filter_condition'] 101 | 102 | records.each do |record| 103 | site.pages << DataPage.new(site, site.source, index_files_for_this_data, dir, record, name, template, extension) 104 | end 105 | else 106 | puts "error (datapage_gen). could not find template #{template}" if not site.layouts.key? template 107 | end 108 | end 109 | end 110 | end 111 | end 112 | 113 | module DataPageLinkGenerator 114 | include Sanitizer 115 | 116 | # use it like this: {{input | datapage_url: dir}} 117 | # to generate a link to a data_page. 118 | # 119 | # the filter is smart enough to generate different link styles 120 | # according to the data_page-dirs directive ... 121 | # 122 | # ... however, the filter is not smart enough to support different 123 | # extensions for filenames. 124 | # 125 | # Thus, if you use the `extension` feature of this plugin, you 126 | # need to generate the links by hand 127 | def datapage_url(input, dir) 128 | extension = Jekyll.configuration({})['page_gen-dirs'] ? '/' : '.html' 129 | "#{dir}/#{sanitize_filename(input)}#{extension}" 130 | end 131 | end 132 | 133 | end 134 | 135 | Liquid::Template.register_filter(Jekyll::DataPageLinkGenerator) 136 | -------------------------------------------------------------------------------- /static/js/ouical.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var o=function(e){return e.toISOString().replace(/-|:|\.\d+/g,"")},t=function(e){return e.end?o(e.end):o(new Date(e.start.getTime()+6e4*e.duration))},n={google:function(e){var n=o(e.start),i=t(e);return'Google'},yahoo:function(e){var t=e.end?(e.end.getTime()-e.start.getTime())/6e4:e.duration,n=(t<600?"0"+Math.floor(t/60):Math.floor(t/60)+"")+(t%60<10?"0"+t%60:t%60+""),i=o(new Date(e.start-6e4*e.start.getTimezoneOffset()))||"";return'Yahoo!'},ics:function(e,n,i){var a=o(e.start),d=t(e);return''+i+""},ical:function(e){return this.ics(e,"icon-ical","iCal")},outlook:function(e){return this.ics(e,"icon-outlook","Outlook")}},i=function(){var e=document.createElement("style");return e.id="ouical-css",e.innerHTML="background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAAAQCAYAAACIoli7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0MzJCRDU2NUE1MDIxMUUyOTY1Q0EwNTkxNEJDOUIwNCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0MzJCRDU2NkE1MDIxMUUyOTY1Q0EwNTkxNEJDOUIwNCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjQzMkJENTYzQTUwMjExRTI5NjVDQTA1OTE0QkM5QjA0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjQzMkJENTY0QTUwMjExRTI5NjVDQTA1OTE0QkM5QjA0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+1Gcb3QAACh1JREFUeNrEWAtwVNUZ/u7d9yvZJBtMIC8eBhIKMkQIhqIBKirWwpSW0dahCir1gQhWg2XKjNRqR7AjQ6QjglBFRIW20KmC0KRYjRYMCZGHGEjIY0Oy2U32lX3d3Xv6nxuSbEJCQNvpn/n33POfxz33u9//uBGaBQFcMhgrpGYC6ddk+zfiZKgxsvOG4buJMGATNtzcq4l+WStbsGgpvOiELpgBWetGQGNCstSGkKwH1Ek04oVNFUZQsEAjedCg0iBRVivrP737CL+H8Na7f7lpRFa2cOfMqdUn9n3ARGc7NLEYJj62Qle6Z3/ZlATt82mINV4QVPV33HVXmK/1bRgPvst60vzXgJzZZ84UlOfnV1L/YvwhBxk7Q7quZ3zZLrvSivRy+PtR0Y8oUit2P7+aWm5TifxahErVPWfd/JRBQaNVjA2CIhsecEwIubHzB3+CQWNDNBCCyuiEC6NgpV3agkCszYWknBTInjAMFh20HAo1/QQFVM7Kw9aly7D1ze2iJEemhbu8Mzf++rkVNGMkaS7puKadb0yubGscp/Wa3rc0nNXVJ6RsJvsaUhmXt5oyZv36e4o//hi1tbUonjWrYNTs2QXxhywuL+8bmzevoG7dOu3gj8Po2MIVZGIcAw6TcPma0YV4JfXYEBiy/rbeqZcv+i1tEbIgagzgOAWMerT5MvDuXgfOH6vAsRoRgVAqHOp2TMrX4dYfFmLhVAHTRqtgkn0QQ3W0anZK+UsvzJe/qflxi2d04a3u9iJWdngUHd/I33KEyJEoqBE2mqCxGBCqq//p8idWvPh66Wa35ZlzUIcAnez3w+n14uwDD8CalYWo293vYePH+Fy+Jn58289HKu2rpbux9KF7EY4yfHroAHKL5iv2w/v2Ye7CBfBHBLRWHYJ54rzrCQcsDtx+YA4MAbyTqjsHLfLIrWWcChjwu/XHUVnuxrGDC2G2AdwnnKQNXwOLHnwFH4da8VnZBpg0ZqgcOgJMfKa+oqJkTDQMX3or3GF/khgJQ9TroDInQENq9rjItaNwqUWkeDoy0wtmTKYt/8XPpg4wZpADARTt2YOJx45Bo9PBlZEBy86dvQedPGkSxmZnw5SQAD6Xrxns6XWmYO+1x3e+n52D2WM3Y96w6F0F1F4wBwsBprBEv+0wIQO7Xj2HC0ercLbiEdi0zYgyAk1OgFUQccONwP5dyxELNMCQ5Cfq0YZpekgCpMZgENPvmIc5KckEm4gL7+9BrL0d1rFjYSGGGkePgyWX4qU1CQW3zVG5ztV+n25aQRpVGBojkFpWroTBaAQ/TpD6eput3xOZzWaKEjL43IEM3frHLZD8XtyQasXhdzbDbNTCJjN89tftvfaW8jd67fPyzP3jRBzThGGYKgwxrcceM2eyYDQNG9+8iAMfHsaRXY/AouV4qRAS9NCrmmkjKxBKwOQsM8X0iQhQkpK1IUiiBxq1+oLfaPJJXo8lEOyCJtGKScsfhTYpGYItFTUXG9DY2oqQw4UnFi5SGF/2zfkialQcUJ66V7PrFL5mQhwgXGRZZjv+8ALzBGPM4YuyA9s3sFMtIUW5/Xx7hNU0+RU7X7OM5bFlJxSQ2ODR+ArlIUy5HDjW04y+t5UrC9J5Vm5tYxkz/s5YF3WiESYzP2MRmbmp6+EH9vuZxM9N9iBz0ViUHbclsPuX/GJ2SUnJeX+LnUW6/MqzHTp6lL29dy9rtLewx598kpWsWcPuu+8+Fo1GlfG9+/bZn1q1Kk1JzHQSlUxHjBL7rkX5XL5mMBQks7WvY0vvZ3d4pW63j7Nfo/QDfYCbs3iGa6UORYMUP/92qhoYE4VsdNCoDEEyUYqnhBIDEmJ8hZYenKdmETH6468pWa3GJbvdHpKiTWpio4YSz7Hjx7Hu2Wdx9KOPkDkyHaWbNiE/Lw+LFy+makWlHCInOyc9MyOTJ3JRzcEhnCHHYtf0dCJtwrrp3Suvv/UGvO4uWBLN2L9/N7xeFzyedrS43+q1F401DQdaP+8Vrg1ppcRS3t+DDVQe9dhFqF3JiHTaIYaTyL2jYIld8IsGWCQRTB+GoCcgiU5q2QCD6KNFdQjrM1FVXeUYd+PYxg6nE+np6ZiYn48dO3Zg7dq1iEQi0Gq1KKeqh1h82T2BURkZQlpa2kzqHuJ1qEph3zCAPnVyDao8X6EgeQowANDlSx7mfo9t772NBQt+pmT5T468jgmFS5TxiqPvdderLO+Kfcnte2X71G9VzCvjulhfZaJFFjJSrCj7/DjCqgh0VN6EvSIsCUAXndxPvDxf1w5t4gjoY1qEnAYUfI8SpuokOlyIBIPhC06nSwHUZDIhNzcXoVAIRF7k5OQoLc83/E1eutSKpuYmRKToLZs3l6Zzhqo5QyPR6FVPfcJZg2lFN6Py80q+kbp2WzLwUEe/OZ2Ovr4YU11przqL/5XoRH3fvakwmjFdQtlH4/FC6VdY/dRNVKEYeMqAUR3EiSo9Vj56As2+MKwGMx68fySm5o+HSeDh6FLM7/fVu1zO3v24axcUFJDneZX+SkrgXq8PlZUnEKKKwGpNgM/rmaLT66Z1uzwxVBoC0JKqtTjpPtVd8sQ8YJKM+g3W5Ze/HpZ3f9r0kahk5aq41b/st1c8A3uYOQQrr0uyFwep+ujrG6HHip/YsPvlTmz+7dcovnMGZk4gt6cYKXQFMWuyAV98+iOcpfB6e9HzFBvvoS87J9XfynKZWFnfbLfzbwOlmpEkCauffhpejxenvjqF7KxsdPF6PByCz+PH6dOnKVRUW8eMGX1LN0MJ0MgQLl/dVgNb8YjuAj/qRFJhMmYVzkkv/3NZAV6jJPS4W/gWGLDr/Ua/mkQMzQM2T4dN58Q/DxbizuIKLLjtHax7bhqWPJaLVJMWPsXpzah3SWj3n6GQMKf7/wAmP6/65fq6uubGpsaOFntLuqPdARe5v4fY2emi1uej/OBmjjan3+V2tfi8voZYLFoXlaJnjQZDhZoJgi7GXX4IQPNN+Th9sJuhmKuCWM5w5pvqNiSLlfg/yhcLx2PEqA+QqhR/wX5jHirrdbIJI24A/lG9Gqt/U45NWz7Ey9s/BzQ3QpUQQajdjMS0NixdtQhFxTfTGzVQDc6rFJ/85Zdfem6ePr29dMuWdGKi5PV6Ov2BQFMoFL5INXqtx+upd3d21rXY7Y5AIMBvTp8FCJeXl/nVBKNFRa7Ag+xgsnH2K0p79+474Ix1IJWy5qgXuw40MPb8dwFkOFfngA0nY9zqQe1WnrQtzQRSBgwGEXs2zqUHmXvFvCCFLwP/Lw6PdhQLjVqFVIwSkCRFIgdPVp+sI66d7ury1Xrc7saGhkZ7OBziAEpxGotXYYQg/J4CReZwh3fdriqM2IQkrZN1mg/H9joY+4DMvSyt+eQlTL71uf8a+65VfvVw5nDh5Jpl58NHMK5FCT88diaSGi4DFYnTHvDkgTUyl/8IMABtKh8piZwIuwAAAABJRU5ErkJggg==);margin-right:.5em;content:' '}.icon-ical:before{background-position:-68px 0}.icon-outlook:before{}.icon-yahoo:before{background-position:-36px +4px}.icon-google:before{background-position:-52px 0}",e},a=function(e,o,t){var n=document.createElement("div");return n.innerHTML='',Object.keys(e).forEach(function(o){n.innerHTML+=''+e[o]+""}),n.className="add-to-calendar",void 0!==o&&(n.className+=" "+o),document.getElementById("ouical-css")||document.getElementsByTagName("head")[0].appendChild(i()),n.id=t,n};e.createCalendar=function(e){var o,t,i;if(void 0!==(o=e).data&&void 0!==o.data.start&&(void 0!==o.data.end||void 0!==o.data.duration))return a((i=e.data,{google:n.google(i),yahoo:n.yahoo(i),ical:n.ical(i),outlook:n.outlook(i)}),function(e){if(e.options&&e.options.class)return e.options.class}(e),(t=e).options&&t.options.id?t.options.id:Math.floor(1e6*Math.random()));console.log("Event details missing.")}}(this); -------------------------------------------------------------------------------- /_pages/conference.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /conference/ 3 | --- 4 | 5 | 6 | 7 | {% include head.html %} 8 | 9 | 10 | {% include header.html %} 11 |
12 | 29 |
30 |
31 |
32 | 33 | . 34 |
35 |
36 | 37 | . 38 |
39 |
40 | 41 | 42 |
43 | 48 | 53 |
54 |
55 |
56 | Download Conference deadline: 57 |
58 |
59 |
60 |
61 | Deadline in timezone from conference website: 62 |
63 |
64 | 65 |
66 |
67 | Deadline in your local America/New_York timezone: 68 |
69 |
70 | 71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | {% include footer.html %} 81 |
82 |
83 | 175 | 176 | 177 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | activesupport (6.0.4.8) 5 | concurrent-ruby (~> 1.0, >= 1.0.2) 6 | i18n (>= 0.7, < 2) 7 | minitest (~> 5.1) 8 | tzinfo (~> 1.1) 9 | zeitwerk (~> 2.2, >= 2.2.2) 10 | addressable (2.8.0) 11 | public_suffix (>= 2.0.2, < 5.0) 12 | coffee-script (2.4.1) 13 | coffee-script-source 14 | execjs 15 | coffee-script-source (1.11.1) 16 | colorator (1.1.0) 17 | commonmarker (0.23.4) 18 | concurrent-ruby (1.1.10) 19 | dnsruby (1.61.9) 20 | simpleidn (~> 0.1) 21 | em-websocket (0.5.3) 22 | eventmachine (>= 0.12.9) 23 | http_parser.rb (~> 0) 24 | ethon (0.15.0) 25 | ffi (>= 1.15.0) 26 | eventmachine (1.2.7) 27 | execjs (2.8.1) 28 | faraday (1.10.0) 29 | faraday-em_http (~> 1.0) 30 | faraday-em_synchrony (~> 1.0) 31 | faraday-excon (~> 1.1) 32 | faraday-httpclient (~> 1.0) 33 | faraday-multipart (~> 1.0) 34 | faraday-net_http (~> 1.0) 35 | faraday-net_http_persistent (~> 1.0) 36 | faraday-patron (~> 1.0) 37 | faraday-rack (~> 1.0) 38 | faraday-retry (~> 1.0) 39 | ruby2_keywords (>= 0.0.4) 40 | faraday-em_http (1.0.0) 41 | faraday-em_synchrony (1.0.0) 42 | faraday-excon (1.1.0) 43 | faraday-httpclient (1.0.1) 44 | faraday-multipart (1.0.3) 45 | multipart-post (>= 1.2, < 3) 46 | faraday-net_http (1.0.1) 47 | faraday-net_http_persistent (1.2.0) 48 | faraday-patron (1.0.0) 49 | faraday-rack (1.0.0) 50 | faraday-retry (1.0.3) 51 | ffi (1.15.5) 52 | forwardable-extended (2.6.0) 53 | gemoji (3.0.1) 54 | github-pages (226) 55 | github-pages-health-check (= 1.17.9) 56 | jekyll (= 3.9.2) 57 | jekyll-avatar (= 0.7.0) 58 | jekyll-coffeescript (= 1.1.1) 59 | jekyll-commonmark-ghpages (= 0.2.0) 60 | jekyll-default-layout (= 0.1.4) 61 | jekyll-feed (= 0.15.1) 62 | jekyll-gist (= 1.5.0) 63 | jekyll-github-metadata (= 2.13.0) 64 | jekyll-include-cache (= 0.2.1) 65 | jekyll-mentions (= 1.6.0) 66 | jekyll-optional-front-matter (= 0.3.2) 67 | jekyll-paginate (= 1.1.0) 68 | jekyll-readme-index (= 0.3.0) 69 | jekyll-redirect-from (= 0.16.0) 70 | jekyll-relative-links (= 0.6.1) 71 | jekyll-remote-theme (= 0.4.3) 72 | jekyll-sass-converter (= 1.5.2) 73 | jekyll-seo-tag (= 2.8.0) 74 | jekyll-sitemap (= 1.4.0) 75 | jekyll-swiss (= 1.0.0) 76 | jekyll-theme-architect (= 0.2.0) 77 | jekyll-theme-cayman (= 0.2.0) 78 | jekyll-theme-dinky (= 0.2.0) 79 | jekyll-theme-hacker (= 0.2.0) 80 | jekyll-theme-leap-day (= 0.2.0) 81 | jekyll-theme-merlot (= 0.2.0) 82 | jekyll-theme-midnight (= 0.2.0) 83 | jekyll-theme-minimal (= 0.2.0) 84 | jekyll-theme-modernist (= 0.2.0) 85 | jekyll-theme-primer (= 0.6.0) 86 | jekyll-theme-slate (= 0.2.0) 87 | jekyll-theme-tactile (= 0.2.0) 88 | jekyll-theme-time-machine (= 0.2.0) 89 | jekyll-titles-from-headings (= 0.5.3) 90 | jemoji (= 0.12.0) 91 | kramdown (= 2.3.2) 92 | kramdown-parser-gfm (= 1.1.0) 93 | liquid (= 4.0.3) 94 | mercenary (~> 0.3) 95 | minima (= 2.5.1) 96 | nokogiri (>= 1.13.4, < 2.0) 97 | rouge (= 3.26.0) 98 | terminal-table (~> 1.4) 99 | github-pages-health-check (1.17.9) 100 | addressable (~> 2.3) 101 | dnsruby (~> 1.60) 102 | octokit (~> 4.0) 103 | public_suffix (>= 3.0, < 5.0) 104 | typhoeus (~> 1.3) 105 | html-pipeline (2.14.1) 106 | activesupport (>= 2) 107 | nokogiri (>= 1.4) 108 | html-proofer (3.19.3) 109 | addressable (~> 2.3) 110 | mercenary (~> 0.3) 111 | nokogiri (~> 1.12) 112 | parallel (~> 1.3) 113 | rainbow (~> 3.0) 114 | typhoeus (~> 1.3) 115 | yell (~> 2.0) 116 | http_parser.rb (0.8.0) 117 | i18n (0.9.5) 118 | concurrent-ruby (~> 1.0) 119 | jekyll (3.9.2) 120 | addressable (~> 2.4) 121 | colorator (~> 1.0) 122 | em-websocket (~> 0.5) 123 | i18n (~> 0.7) 124 | jekyll-sass-converter (~> 1.0) 125 | jekyll-watch (~> 2.0) 126 | kramdown (>= 1.17, < 3) 127 | liquid (~> 4.0) 128 | mercenary (~> 0.3.3) 129 | pathutil (~> 0.9) 130 | rouge (>= 1.7, < 4) 131 | safe_yaml (~> 1.0) 132 | jekyll-avatar (0.7.0) 133 | jekyll (>= 3.0, < 5.0) 134 | jekyll-coffeescript (1.1.1) 135 | coffee-script (~> 2.2) 136 | coffee-script-source (~> 1.11.1) 137 | jekyll-commonmark (1.4.0) 138 | commonmarker (~> 0.22) 139 | jekyll-commonmark-ghpages (0.2.0) 140 | commonmarker (~> 0.23.4) 141 | jekyll (~> 3.9.0) 142 | jekyll-commonmark (~> 1.4.0) 143 | rouge (>= 2.0, < 4.0) 144 | jekyll-default-layout (0.1.4) 145 | jekyll (~> 3.0) 146 | jekyll-feed (0.15.1) 147 | jekyll (>= 3.7, < 5.0) 148 | jekyll-gist (1.5.0) 149 | octokit (~> 4.2) 150 | jekyll-github-metadata (2.13.0) 151 | jekyll (>= 3.4, < 5.0) 152 | octokit (~> 4.0, != 4.4.0) 153 | jekyll-include-cache (0.2.1) 154 | jekyll (>= 3.7, < 5.0) 155 | jekyll-mentions (1.6.0) 156 | html-pipeline (~> 2.3) 157 | jekyll (>= 3.7, < 5.0) 158 | jekyll-optional-front-matter (0.3.2) 159 | jekyll (>= 3.0, < 5.0) 160 | jekyll-paginate (1.1.0) 161 | jekyll-readme-index (0.3.0) 162 | jekyll (>= 3.0, < 5.0) 163 | jekyll-redirect-from (0.16.0) 164 | jekyll (>= 3.3, < 5.0) 165 | jekyll-relative-links (0.6.1) 166 | jekyll (>= 3.3, < 5.0) 167 | jekyll-remote-theme (0.4.3) 168 | addressable (~> 2.0) 169 | jekyll (>= 3.5, < 5.0) 170 | jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) 171 | rubyzip (>= 1.3.0, < 3.0) 172 | jekyll-sass-converter (1.5.2) 173 | sass (~> 3.4) 174 | jekyll-seo-tag (2.8.0) 175 | jekyll (>= 3.8, < 5.0) 176 | jekyll-sitemap (1.4.0) 177 | jekyll (>= 3.7, < 5.0) 178 | jekyll-swiss (1.0.0) 179 | jekyll-theme-architect (0.2.0) 180 | jekyll (> 3.5, < 5.0) 181 | jekyll-seo-tag (~> 2.0) 182 | jekyll-theme-cayman (0.2.0) 183 | jekyll (> 3.5, < 5.0) 184 | jekyll-seo-tag (~> 2.0) 185 | jekyll-theme-dinky (0.2.0) 186 | jekyll (> 3.5, < 5.0) 187 | jekyll-seo-tag (~> 2.0) 188 | jekyll-theme-hacker (0.2.0) 189 | jekyll (> 3.5, < 5.0) 190 | jekyll-seo-tag (~> 2.0) 191 | jekyll-theme-leap-day (0.2.0) 192 | jekyll (> 3.5, < 5.0) 193 | jekyll-seo-tag (~> 2.0) 194 | jekyll-theme-merlot (0.2.0) 195 | jekyll (> 3.5, < 5.0) 196 | jekyll-seo-tag (~> 2.0) 197 | jekyll-theme-midnight (0.2.0) 198 | jekyll (> 3.5, < 5.0) 199 | jekyll-seo-tag (~> 2.0) 200 | jekyll-theme-minimal (0.2.0) 201 | jekyll (> 3.5, < 5.0) 202 | jekyll-seo-tag (~> 2.0) 203 | jekyll-theme-modernist (0.2.0) 204 | jekyll (> 3.5, < 5.0) 205 | jekyll-seo-tag (~> 2.0) 206 | jekyll-theme-primer (0.6.0) 207 | jekyll (> 3.5, < 5.0) 208 | jekyll-github-metadata (~> 2.9) 209 | jekyll-seo-tag (~> 2.0) 210 | jekyll-theme-slate (0.2.0) 211 | jekyll (> 3.5, < 5.0) 212 | jekyll-seo-tag (~> 2.0) 213 | jekyll-theme-tactile (0.2.0) 214 | jekyll (> 3.5, < 5.0) 215 | jekyll-seo-tag (~> 2.0) 216 | jekyll-theme-time-machine (0.2.0) 217 | jekyll (> 3.5, < 5.0) 218 | jekyll-seo-tag (~> 2.0) 219 | jekyll-titles-from-headings (0.5.3) 220 | jekyll (>= 3.3, < 5.0) 221 | jekyll-watch (2.2.1) 222 | listen (~> 3.0) 223 | jemoji (0.12.0) 224 | gemoji (~> 3.0) 225 | html-pipeline (~> 2.2) 226 | jekyll (>= 3.0, < 5.0) 227 | kramdown (2.3.2) 228 | rexml 229 | kramdown-parser-gfm (1.1.0) 230 | kramdown (~> 2.0) 231 | liquid (4.0.3) 232 | listen (3.7.1) 233 | rb-fsevent (~> 0.10, >= 0.10.3) 234 | rb-inotify (~> 0.9, >= 0.9.10) 235 | mercenary (0.3.6) 236 | mini_portile2 (2.8.0) 237 | minima (2.5.1) 238 | jekyll (>= 3.5, < 5.0) 239 | jekyll-feed (~> 0.9) 240 | jekyll-seo-tag (~> 2.1) 241 | minitest (5.15.0) 242 | multipart-post (2.1.1) 243 | nokogiri (1.13.5) 244 | mini_portile2 (~> 2.8.0) 245 | racc (~> 1.4) 246 | octokit (4.22.0) 247 | faraday (>= 0.9) 248 | sawyer (~> 0.8.0, >= 0.5.3) 249 | parallel (1.22.1) 250 | pathutil (0.16.2) 251 | forwardable-extended (~> 2.6) 252 | public_suffix (4.0.7) 253 | racc (1.6.0) 254 | rainbow (3.1.1) 255 | rb-fsevent (0.11.1) 256 | rb-inotify (0.10.1) 257 | ffi (~> 1.0) 258 | rexml (3.2.5) 259 | rouge (3.26.0) 260 | ruby2_keywords (0.0.5) 261 | rubyzip (2.3.2) 262 | safe_yaml (1.0.5) 263 | sass (3.7.4) 264 | sass-listen (~> 4.0.0) 265 | sass-listen (4.0.0) 266 | rb-fsevent (~> 0.9, >= 0.9.4) 267 | rb-inotify (~> 0.9, >= 0.9.7) 268 | sawyer (0.8.2) 269 | addressable (>= 2.3.5) 270 | faraday (> 0.8, < 2.0) 271 | simpleidn (0.2.1) 272 | unf (~> 0.1.4) 273 | terminal-table (1.8.0) 274 | unicode-display_width (~> 1.1, >= 1.1.1) 275 | thread_safe (0.3.6) 276 | typhoeus (1.4.0) 277 | ethon (>= 0.9.0) 278 | tzinfo (1.2.9) 279 | thread_safe (~> 0.1) 280 | unf (0.1.4) 281 | unf_ext 282 | unf_ext (0.0.8.1) 283 | unicode-display_width (1.8.0) 284 | webrick (1.7.0) 285 | yell (2.2.2) 286 | zeitwerk (2.5.4) 287 | 288 | PLATFORMS 289 | ruby 290 | 291 | DEPENDENCIES 292 | github-pages 293 | html-proofer 294 | webrick (~> 1.7) 295 | 296 | BUNDLED WITH 297 | 2.3.13 298 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 5 | 6 | 7 | {% include head.html %} 8 | 9 | 10 | {% include header.html %} 11 |
12 | 66 |
67 |
68 | {% for conf in site.data.conferences %} 69 |
70 |
71 |
72 | 73 | {{conf.title}} {{conf.year}} 74 | 75 | 76 | {{conf.title}} '{{conf.year | slice: -2, 3}} 77 | 78 | 79 | Link to Conference Website 80 | ​ 81 | {% if conf.paperslink %} 82 | Full List of Accepted Papers 83 | {% endif %} 84 | ​ 85 | {% if conf.pwclink %} 86 | 87 | {% endif %} 88 | ​ 89 | 90 |
91 |
92 | 93 | 94 |
95 |
96 |
97 |
98 |
99 | {{conf.date}}. 100 | 101 | {% if conf.place == "Online" %} 102 | {{conf.place}}. 103 | {% else %} 104 | {{conf.place}}. 105 | {% endif %} 106 | 107 |
108 | {% if conf.note %} 109 |
110 | Note: {{conf.note}} 111 |
112 | {% endif %} 113 | 114 |
115 |
116 |
117 |
Deadline: 118 | 119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | {% for sub in conf.sub %} 127 | 128 | {% endfor %} 129 |
130 |
131 |
132 |
133 | {% endfor %} 134 |
135 |
136 |

Past Events

137 |
138 | 139 |
140 |
141 |
142 |
143 | {% include footer.html %} 144 |
145 |

146 |
147 | 255 | 256 | 257 | -------------------------------------------------------------------------------- /static/js/popper.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) Federico Zivolo 2019 3 | Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 4 | */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=e.ownerDocument.defaultView,n=o.getComputedStyle(e,null);return t?n[t]:n}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){return 11===e?pe:10===e?se:pe||se}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent||null;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TH','TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=Q(f[o],a[e]-('right'===e?f.width:f.height))),le({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=fe({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!K(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=ee(Q(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},le(n,m,$(v)),le(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case ge.FLIP:p=[n,i];break;case ge.CLOCKWISE:p=G(n);break;case ge.COUNTERCLOCKWISE:p=G(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,w=-1!==['top','bottom'].indexOf(n),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),y&&(r=z(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=fe({},e.offsets.popper,D(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!K(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=C(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightwindow.devicePixelRatio||!me),c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=H('transform');if(d='bottom'==c?'HTML'===l.nodeName?-l.clientHeight+h.bottom:-f.height+h.bottom:h.top,s='right'==g?'HTML'===l.nodeName?-l.clientWidth+h.right:-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==g?-1:1;m[c]=d*w,m[g]=s*y,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=fe({},E,e.attributes),e.styles=fe({},m,e.styles),e.arrowStyles=fe({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return j(e.instance.popper,e.styles),V(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&j(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),j(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ue}); 5 | //# sourceMappingURL=popper.min.js.map 6 | -------------------------------------------------------------------------------- /static/js/bootstrap-multiselect.min.js: -------------------------------------------------------------------------------- 1 | !function(root,factory){"function"==typeof define&&define.amd&&"function"==typeof require&&"function"==typeof require.specified&&require.specified("knockout")?define(["jquery","knockout"],factory):factory(root.jQuery,root.ko)}(this,(function($,ko){"use strict";function forEach(array,callback){for(var index=0;index').after(this.$container),this.options.onInitialized(this.$select,this.$container)}void 0!==ko&&ko.bindingHandlers&&!ko.bindingHandlers.multiselect&&(ko.bindingHandlers.multiselect={after:["options","value","selectedOptions","enable","disable"],init:function(element,valueAccessor,allBindings,viewModel,bindingContext){var $element=$(element),config=ko.toJS(valueAccessor());if($element.multiselect(config),allBindings.has("options")){var options=allBindings.get("options");ko.isObservable(options)&&ko.computed({read:function(){options(),setTimeout((function(){var ms=$element.data("multiselect");ms&&ms.updateOriginalOptions(),$element.multiselect("rebuild")}),1)},disposeWhenNodeIsRemoved:element})}if(allBindings.has("value")){var value=allBindings.get("value");ko.isObservable(value)&&ko.computed({read:function(){value(),setTimeout((function(){$element.multiselect("refresh")}),1)},disposeWhenNodeIsRemoved:element}).extend({rateLimit:100,notifyWhenChangesStop:!0})}if(allBindings.has("selectedOptions")){var selectedOptions=allBindings.get("selectedOptions");ko.isObservable(selectedOptions)&&ko.computed({read:function(){selectedOptions(),setTimeout((function(){$element.multiselect("refresh")}),1)},disposeWhenNodeIsRemoved:element}).extend({rateLimit:100,notifyWhenChangesStop:!0})}var setEnabled=function(enable){setTimeout((function(){enable?$element.multiselect("enable"):$element.multiselect("disable")}))};if(allBindings.has("enable")){var enable=allBindings.get("enable");ko.isObservable(enable)?ko.computed({read:function(){setEnabled(enable())},disposeWhenNodeIsRemoved:element}).extend({rateLimit:100,notifyWhenChangesStop:!0}):setEnabled(enable)}if(allBindings.has("disable")){var disable=allBindings.get("disable");ko.isObservable(disable)?ko.computed({read:function(){setEnabled(!disable())},disposeWhenNodeIsRemoved:element}).extend({rateLimit:100,notifyWhenChangesStop:!0}):setEnabled(!disable)}ko.utils.domNodeDisposal.addDisposeCallback(element,(function(){$element.multiselect("destroy")}))},update:function(element,valueAccessor,allBindings,viewModel,bindingContext){var $element=$(element),config=ko.toJS(valueAccessor());$element.multiselect("setOptions",config),$element.multiselect("rebuild")}}),Multiselect.prototype={defaults:{buttonText:function(options,select){if(this.disabledText.length>0&&(select.prop("disabled")||0==options.length&&this.disableIfEmpty))return this.disabledText;if(0===options.length)return this.nonSelectedText;if(this.allSelectedText&&options.length===$("option",$(select)).length&&1!==$("option",$(select)).length&&this.multiple)return this.selectAllNumber?this.allSelectedText+" ("+options.length+")":this.allSelectedText;if(0!=this.numberDisplayed&&options.length>this.numberDisplayed)return options.length+" "+this.nSelectedText;var selected="",delimiter=this.delimiterText;return options.each((function(){var label=void 0!==$(this).attr("label")?$(this).attr("label"):$(this).text();selected+=label+delimiter})),selected.substr(0,selected.length-this.delimiterText.length)},buttonTitle:function(options,select){if(0===options.length)return this.nonSelectedText;var selected="",delimiter=this.delimiterText;return options.each((function(){var label=void 0!==$(this).attr("label")?$(this).attr("label"):$(this).text();selected+=label+delimiter})),selected.substr(0,selected.length-this.delimiterText.length)},checkboxName:function(option){return!1},optionLabel:function(element){return $(element).attr("label")||$(element).text()},optionClass:function(element){return $(element).attr("class")||""},onChange:function(option,checked){},onDropdownShow:function(event){},onDropdownHide:function(event){},onDropdownShown:function(event){},onDropdownHidden:function(event){},onSelectAll:function(){},onDeselectAll:function(){},onInitialized:function($select,$container){},onFiltering:function($filter){},enableHTML:!1,buttonClass:"custom-select",inheritClass:!1,buttonWidth:"auto",buttonContainer:'
',dropRight:!1,dropUp:!1,selectedClass:"active",maxHeight:!1,includeSelectAllOption:!1,includeSelectAllIfMoreThan:0,selectAllText:" Select all",selectAllValue:"multiselect-all",selectAllName:!1,selectAllNumber:!0,selectAllJustVisible:!0,enableFiltering:!1,enableCaseInsensitiveFiltering:!1,enableFullValueFiltering:!1,enableClickableOptGroups:!1,enableCollapsibleOptGroups:!1,collapseOptGroupsByDefault:!1,filterPlaceholder:"Search",filterBehavior:"text",includeFilterClearBtn:!0,preventInputChangeEvent:!1,nonSelectedText:"None selected",nSelectedText:"selected",allSelectedText:"All selected",numberDisplayed:3,disableIfEmpty:!1,disabledText:"",delimiterText:", ",includeResetOption:!1,includeResetDivider:!1,resetText:"Reset",templates:{button:'',popupContainer:'',filter:'
',filterClearBtn:'
',option:'',divider:'',optionGroup:'',resetButton:'
'}},constructor:Multiselect,buildContainer:function(){this.$container=$(this.options.buttonContainer),this.$container.on("show.bs.dropdown",this.options.onDropdownShow),this.$container.on("hide.bs.dropdown",this.options.onDropdownHide),this.$container.on("shown.bs.dropdown",this.options.onDropdownShown),this.$container.on("hidden.bs.dropdown",this.options.onDropdownHidden)},buildButton:function(){this.$button=$(this.options.templates.button).addClass(this.options.buttonClass),this.$select.attr("class")&&this.options.inheritClass&&this.$button.addClass(this.$select.attr("class")),this.$select.prop("disabled")?this.disable():this.enable(),this.options.buttonWidth&&"auto"!==this.options.buttonWidth&&(this.$button.css({width:"100%",overflow:"hidden","text-overflow":"ellipsis"}),this.$container.css({width:this.options.buttonWidth}));var tabindex=this.$select.attr("tabindex");tabindex&&this.$button.attr("tabindex",tabindex),this.$container.prepend(this.$button)},buildDropdown:function(){this.$popupContainer=$(this.options.templates.popupContainer),this.options.dropRight?this.$container.addClass("dropright"):this.options.dropUp&&this.$container.addClass("dropup"),this.options.maxHeight&&this.$popupContainer.css({"max-height":this.options.maxHeight+"px","overflow-y":"auto","overflow-x":"hidden"}),this.$popupContainer.on("touchstart click",(function(e){e.stopPropagation()})),this.$container.append(this.$popupContainer)},buildDropdownOptions:function(){this.$select.children().each($.proxy((function(index,element){var $element=$(element),tag=$element.prop("tagName").toLowerCase();$element.prop("value")!==this.options.selectAllValue&&("optgroup"===tag?this.createOptgroup(element):"option"===tag&&("divider"===$element.data("role")?this.createDivider():this.createOptionValue(element)))}),this)),$(this.$popupContainer).off("change",'> *:not(.multiselect-group) input[type="checkbox"], > *:not(.multiselect-group) input[type="radio"]'),$(this.$popupContainer).on("change",'> *:not(.multiselect-group) input[type="checkbox"], > *:not(.multiselect-group) input[type="radio"]',$.proxy((function(event){var $target=$(event.target),checked=$target.prop("checked")||!1,isSelectAllOption=$target.val()===this.options.selectAllValue;this.options.selectedClass&&(checked?$target.closest(".multiselect-option").addClass(this.options.selectedClass):$target.closest(".multiselect-option").removeClass(this.options.selectedClass));var value=$target.val(),$option=this.getOptionByValue(value),$optionsNotThis=$("option",this.$select).not($option),$checkboxesNotThis=$("input",this.$container).not($target);if(isSelectAllOption?checked?this.selectAll(this.options.selectAllJustVisible,!0):this.deselectAll(this.options.selectAllJustVisible,!0):(checked?($option.prop("selected",!0),this.options.multiple?$option.prop("selected",!0):(this.options.selectedClass&&$($checkboxesNotThis).closest(".dropdown-item").removeClass(this.options.selectedClass),$($checkboxesNotThis).prop("checked",!1),$optionsNotThis.prop("selected",!1),this.$button.click()),"active"===this.options.selectedClass&&$optionsNotThis.closest(".dropdown-item").css("outline","")):$option.prop("selected",!1),this.options.onChange($option,checked),this.updateSelectAll(),this.options.enableClickableOptGroups&&this.options.multiple&&this.updateOptGroups()),this.$select.change(),this.updateButtonText(),this.options.preventInputChangeEvent)return!1}),this)),$(".multiselect-option",this.$popupContainer).off("mousedown"),$(".multiselect-option",this.$popupContainer).on("mousedown",(function(e){if(e.shiftKey)return!1})),$(this.$popupContainer).off("touchstart click",".multiselect-option, .multiselect-all, .multiselect-group"),$(this.$popupContainer).on("touchstart click",".multiselect-option, .multiselect-all, .multiselect-group",$.proxy((function(event){event.stopPropagation();var $target=$(event.target),$input;if(event.shiftKey&&this.options.multiple){$target.is("input")||(event.preventDefault(),($target=$target.closest(".multiselect-option").find("input")).prop("checked",!$target.prop("checked")));var checked=$target.prop("checked")||!1;if(null!==this.lastToggledInput&&this.lastToggledInput!==$target){var from=this.$popupContainer.find(".multiselect-option:visible").index($target.closest(".multiselect-option")),to=this.$popupContainer.find(".multiselect-option:visible").index(this.lastToggledInput.closest(".multiselect-option"));if(from>to){var tmp=to;to=from,from=tmp}++to;var range=this.$popupContainer.find(".multiselect-option:not(.multiselect-filter-hidden)").slice(from,to).find("input");range.prop("checked",checked),this.options.selectedClass&&range.closest(".multiselect-option").toggleClass(this.options.selectedClass,checked);for(var i=0,j=range.length;i0)$checkbox.prop("checked",!$checkbox.prop("checked")),$checkbox.change();else if(this.options.enableClickableOptGroups&&this.options.multiple&&!$target.hasClass("caret-container")){var groupItem=$target;groupItem.hasClass("multiselect-group")||(groupItem=$target.closest(".multiselect-group")),($checkbox=groupItem.find(".form-check-input")).length>0&&($checkbox.prop("checked",!$checkbox.prop("checked")),$checkbox.change())}event.preventDefault()}$target.closest(".multiselect-option").find("input[type='checkbox'], input[type='radio']").length>0?this.lastToggledInput=$target:this.lastToggledInput=null,$target.blur()}),this)),this.$container.off("keydown.multiselect").on("keydown.multiselect",$.proxy((function(event){if(!$('input[type="text"]',this.$container).is(":focus"))if(9===event.keyCode&&this.$container.hasClass("show"))this.$button.click();else{var $items=$(this.$container).find(".multiselect-option:not(.disabled), .multiselect-group:not(.disabled), .multiselect-all").filter(":visible");if(!$items.length)return;var index=$items.index($items.filter(":focus")),$current=$items.eq(index);if(32===event.keyCode){var $checkbox=$current.find("input");$checkbox.prop("checked",!$checkbox.prop("checked")),$checkbox.change(),event.preventDefault()}13===event.keyCode&&setTimeout((function(){$current.focus()}),0)}}),this)),this.options.enableClickableOptGroups&&this.options.multiple&&($(".multiselect-group input",this.$popupContainer).off("change"),$(".multiselect-group input",this.$popupContainer).on("change",$.proxy((function(event){event.stopPropagation();var $target,checked=$(event.target).prop("checked")||!1,$item=$(event.target).closest(".dropdown-item"),$group,$inputs=$item.nextUntil(".multiselect-group").not(".multiselect-filter-hidden").not(".disabled").find("input"),$options=[];this.options.selectedClass&&(checked?$item.addClass(this.options.selectedClass):$item.removeClass(this.options.selectedClass)),$.each($inputs,$.proxy((function(index,input){var $input=$(input),value=$input.val(),$option=this.getOptionByValue(value);checked?($input.prop("checked",!0),$input.closest(".dropdown-item").addClass(this.options.selectedClass),$option.prop("selected",!0)):($input.prop("checked",!1),$input.closest(".dropdown-item").removeClass(this.options.selectedClass),$option.prop("selected",!1)),$options.push(this.getOptionByValue(value))}),this)),this.options.onChange($options,checked),this.$select.change(),this.updateButtonText(),this.updateSelectAll()}),this))),this.options.enableCollapsibleOptGroups&&this.options.multiple&&($(".multiselect-group .caret-container",this.$popupContainer).off("click"),$(".multiselect-group .caret-container",this.$popupContainer).on("click",$.proxy((function(event){var $group,$inputs=$(event.target).closest(".multiselect-group").nextUntil(".multiselect-group").not(".multiselect-filter-hidden"),visible=!0;$inputs.each((function(){visible=visible&&!$(this).hasClass("multiselect-collapsible-hidden")})),visible?$inputs.hide().addClass("multiselect-collapsible-hidden"):$inputs.show().removeClass("multiselect-collapsible-hidden")}),this)))},createCheckbox:function($item,label,name,value,title,inputType){var $wrapper=$("");if($wrapper.addClass("form-check"),this.options.enableHTML&&$(label).length>0)$wrapper.append($(label));else{var $checkboxLabel=$('