├── djangocon ├── core │ ├── __init__.py │ ├── models.py │ └── templatetags │ │ ├── __init__.py │ │ └── core_tags.py ├── proposals │ ├── __init__.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── create_test_data.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0003_auto_20160322_0259.py │ │ └── 0001_initial.py │ ├── models.py │ ├── admin.py │ └── forms.py ├── settings │ ├── __init__.py │ ├── staging.py │ └── local.py.example ├── templates │ ├── account │ │ ├── _login_sidebar.html │ │ ├── _signup_sidebar.html │ │ ├── email │ │ │ ├── password_change_subject.txt │ │ │ ├── invite_user_subject.txt │ │ │ ├── password_reset_subject.txt │ │ │ ├── email_confirmation_subject.txt │ │ │ ├── invite_user.txt │ │ │ ├── password_change.txt │ │ │ ├── email_confirmation_message.txt │ │ │ └── password_reset.txt │ │ ├── signup_closed.html │ │ ├── email_confirmed.html │ │ ├── delete.html │ │ ├── password_reset_token_fail.html │ │ ├── base.html │ │ ├── logout.html │ │ ├── email_confirmation_sent.html │ │ ├── settings.html │ │ ├── email_confirm.html │ │ ├── password_change.html │ │ ├── password_reset_token.html │ │ ├── password_reset_sent.html │ │ ├── signup.html │ │ ├── password_reset.html │ │ └── login.html │ ├── pinax │ │ ├── boxes │ │ │ ├── _box.html │ │ │ └── _box_body.html │ │ ├── blog │ │ │ ├── dateline.html │ │ │ ├── dateline_stale.html │ │ │ ├── blog_list.html │ │ │ └── blog_post.html │ │ └── pages │ │ │ ├── file_create.html │ │ │ ├── page_edit.html │ │ │ ├── page_detail.html │ │ │ └── file_list.html │ ├── contact_form │ │ ├── contact_form_subject.txt │ │ ├── contact_form.txt │ │ ├── contact_form_sent.html │ │ └── contact_form.html │ ├── symposion │ │ ├── speakers │ │ │ ├── base.html │ │ │ ├── speaker_edit.html │ │ │ ├── speaker_create.html │ │ │ └── speaker_profile.html │ │ ├── emails │ │ │ ├── sponsor_signup │ │ │ │ ├── subject.txt │ │ │ │ └── message.html │ │ │ ├── teams_user_invited │ │ │ │ ├── subject.txt │ │ │ │ └── message.html │ │ │ ├── teams_user_applied │ │ │ │ ├── subject.txt │ │ │ │ └── message.html │ │ │ ├── speaker_invite │ │ │ │ ├── subject.txt │ │ │ │ └── message.html │ │ │ ├── speaker_addition │ │ │ │ ├── subject.txt │ │ │ │ └── message.html │ │ │ ├── speaker_no_profile │ │ │ │ ├── subject.txt │ │ │ │ └── message.html │ │ │ ├── proposal_updated │ │ │ │ ├── subject.txt │ │ │ │ └── message.html │ │ │ └── proposal_new_message │ │ │ │ ├── subject.txt │ │ │ │ └── message.html │ │ ├── reviews │ │ │ ├── review_comment.html │ │ │ ├── access_not_permitted.html │ │ │ ├── review_list.html │ │ │ ├── review_bulk_accept.html │ │ │ ├── _result_notification_prepare_help.html │ │ │ ├── review_admin.html │ │ │ ├── review_assignment.html │ │ │ ├── _review_table.html │ │ │ └── result_notification_prepare.html │ │ ├── proposals │ │ │ ├── base.html │ │ │ ├── proposal_leave.html │ │ │ ├── document_create.html │ │ │ ├── proposal_cancel.html │ │ │ ├── proposal_submit.html │ │ │ ├── proposal_edit.html │ │ │ ├── _proposal_row.html │ │ │ ├── proposal_submit_kind.html │ │ │ ├── proposal_speaker_manage.html │ │ │ └── _pending_proposal_row.html │ │ ├── sponsorship │ │ │ ├── _wall.html │ │ │ ├── _horizontal_by_level.html │ │ │ ├── _vertical_by_level.html │ │ │ ├── _sponsor_link.html │ │ │ ├── add.html │ │ │ ├── apply.html │ │ │ └── detail.html │ │ └── schedule │ │ │ ├── _slot_edit.html │ │ │ ├── schedule_detail.html │ │ │ ├── schedule_conference.html │ │ │ ├── presentation_detail.html │ │ │ ├── schedule_list.html │ │ │ ├── _grid.html │ │ │ └── schedule_edit.html │ ├── _scripts.html │ ├── _footer.html │ ├── _messages.html │ ├── site_base_onecolumn.html │ ├── sitetree │ │ ├── children.html │ │ ├── tree.html │ │ └── menu.html │ ├── includes │ │ ├── news_teasers.html │ │ ├── footer.html │ │ ├── cards.html │ │ ├── mailchimp.html │ │ └── sponsorship_list.html │ ├── _default_sidebar.html │ ├── _account_bar.html │ ├── site_base.html │ ├── data.html │ ├── sponsorship_raw.html │ └── interim_homepage.html ├── apps.py ├── wsgi.py ├── __init__.py ├── hooks.py └── receivers.py ├── .gondor └── collectstatic_disabled ├── Procfile ├── tox.ini ├── bin └── post_compile ├── client ├── scss │ ├── common │ │ ├── _boxes.scss │ │ ├── _dashboard.scss │ │ ├── _proposals.scss │ │ ├── _forms.scss │ │ ├── _footer.scss │ │ ├── bootstrap │ │ │ ├── _buttons.scss │ │ │ ├── _variables.scss │ │ │ ├── _navbar.scss │ │ │ └── _type.scss │ │ ├── _blog.scss │ │ ├── _global.scss │ │ └── _sponsorship.scss │ ├── vendor │ │ └── bootstrap │ │ │ ├── mixins │ │ │ ├── _pulls.scss │ │ │ ├── _size.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _center-block.scss │ │ │ ├── _text-hide.scss │ │ │ ├── _lists.scss │ │ │ ├── _text-truncate.scss │ │ │ ├── _tab-focus.scss │ │ │ ├── _label.scss │ │ │ ├── _resize.scss │ │ │ ├── _text-emphasis.scss │ │ │ ├── _nav-divider.scss │ │ │ ├── _reset-filter.scss │ │ │ ├── _background-variant.scss │ │ │ ├── _alert.scss │ │ │ ├── _progress.scss │ │ │ ├── _navbar-align.scss │ │ │ ├── _reset-text.scss │ │ │ ├── _pagination.scss │ │ │ ├── _list-group.scss │ │ │ ├── _table-row.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _cards.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _hover.scss │ │ │ ├── _image.scss │ │ │ ├── _grid-framework.scss │ │ │ └── _grid.scss │ │ │ ├── bootstrap-flex.scss │ │ │ ├── bootstrap-reboot.scss │ │ │ ├── _animation.scss │ │ │ ├── _jumbotron.scss │ │ │ ├── _utilities-background.scss │ │ │ ├── _breadcrumb.scss │ │ │ ├── _responsive-embed.scss │ │ │ ├── _close.scss │ │ │ ├── _utilities-responsive.scss │ │ │ ├── _pager.scss │ │ │ ├── _utilities-spacing.scss │ │ │ ├── bootstrap.scss │ │ │ ├── _code.scss │ │ │ ├── bootstrap-grid.scss │ │ │ ├── _mixins.scss │ │ │ ├── _media.scss │ │ │ ├── _images.scss │ │ │ ├── _alert.scss │ │ │ ├── _print.scss │ │ │ ├── _labels.scss │ │ │ ├── _grid.scss │ │ │ ├── _pagination.scss │ │ │ ├── _utilities.scss │ │ │ └── _tooltip.scss │ └── base.scss └── assets │ ├── img │ ├── bat.png │ ├── bend.png │ ├── stitch.jpg │ ├── stitch.png │ ├── wood.jpg │ ├── baseball.png │ ├── bend_right.png │ ├── header_bg.jpg │ ├── logo-full.png │ ├── scorecard.jpg │ ├── scotch-br.png │ ├── love_sticker.png │ ├── poster-shadow.png │ ├── cards │ │ ├── card-beer.jpg │ │ ├── card-pretzel.jpg │ │ ├── card-stairs.jpg │ │ ├── card-franklin.jpg │ │ ├── card-cheese-steak.jpg │ │ ├── card-liberty-bell.jpg │ │ ├── card-mask-phanatic.png │ │ └── card-independence-hall.jpg │ ├── django_sticker.png │ ├── header_bg_plain.jpg │ ├── phanatic-loop5.gif │ ├── chosen │ │ ├── chosen-sprite.png │ │ └── chosen-sprite@2x.png │ ├── ribbon.svg │ ├── blue_triangle.svg │ └── white_triangle.svg │ └── fonts │ ├── liberator-heavy-webfont.eot │ ├── liberator-heavy-webfont.ttf │ ├── liberator-heavy-webfont.woff │ ├── liberator-heavy-webfont.woff2 │ ├── d29a1003-aa62-4492-a4ab-3b649c7efccd.eot │ ├── e0a4e45b-0b2e-4b30-82d9-808d85415dc9.ttf │ ├── 73586ea9-fb0d-422d-806c-ac63e6238c1d.woff2 │ └── d8999082-96b7-4355-bab1-d135f4e4bee7.woff ├── gondor.yml ├── manage.py ├── .all-contributorsrc ├── fixtures ├── sites.json ├── users.json ├── conference.json ├── proposal_base.json └── sponsor_levels.json ├── package.json ├── requirements.txt ├── notify.py ├── .gitignore ├── LICENSE ├── tasks.py └── Makefile /djangocon/core/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djangocon/core/models.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gondor/collectstatic_disabled: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djangocon/proposals/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djangocon/settings/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djangocon/core/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djangocon/proposals/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djangocon/proposals/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djangocon/proposals/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn --bind=0.0.0.0 --log-file - djangocon.wsgi 2 | -------------------------------------------------------------------------------- /djangocon/templates/account/_login_sidebar.html: -------------------------------------------------------------------------------- 1 | {# provide log in sidebar here #} -------------------------------------------------------------------------------- /djangocon/templates/account/_signup_sidebar.html: -------------------------------------------------------------------------------- 1 | {# provide sign up in sidebar here #} -------------------------------------------------------------------------------- /djangocon/templates/pinax/boxes/_box.html: -------------------------------------------------------------------------------- 1 | {% include "pinax/boxes/_box_body.html" %} 2 | -------------------------------------------------------------------------------- /djangocon/templates/contact_form/contact_form_subject.txt: -------------------------------------------------------------------------------- 1 | [DjangoCon 2016] Contact Form 2 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/speakers/base.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base_onecolumn.html" %} 2 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [flake8] 2 | ignore = E265,E501 3 | max-line-length = 100 4 | max-complexity = 10 5 | -------------------------------------------------------------------------------- /bin/post_compile: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -xeuf -o pipefail 4 | npm install 5 | make collect 6 | -------------------------------------------------------------------------------- /djangocon/templates/_scripts.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /client/scss/common/_boxes.scss: -------------------------------------------------------------------------------- 1 | .box-features { 2 | p { 3 | margin-bottom: 3rem; 4 | } 5 | } 6 | 7 | -------------------------------------------------------------------------------- /client/assets/img/bat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/bat.png -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/sponsor_signup/subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% trans "New Sponsor Application" %} 2 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/review_comment.html: -------------------------------------------------------------------------------- 1 | {{ proposal }}: proposal obj 2 | {{ form }}: comment form obj 3 | -------------------------------------------------------------------------------- /client/assets/img/bend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/bend.png -------------------------------------------------------------------------------- /client/assets/img/stitch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/stitch.jpg -------------------------------------------------------------------------------- /client/assets/img/stitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/stitch.png -------------------------------------------------------------------------------- /client/assets/img/wood.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/wood.jpg -------------------------------------------------------------------------------- /djangocon/templates/account/email/password_change_subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% trans "Change password email notification" %} -------------------------------------------------------------------------------- /client/assets/img/baseball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/baseball.png -------------------------------------------------------------------------------- /client/assets/img/bend_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/bend_right.png -------------------------------------------------------------------------------- /client/assets/img/header_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/header_bg.jpg -------------------------------------------------------------------------------- /client/assets/img/logo-full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/logo-full.png -------------------------------------------------------------------------------- /client/assets/img/scorecard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/scorecard.jpg -------------------------------------------------------------------------------- /client/assets/img/scotch-br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/scotch-br.png -------------------------------------------------------------------------------- /djangocon/templates/contact_form/contact_form.txt: -------------------------------------------------------------------------------- 1 | {{ name }} at {{ email }} sent you the following message: 2 | 3 | {{ body }} 4 | 5 | -------------------------------------------------------------------------------- /client/assets/img/love_sticker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/love_sticker.png -------------------------------------------------------------------------------- /client/assets/img/poster-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/poster-shadow.png -------------------------------------------------------------------------------- /client/assets/img/cards/card-beer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/cards/card-beer.jpg -------------------------------------------------------------------------------- /client/assets/img/django_sticker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/django_sticker.png -------------------------------------------------------------------------------- /client/assets/img/header_bg_plain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/header_bg_plain.jpg -------------------------------------------------------------------------------- /client/assets/img/phanatic-loop5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/phanatic-loop5.gif -------------------------------------------------------------------------------- /client/assets/img/cards/card-pretzel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/cards/card-pretzel.jpg -------------------------------------------------------------------------------- /client/assets/img/cards/card-stairs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/cards/card-stairs.jpg -------------------------------------------------------------------------------- /client/assets/img/cards/card-franklin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/cards/card-franklin.jpg -------------------------------------------------------------------------------- /client/assets/img/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /client/assets/img/cards/card-cheese-steak.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/cards/card-cheese-steak.jpg -------------------------------------------------------------------------------- /client/assets/img/cards/card-liberty-bell.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/cards/card-liberty-bell.jpg -------------------------------------------------------------------------------- /client/assets/img/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/teams_user_invited/subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans %}You have been invited to join "{{ team }}"{% endblocktrans %} -------------------------------------------------------------------------------- /client/assets/fonts/liberator-heavy-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/fonts/liberator-heavy-webfont.eot -------------------------------------------------------------------------------- /client/assets/fonts/liberator-heavy-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/fonts/liberator-heavy-webfont.ttf -------------------------------------------------------------------------------- /client/assets/fonts/liberator-heavy-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/fonts/liberator-heavy-webfont.woff -------------------------------------------------------------------------------- /client/assets/img/cards/card-mask-phanatic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/cards/card-mask-phanatic.png -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_pulls.scss: -------------------------------------------------------------------------------- 1 | @mixin pull-left { 2 | float: left !important; 3 | } 4 | @mixin pull-right { 5 | float: right !important; 6 | } 7 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_size.scss: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | @mixin size($width, $height: $width) { 4 | width: $width; 5 | height: $height; 6 | } 7 | -------------------------------------------------------------------------------- /djangocon/templates/account/email/invite_user_subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with name=current_site.name %}Create an account on {{ name }}{% endblocktrans %} -------------------------------------------------------------------------------- /client/assets/fonts/liberator-heavy-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/fonts/liberator-heavy-webfont.woff2 -------------------------------------------------------------------------------- /client/assets/img/cards/card-independence-hall.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/img/cards/card-independence-hall.jpg -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | @mixin clearfix() { 2 | &::after { 3 | content: ""; 4 | display: table; 5 | clear: both; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /djangocon/templates/account/email/password_reset_subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with site_name=current_site.name %}[{{ site_name }}] Password reset{% endblocktrans %} -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/base.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% block body_outer %} 4 | {% block body %}{% endblock %} 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /djangocon/templates/account/email/email_confirmation_subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with site_name=current_site.name %}Confirm email address for {{ site_name }}{% endblocktrans %} -------------------------------------------------------------------------------- /client/assets/fonts/d29a1003-aa62-4492-a4ab-3b649c7efccd.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/fonts/d29a1003-aa62-4492-a4ab-3b649c7efccd.eot -------------------------------------------------------------------------------- /client/assets/fonts/e0a4e45b-0b2e-4b30-82d9-808d85415dc9.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/fonts/e0a4e45b-0b2e-4b30-82d9-808d85415dc9.ttf -------------------------------------------------------------------------------- /gondor.yml: -------------------------------------------------------------------------------- 1 | site: djangocon/2016 2 | buildpack: https://buildpack.gondor.io/python 3 | branches: 4 | master: primary 5 | development: staging 6 | deploy: 7 | services: 8 | - web 9 | -------------------------------------------------------------------------------- /client/assets/fonts/73586ea9-fb0d-422d-806c-ac63e6238c1d.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/fonts/73586ea9-fb0d-422d-806c-ac63e6238c1d.woff2 -------------------------------------------------------------------------------- /client/assets/fonts/d8999082-96b7-4355-bab1-d135f4e4bee7.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/djangocon/2016.djangocon.us-archived/HEAD/client/assets/fonts/d8999082-96b7-4355-bab1-d135f4e4bee7.woff -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_center-block.scss: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | @mixin center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /djangocon/templates/account/email/invite_user.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with name=current_site.name %}You have been invited to sign up at {{ name }}. 2 | 3 | {{ signup_url }} 4 | {% endblocktrans %} -------------------------------------------------------------------------------- /djangocon/templates/account/email/password_change.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with now=user.account.now %}This is the email notification to confirm your password has been changed on {{ now }}.{% endblocktrans %} -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/teams_user_applied/subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n account_tags %}{% user_display user as username %}{% blocktrans %}{{ username}} has applied to to join "{{ team }}"{% endblocktrans %} -------------------------------------------------------------------------------- /djangocon/templates/_footer.html: -------------------------------------------------------------------------------- 1 |
2 | ©2016 3 |
4 | 5 |
6 | Site powered by Symposion. 7 |
8 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/speaker_invite/subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_text-hide.scss: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | @mixin text-hide() { 3 | font: "0/0" a; 4 | color: transparent; 5 | text-shadow: none; 6 | background-color: transparent; 7 | border: 0; 8 | } 9 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/speaker_addition/subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/speaker_no_profile/subject.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/proposal_updated/subject.txt: -------------------------------------------------------------------------------- 1 | {% load account_tags i18n %}{% user_display user as username %}{% blocktrans with title=proposal.title %}"{{ title }}" has been updated by {{ username }}{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/proposal_new_message/subject.txt: -------------------------------------------------------------------------------- 1 | {% load account_tags i18n %}{% user_display message.user as user %}{% blocktrans with title=proposal.title %}New message on "{{ title }}" from {{ user }}{% endblocktrans %} 2 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/bootstrap-flex.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap with Flexbox enabled 2 | // 3 | // Includes all the imports from the standard Bootstrap project, but enables 4 | // the flexbox variable. 5 | 6 | $enable-flex: true; 7 | 8 | @import "bootstrap"; 9 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_tab-focus.scss: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | @mixin tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_label.scss: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | @mixin label-variant($color) { 4 | background-color: $color; 5 | 6 | &[href] { 7 | @include hover-focus { 8 | background-color: darken($color, 10%); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | resize: $direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /djangocon/apps.py: -------------------------------------------------------------------------------- 1 | from importlib import import_module 2 | 3 | from django.apps import AppConfig as BaseAppConfig 4 | 5 | 6 | class AppConfig(BaseAppConfig): 7 | 8 | name = "djangocon" 9 | 10 | def ready(self): 11 | import_module("djangocon.receivers") 12 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap Reboot only 2 | // 3 | // Includes only Normalize and our custom Reboot reset. 4 | 5 | @import "variables"; 6 | @import "mixins/hover"; 7 | @import "mixins/tab-focus"; 8 | 9 | @import "normalize"; 10 | @import "reboot"; 11 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_text-emphasis.scss: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | @mixin text-emphasis-variant($parent, $color) { 4 | #{$parent} { 5 | color: $color !important; 6 | } 7 | a#{$parent} { 8 | @include hover-focus { 9 | color: darken($color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/sponsorship/_wall.html: -------------------------------------------------------------------------------- 1 | {% load sponsorship_tags %} 2 | 3 | {% sponsors as sponsors %} 4 | 5 | 10 | -------------------------------------------------------------------------------- /client/scss/common/_dashboard.scss: -------------------------------------------------------------------------------- 1 | .dashboard-card .card-header { 2 | display: flex; 3 | flex-direction: row; 4 | align-items: center; 5 | h3 { 6 | align-self: flex-start; 7 | margin: 0; 8 | } 9 | .card-header-actions { 10 | align-self: flex-end; 11 | margin-left: auto; 12 | } 13 | } -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_nav-divider.scss: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | @mixin nav-divider($color: #e5e5e5) { 6 | height: 1px; 7 | margin: ($spacer-y / 2) 0; 8 | overflow: hidden; 9 | background-color: $color; 10 | } 11 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_reset-filter.scss: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9. 5 | 6 | @mixin reset-filter() { 7 | filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; 8 | } 9 | -------------------------------------------------------------------------------- /djangocon/templates/_messages.html: -------------------------------------------------------------------------------- 1 | {% load pinax_theme_bootstrap_tags %} 2 | {% for message in messages %} 3 |
4 | 5 | {{ message|safe }} 6 |
7 | {% endfor %} 8 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import os 4 | import sys 5 | 6 | 7 | if __name__ == "__main__": 8 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangocon.settings.local") 9 | 10 | from django.core.management import execute_from_command_line 11 | 12 | execute_from_command_line(sys.argv) 13 | -------------------------------------------------------------------------------- /djangocon/wsgi.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault("DEBUG", "0") 4 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangocon.settings") 5 | 6 | from django.core.wsgi import get_wsgi_application # noqa 7 | 8 | from whitenoise.django import DjangoWhiteNoise # noqa 9 | 10 | application = DjangoWhiteNoise(get_wsgi_application()) 11 | -------------------------------------------------------------------------------- /djangocon/templates/site_base_onecolumn.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | 4 | {% block body_base %} 5 |
6 |
7 | {% include "_messages.html" %} 8 | {% block body %} 9 | {% endblock %} 10 |
11 |
12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_background-variant.scss: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | @mixin bg-variant($parent, $color) { 4 | #{$parent} { 5 | color: #fff !important; 6 | background-color: $color !important; 7 | } 8 | a#{$parent} { 9 | @include hover-focus { 10 | background-color: darken($color, 10%); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | @mixin alert-variant($background, $border, $body-color) { 4 | background-color: $background; 5 | border-color: $border; 6 | color: $body-color; 7 | 8 | hr { 9 | border-top-color: darken($border, 5%); 10 | } 11 | .alert-link { 12 | color: darken($body-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /djangocon/templates/account/email/email_confirmation_message.txt: -------------------------------------------------------------------------------- 1 | {% load i18n account_tags %}{% blocktrans with site_name=current_site.name %}A user on {{ site_name }} has created an account using this email address. 2 | 3 | To confirm this email address, go to {{ activate_url }} 4 | 5 | If you did not sign up for this site, you can ignore this message. 6 | {% endblocktrans %} -------------------------------------------------------------------------------- /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "imageSize": 100, 3 | "projectOwner": "djangocon", 4 | "projectName": "2016.djangocon.us", 5 | "template": "[![<%= user.name %>](<%= user.avatar_url %>&s=<%= options.imageSize %>)
<%= user.name %>](<%= user.html_url %>) | [<%= contributions %>](https://github.com/<%= options.projectOwner %>/<%= options.projectName %>/commits?author=<%= user.login %>)" 6 | } 7 | -------------------------------------------------------------------------------- /client/scss/common/_proposals.scss: -------------------------------------------------------------------------------- 1 | .reviews { 2 | .dl-horizontal { 3 | margin: 0; 4 | } 5 | h3 { 6 | margin-bottom: 1em; 7 | } 8 | } 9 | 10 | .review-form { 11 | margin-bottom: 2em; 12 | } 13 | 14 | .review-box { 15 | background: #fff; 16 | padding: 1em; 17 | p { 18 | margin-top: 1em; 19 | } 20 | } 21 | 22 | .tab-content { 23 | padding-top: 2em; 24 | } 25 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/access_not_permitted.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/reviews/base.html" %} 2 | 3 | {% block review_heading %}Access Not Permitted{% endblock review_heading %} 4 | 5 | {% block content %} 6 |

7 | Sorry, you do not have permission to access this page. If you 8 | believe this is a bug, please contact us immediately. 9 |

10 | {% endblock %} 11 | -------------------------------------------------------------------------------- /djangocon/templates/account/email/password_reset.txt: -------------------------------------------------------------------------------- 1 | {% load i18n %}{% blocktrans with site_name=current_site.name %}You're receiving this email because you or someone else has requested a password for your user account at {{ site_name }}. 2 | It can be safely ignored if you did not request a password reset. Click the link below to reset your password. 3 | 4 | {{ password_reset_url }} 5 | {% endblocktrans %} -------------------------------------------------------------------------------- /djangocon/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __about__ = """ 4 | In addition to what is provided by the "zero" project, this project 5 | provides thorough integration with django-user-accounts, adding 6 | comprehensive account management functionality. It is a foundation 7 | suitable for most sites that have user accounts. 8 | """ 9 | 10 | default_app_config = "djangocon.apps.AppConfig" 11 | -------------------------------------------------------------------------------- /djangocon/templates/pinax/blog/dateline.html: -------------------------------------------------------------------------------- 1 | 2 | {% if post.published %}{{ post.published|date:"jS F Y" }}{% else %}Not published yet{% endif %} / 3 | by {{ post.author.get_full_name }} in 4 | {{ post.section.name }} 5 | 6 | -------------------------------------------------------------------------------- /djangocon/settings/staging.py: -------------------------------------------------------------------------------- 1 | from .gondor import * # noqa 2 | 3 | DEBUG = True 4 | THUMBNAIL_DEBUG = DEBUG 5 | 6 | CDN_URL = os.environ.get("CDN_URL", "/") 7 | STATIC_URL = CDN_URL + "site_media/static/" 8 | MEDIA_URL = CDN_URL + "site_media/media/" 9 | 10 | ADMIN_MEDIA_PREFIX = STATIC_URL + "admin/" 11 | 12 | FILE_UPLOAD_PERMISSIONS = 0o640 13 | 14 | DEFAULT_FILE_STORAGE = "djangocon.storage.ECGoogleCloudStorage" 15 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/sponsorship/_horizontal_by_level.html: -------------------------------------------------------------------------------- 1 | {% load sponsorship_tags %} 2 | 3 | {% sponsor_levels as levels %} 4 | 5 | 13 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_progress.scss: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | @mixin progress-variant($color) { 4 | &[value]::-webkit-progress-value { 5 | background-color: $color; 6 | } 7 | 8 | &[value]::-moz-progress-bar { 9 | background-color: $color; 10 | } 11 | 12 | // IE9 13 | @media screen and (min-width:0\0) { 14 | .progress-bar { 15 | background-color: $color; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /djangocon/templates/sitetree/children.html: -------------------------------------------------------------------------------- 1 | {% load sitetree %} 2 | 3 | {% for item in sitetree_items %} 4 | {{ item.title_resolved }} 5 | {% endfor %} 6 | -------------------------------------------------------------------------------- /djangocon/core/templatetags/core_tags.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | 3 | 4 | register = template.Library() 5 | 6 | 7 | @register.filter 8 | def sort_by_m2m(iterable, m2m_key): 9 | m2m, key = m2m_key.split('.') 10 | for i in iterable: 11 | keys = [str(getattr(related, key)) for related in getattr(i, m2m).order_by(key)] 12 | 13 | i._key = ':'.join(keys) 14 | return sorted(iterable, key=lambda x: x._key) 15 | -------------------------------------------------------------------------------- /fixtures/sites.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pk": 1, 4 | "model": "sites.site", 5 | "fields": { 6 | "domain": "localhost:8000", 7 | "name": "DjangoCon US" 8 | } 9 | }, 10 | { 11 | "pk": 2, 12 | "model": "sites.site", 13 | "fields": { 14 | "domain": "conference.pinaxproject.com", 15 | "name": "DjangoCon US" 16 | } 17 | } 18 | ] 19 | -------------------------------------------------------------------------------- /djangocon/templates/pinax/blog/dateline_stale.html: -------------------------------------------------------------------------------- 1 |

2 | {% if not post.stale %} 3 | {% if post.published %}{{ post.published|date:"jS F Y" }}{% else %}Not published yet{% endif %} / 4 | {% endif %} 5 | by {{ post.author.get_full_name }} in 6 | {{ post.section.name }} 7 |

8 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/sponsorship/_vertical_by_level.html: -------------------------------------------------------------------------------- 1 | {% load sponsorship_tags %} 2 | 3 | {% sponsor_levels as levels %} 4 | 5 | 15 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_navbar-align.scss: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | // @mixin navbar-vertical-align($element-height) { 7 | // margin-top: (($navbar-height - $element-height) / 2); 8 | // margin-bottom: (($navbar-height - $element-height) / 2); 9 | // } 10 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/sponsorship/_sponsor_link.html: -------------------------------------------------------------------------------- 1 | {% load thumbnail %} 2 | 3 | {% spaceless %} 4 | 5 | {% if dimensions %} 6 | 7 | {% else %} 8 | 9 | {% endif %} 10 | 11 | {% endspaceless %} 12 | -------------------------------------------------------------------------------- /client/scss/common/_forms.scss: -------------------------------------------------------------------------------- 1 | form { 2 | legend { 3 | padding: 0 0 1em 0.75rem; 4 | } 5 | .help-block { 6 | margin-top: 1em 7 | } 8 | fieldset.has-error { 9 | input { 10 | border-color: red; 11 | } 12 | .text-muted:first-of-type { 13 | margin-top: 0.5em; 14 | color: red; 15 | } 16 | } 17 | } 18 | 19 | .form-group { 20 | .text-muted { 21 | display: inline-block; 22 | margin-top: 1em; 23 | margin-left: 1em; 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /djangocon/hooks.py: -------------------------------------------------------------------------------- 1 | import markdown 2 | 3 | import pinax.boxes.hooks 4 | import pinax.pages.hooks 5 | 6 | 7 | def markup_renderer(content): 8 | return markdown.markdown(content) 9 | 10 | 11 | class PinaxBoxesHookSet(pinax.boxes.hooks.DefaultHookSet): 12 | 13 | def parse_content(self, content): 14 | return markup_renderer(content) 15 | 16 | 17 | class PinaxPagesHookSet(pinax.pages.hooks.DefaultHookSet): 18 | 19 | def parse_content(self, content): 20 | return markup_renderer(content) 21 | -------------------------------------------------------------------------------- /djangocon/templates/sitetree/tree.html: -------------------------------------------------------------------------------- 1 | {% load sitetree %} 2 | {% if sitetree_items %} 3 | 15 | {% endif %} -------------------------------------------------------------------------------- /djangocon/settings/local.py.example: -------------------------------------------------------------------------------- 1 | # Top settings file for development 2 | from .base import * 3 | 4 | 5 | COMPRESS_ENABLED = False 6 | DEBUG = True 7 | TEMPLATE_DEBUG = DEBUG 8 | ALLOWED_HOSTS = [ 9 | 'localhost', 10 | '0.0.0.0', 11 | ] 12 | 13 | # Disable sending mail 14 | EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" 15 | 16 | 17 | # Including a default secret key since this is just for development 18 | SECRET_KEY = env_or_default('SECRET_KEY', u'dipps!+sq49#e2k#5^@4*^qn#8s83$kawqqxn&_-*xo7twru*8') 19 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/review_list.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/reviews/base.html" %} 2 | 3 | {% block review_heading %}{{ section }}{% endblock review_heading %} 4 | 5 | {% block content %} 6 | {% if reviewed == 'all_reviews' %} 7 |

All proposals

8 | {% elif reviewed == 'user_reviewed' %} 9 |

Proposals you have reviewed

10 | {% else %} 11 |

Proposals you have not yet reviewed

12 | {% endif %} 13 | 14 | {% include "symposion/reviews/_review_table.html" %} 15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /client/assets/img/ribbon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /client/assets/img/blue_triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/teams_user_invited/message.html: -------------------------------------------------------------------------------- 1 | {% load i18n account_tags %} 2 | 3 | {% blocktrans with team_name=team team_url=team.get_absolute_url site_name=current_site.name site_url=current_site %} 4 |

5 | You have been invited to join {{ team_name }} on {{ site_name }}. 6 |

7 | 8 |

9 | To accept this invitation, visit the following url: 10 | http://{{ site_url }}{{ team_url }} 11 |

12 | {% endblocktrans %} -------------------------------------------------------------------------------- /client/scss/common/_footer.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | background-size: cover; 3 | border-bottom: $poster-border-width solid #fff; 4 | background-color: $blue; 5 | margin-bottom: 2em; 6 | text-align: center; 7 | color: $white; 8 | padding-top: 0; 9 | a, a:active, a:visited { 10 | color: #fff; 11 | text-decoration: underline; 12 | } 13 | h1,h2,h3,h4,h5 { 14 | color: $white; 15 | } 16 | box-shadow: 0px 12px 8px -5px rgba(0, 0, 0, 0.41); 17 | .arrow-link { 18 | display: inline-block; 19 | margin-bottom: 2em; 20 | } 21 | } -------------------------------------------------------------------------------- /client/assets/img/white_triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_animation.scss: -------------------------------------------------------------------------------- 1 | .fade { 2 | opacity: 0; 3 | transition: opacity .15s linear; 4 | 5 | &.in { 6 | opacity: 1; 7 | } 8 | } 9 | 10 | .collapse { 11 | display: none; 12 | 13 | &.in { 14 | display: block; 15 | } 16 | // tr&.in { display: table-row; } 17 | // tbody&.in { display: table-row-group; } 18 | } 19 | 20 | .collapsing { 21 | position: relative; 22 | height: 0; 23 | overflow: hidden; 24 | transition-timing-function: ease; 25 | transition-duration: .35s; 26 | transition-property: height; 27 | } 28 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/review_bulk_accept.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/reviews/base.html" %} 2 | 3 | {% load bootstrap %} 4 | 5 | {% block review_heading %}Bulk Accept{% endblock review_heading %} 6 | 7 | {% block content %} 8 |
9 | {% csrf_token %} 10 | {{ form|bootstrap }} 11 |
12 | 13 |
14 |
15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_jumbotron.scss: -------------------------------------------------------------------------------- 1 | .jumbotron { 2 | padding: $jumbotron-padding ($jumbotron-padding / 2); 3 | margin-bottom: $jumbotron-padding; 4 | background-color: $jumbotron-bg; 5 | @include border-radius($border-radius-lg); 6 | 7 | @include media-breakpoint-up(sm) { 8 | padding: ($jumbotron-padding * 2) $jumbotron-padding; 9 | } 10 | } 11 | 12 | .jumbotron-hr { 13 | border-top-color: darken($jumbotron-bg, 10%); 14 | } 15 | 16 | .jumbotron-fluid { 17 | padding-right: 0; 18 | padding-left: 0; 19 | @include border-radius(0); 20 | } 21 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/speaker_addition/message.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% url 'dashboard' as dashboard_url %} 3 | {% blocktrans with username=proposal.speaker.name site_name=current_site.name title=proposal.title %} 4 |

{{ username }} attached you as an additional speaker to a 5 | talk proposal for {{ site_name }} entitled "{{ title }}".

6 | 7 |

For more details, visit the {{ site_name }} speaker dashboard: 8 | http://{{ current_site }}{{ dashboard_url ]} 9 |

10 | {% endblocktrans %} 11 | -------------------------------------------------------------------------------- /fixtures/users.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pk": 1, 4 | "model": "auth.user", 5 | "fields": { 6 | "date_joined": "2015-10-17T00:14:31.619Z", 7 | "groups": [], 8 | "user_permissions": [], 9 | "username": "pinax", 10 | "last_name": "", 11 | "is_superuser": true, 12 | "is_active": true, 13 | "email": "", 14 | "is_staff": true, 15 | "last_login": null, 16 | "first_name": "", 17 | "password": "pbkdf2_sha256$20000$mL5SrgzL4TSJ$y9rRoK1ZghGD8ywsJK0472Zp7DB+fr7jPZ9+MxPlWr0=" 18 | } 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size. 4 | font-style: normal; 5 | font-weight: normal; 6 | letter-spacing: normal; 7 | line-break: auto; 8 | line-height: $line-height; 9 | text-align: left; // Fallback for where `start` is not supported 10 | text-align: start; 11 | text-decoration: none; 12 | text-shadow: none; 13 | text-transform: none; 14 | white-space: normal; 15 | word-break: normal; 16 | word-spacing: normal; 17 | word-wrap: normal; 18 | } 19 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/speaker_no_profile/message.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% url 'speaker_create_token' token as token_url %} 3 | {% blocktrans with username=proposal.speaker.name site_name=current_site.name title=proposal.title %} 4 |

{{ username }} attached you as an additional speaker to a 5 | talk proposal for {{ site_name }} entitled "{{ title }}".

6 | 7 |

Go to

8 | 9 |

http://{{ current_site }}{{ token_url }}

10 | 11 |

to confirm and fill out your speaker profile.

12 | {% endblocktrans %} 13 | -------------------------------------------------------------------------------- /djangocon/templates/account/signup_closed.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}{% trans "Sign up" %}{% endblock %} 6 | 7 | {% block body %} 8 |

{% trans "This site is in private beta" %}

9 |

{% blocktrans %}If you have signup code you can enter it below.{% endblocktrans %}

10 |
11 |
12 |
13 |
14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/proposal_updated/message.html: -------------------------------------------------------------------------------- 1 | {% load account_tags %} 2 | {% load i18n %} 3 | {% user_display user as username %} 4 |

5 | {% blocktrans with title=proposal.title %}{{ username }} has made changes to {{ title }} which you have previously reviewed or commented on.{% endblocktrans %} 6 |

7 |

8 | {% url 'review_detail' proposal.pk as detail_url %} 9 | {% blocktrans %}View the latest version of the proposal online at http://{{ current_site }}{{ detail_url }}{% endblocktrans %} 10 |

11 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/_result_notification_prepare_help.html: -------------------------------------------------------------------------------- 1 | Body may include the following variables which will be substituted in the email with a value 2 | specific to each proposal: 3 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_utilities-background.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Contextual backgrounds 3 | // 4 | 5 | // Inverse 6 | // TODO: redo this as a proper class 7 | .bg-inverse { 8 | color: $gray-lighter; 9 | background-color: $gray-dark; 10 | } 11 | 12 | .bg-faded { 13 | background-color: $gray-lightest; 14 | } 15 | 16 | @include bg-variant('.bg-primary', $brand-primary); 17 | 18 | @include bg-variant('.bg-success', $brand-success); 19 | 20 | @include bg-variant('.bg-info', $brand-info); 21 | 22 | @include bg-variant('.bg-warning', $brand-warning); 23 | 24 | @include bg-variant('.bg-danger', $brand-danger); 25 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/sponsor_signup/message.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% blocktrans with sponsor_name=sponsor.name applicant=sponsor.applicant contact=sponsor.contact_name email=sponsor.contact_email level=sponsor.level %} 3 |

{{ sponsor_name }} has applied to be a sponsor.

4 | 5 | 12 | {% endblocktrans %} 13 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/schedule/_slot_edit.html: -------------------------------------------------------------------------------- 1 | {% load i18n bootstrap %} 2 | 15 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; 3 | margin-bottom: $spacer-y; 4 | list-style: none; 5 | background-color: $breadcrumb-bg; 6 | @include border-radius($border-radius); 7 | @include clearfix; 8 | 9 | > li { 10 | float: left; 11 | 12 | + li::before { 13 | padding-right: .5rem; 14 | padding-left: .5rem; 15 | color: $breadcrumb-divider-color; 16 | content: "#{$breadcrumb-divider}"; 17 | } 18 | } 19 | 20 | > .active { 21 | color: $breadcrumb-active-color; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | @mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) { 4 | .page-link { 5 | padding: $padding-vertical $padding-horizontal; 6 | font-size: $font-size; 7 | line-height: $line-height; 8 | } 9 | 10 | .page-item { 11 | &:first-child { 12 | .page-link { 13 | @include border-left-radius($border-radius); 14 | } 15 | } 16 | &:last-child { 17 | .page-link { 18 | @include border-right-radius($border-radius); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/teams_user_applied/message.html: -------------------------------------------------------------------------------- 1 | {% load i18n account_tags %} 2 | {% user_display user as username %} 3 | {% blocktrans with team_name=team team_url=team.get_absolute_url site_name=current_site.name site_url=current_site %} 4 |

5 | User "{{ username }}" has applied to join {{ team_name }} on {{ site_name }}. 6 |

7 | 8 |

9 | To accept this application and see any other pending applications, visit the following url: 10 | http://{{ site_url }}{{ team_url }} 11 |

12 | {% endblocktrans %} 13 | -------------------------------------------------------------------------------- /djangocon/templates/contact_form/contact_form_sent.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | {% load bootstrap %} 5 | 6 | 7 | {% block head_title %}Contact Us{% endblock head_title %} 8 | {% block page_title %}Contact Us{% endblock page_title %} 9 | 10 | {% block body %} 11 |
12 |

Contact Us

13 |
14 | 15 | 16 |
17 |
18 |
19 |

Thank you for contacting us. We will get back to you as soon as possible.

20 |
21 |
22 |
23 | {% endblock body %} 24 | -------------------------------------------------------------------------------- /client/scss/common/bootstrap/_buttons.scss: -------------------------------------------------------------------------------- 1 | 2 | .btn-primary { 3 | @include button-variant($white, $blue, $blue); 4 | } 5 | .btn-secondary { 6 | @include button-variant($white, $blue, $blue); 7 | } 8 | .btn-info { 9 | @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border); 10 | } 11 | .btn-success { 12 | @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border); 13 | } 14 | .btn-warning { 15 | @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border); 16 | } 17 | .btn-danger { 18 | @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border); 19 | } 20 | 21 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/speaker_invite/message.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% url 'speaker_create_token' token as token_url %} 3 | {% blocktrans with invitator=proposal.speaker.name title=proposal.title site_name=current_site.name %} 4 |

{{ invitator }} attached you as an additional speaker to a 5 | talk proposal for {{ site_name }} entitled "{{ title }}".

6 | 7 |

Go to

8 | 9 |

http://{{ current_site }}{{ token_url }}

10 | 11 |

to confirm.

12 | 13 |

If you don't have account on the website, you will be asked to create one.

14 | {% endblocktrans %} 15 | -------------------------------------------------------------------------------- /djangocon/templates/includes/news_teasers.html: -------------------------------------------------------------------------------- 1 | 2 | {% for post in latestposts %} 3 | {% if forloop.first %} 4 |
5 | {% endif %} 6 |
7 |
8 |
9 |

{{ post.title }}

10 |

{{ post.teaser_html|safe }}

11 | read more... 12 |
13 |
14 |
15 | {% if forloop.counter|divisibleby:3 %} 16 |
17 |
18 | {% elif forloop.last %} 19 |
20 | {% endif %} 21 | {% endfor %} -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/proposal_leave.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/proposals/base.html" %} 2 | 3 | {% block body %} 4 | 5 |
6 |

Leaving {{ proposal.title }}

7 |
8 | 9 |
10 |
11 |
12 | 13 |
14 | {% csrf_token %} 15 |

Are you sure you wish to leave as a speaker on {{ proposal.title }}?

16 | 17 |
18 | 19 |
20 |
21 |
22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /djangocon/templates/account/email_confirmed.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}{% trans "Email confirmed" %}{% endblock %} 6 | 7 | {% block body %} 8 |
9 |

{% trans "Email confirmed" %}

10 |
11 | 12 |
13 |
14 |
15 |
16 |

{% blocktrans with email=confirmation.email_address.email %}You have confirmed {{ email }}{% endblocktrans %}

17 |
18 |
19 |
20 |
21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /client/scss/base.scss: -------------------------------------------------------------------------------- 1 | 2 | @import "common/bootstrap/variables"; 3 | @import "vendor/bootstrap/bootstrap"; 4 | @import "vendor/chosen/chosen"; 5 | @import "common/bootstrap/type"; 6 | @import "common/bootstrap/navbar"; 7 | @import "common/bootstrap/dropdown"; 8 | @import "common/bootstrap/buttons"; 9 | @import "common/bootstrap/modal"; 10 | @import "common/bootstrap/tables"; 11 | @import "common/forms"; 12 | @import "common/global"; 13 | @import "common/poster"; 14 | @import "common/header"; 15 | @import "common/footer"; 16 | @import "common/dashboard"; 17 | @import "common/proposals"; 18 | @import "common/sponsorship"; 19 | @import "common/blog"; 20 | @import "common/boxes"; 21 | @import "common/schedule"; -------------------------------------------------------------------------------- /djangocon/templates/symposion/emails/proposal_new_message/message.html: -------------------------------------------------------------------------------- 1 | {% load account_tags %} 2 | {% load i18n %} 3 | {% user_display message.user as user %} 4 |

5 | {% blocktrans with title=proposal.title %}{{ user }} has added a message on {{ title }}.{% endblocktrans %} 6 |

7 |
8 | {{ message.message|safe }} 9 |
10 |

11 | {% if reviewer %}{% url 'review_detail' proposal.pk as detail_url %}{% else %}{% url 'proposal_detail' proposal.pk as detail_url %}{% endif %} 12 | {% blocktrans %} Respond online at http://{{ current_site }}{{ detail_url }}#proposal-feedback{% endblocktrans %} 13 |

14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "djangocon.us_2016", 3 | "version": "1.0.0", 4 | "description": "Front-end portion of DjangoCon 2016", 5 | "repository": "https://github.com/djangocon/2016.djangocon.us", 6 | "main": "build/js/base.js", 7 | "scripts": { 8 | "postinstall": "make -j4 all" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "autoprefixer": "^6.3.1", 14 | "babelify": "^7.2.0", 15 | "bootstrap": "^4.0.0-alpha.2", 16 | "browserify": "^13.0.0", 17 | "jquery": "^2.2.0", 18 | "node-sass": "^3.4.2", 19 | "postcss-cli": "^2.5.0", 20 | "tether": "^1.2.0", 21 | "uglifyjs": "^2.4.10" 22 | }, 23 | "devDependencies": { 24 | "watchify": "^3.7.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | @mixin list-group-item-variant($state, $background, $color) { 4 | .list-group-item-#{$state} { 5 | color: $color; 6 | background-color: $background; 7 | } 8 | 9 | a.list-group-item-#{$state}, 10 | button.list-group-item-#{$state} { 11 | color: $color; 12 | 13 | .list-group-item-heading { 14 | color: inherit; 15 | } 16 | 17 | @include hover-focus { 18 | color: $color; 19 | background-color: darken($background, 5%); 20 | } 21 | 22 | &.active { 23 | @include plain-hover-focus { 24 | color: #fff; 25 | background-color: $color; 26 | border-color: $color; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /djangocon/templates/pinax/pages/file_create.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load bootstrap %} 4 | 5 | {% block head_title %}Upload File{% endblock %} 6 | 7 | {% block body %} 8 |
9 |

Upload File

10 |
11 | 12 |
13 |
14 |
15 | 16 |
17 | {% csrf_token %} 18 | {{ form|bootstrap }} 19 |
20 | 21 |
22 |
23 | 24 |
25 |
26 |
27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /djangocon/templates/includes/footer.html: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /djangocon/templates/account/delete.html: -------------------------------------------------------------------------------- 1 | {% extends "account/base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block body_class %}account account-delete{% endblock %} 6 | 7 | {% block head_title %}{% trans "Delete Account" %}{% endblock %} 8 | 9 | {% block body %} 10 |

{% trans "Delete Account" %}

11 | 12 |

{% blocktrans %}If you go ahead and delete your account, your information will be expunged within {{ ACCOUNT_DELETION_EXPUNGE_HOURS }} hours.{% endblocktrans %}

13 | 14 |
15 | {% csrf_token %} 16 | 17 |
18 | 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Django==1.9.6 2 | pinax-theme-bootstrap==7.3.0 3 | django-user-accounts==1.3.1 4 | metron==1.3.7 5 | pinax-eventlog==1.1.1 6 | dj-database-url==0.4.0 7 | gunicorn==19.4.5 8 | psycopg2==2.6.1 9 | pinax-pages==0.4.2 10 | pinax-boxes==2.1.2 11 | whitenoise==2.0.6 12 | 13 | # run off of master for now 14 | git+https://github.com/pinax/symposion.git 15 | 16 | # DjangoCon custom requirements 17 | django-contact-form==1.2 18 | django-markitup==2.3.1 19 | django-waffle==0.10.1 20 | fake-factory==0.5.6 21 | google-api-python-client==1.5.0 22 | invoke==0.12.2 23 | pinax-blog==4.3.0 24 | Unipath==1.1 25 | 26 | # Bootstrap 4 form styles 27 | git+https://github.com/djangocon/django-bootstrap-form.git 28 | 29 | tablib==0.11.2 30 | unidecode==0.4.19 31 | unicodecsv==0.14.1 32 | -------------------------------------------------------------------------------- /djangocon/templates/account/password_reset_token_fail.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}{% trans "Bad token" %}{% endblock %} 6 | 7 | {% block body %} 8 |
9 |

{% trans "Bad token" %}

10 |
11 | 12 |
13 |
14 |
15 |
16 | {% url "account_password_reset" as url %} 17 |

{% blocktrans %}The password reset link was invalid, possibly because it has already been used. Please request a new password reset.{% endblocktrans %}

18 |
19 |
20 |
21 |
22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_responsive-embed.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .embed-responsive { 4 | position: relative; 5 | display: block; 6 | height: 0; 7 | padding: 0; 8 | overflow: hidden; 9 | 10 | .embed-responsive-item, 11 | iframe, 12 | embed, 13 | object, 14 | video { 15 | position: absolute; 16 | top: 0; 17 | bottom: 0; 18 | left: 0; 19 | width: 100%; 20 | height: 100%; 21 | border: 0; 22 | } 23 | } 24 | 25 | .embed-responsive-21by9 { 26 | padding-bottom: percentage(9 / 21); 27 | } 28 | 29 | .embed-responsive-16by9 { 30 | padding-bottom: percentage(9 / 16); 31 | } 32 | 33 | .embed-responsive-4by3 { 34 | padding-bottom: percentage(3 / 4); 35 | } 36 | 37 | .embed-responsive-1by1 { 38 | padding-bottom: percentage(1 / 1); 39 | } 40 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_table-row.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | @mixin table-row-variant($state, $background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table-#{$state} { 7 | &, 8 | > th, 9 | > td { 10 | background-color: $background; 11 | } 12 | } 13 | 14 | // Hover states for `.table-hover` 15 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 16 | .table-hover { 17 | $hover-background: darken($background, 5%); 18 | 19 | .table-#{$state} { 20 | @include hover { 21 | background-color: $hover-background; 22 | 23 | > td, 24 | > th { 25 | background-color: $hover-background; 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /djangocon/templates/_default_sidebar.html: -------------------------------------------------------------------------------- 1 | {% load sponsorship_tags %} 2 | {% load thumbnail %} 3 | {% load pinax_boxes_tags %} 4 | 5 | {% sponsor_levels as levels %} 6 | 7 |

Sponsors

8 | 9 | 25 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_close.scss: -------------------------------------------------------------------------------- 1 | .close { 2 | float: right; 3 | font-size: ($font-size-base * 1.5); 4 | font-weight: $close-font-weight; 5 | line-height: 1; 6 | color: $close-color; 7 | text-shadow: $close-text-shadow; 8 | opacity: .2; 9 | 10 | @include hover-focus { 11 | color: $close-color; 12 | text-decoration: none; 13 | cursor: pointer; 14 | opacity: .5; 15 | } 16 | } 17 | 18 | // Additional properties for button version 19 | // iOS requires the button element instead of an anchor tag. 20 | // If you want the anchor version, it requires `href="#"`. 21 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 22 | button.close { 23 | padding: 0; 24 | cursor: pointer; 25 | background: transparent; 26 | border: 0; 27 | -webkit-appearance: none; 28 | } 29 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Only display content to screen readers 2 | // 3 | // See: http://a11yproject.com/posts/how-to-hide-content/ 4 | 5 | @mixin sr-only { 6 | position: absolute; 7 | width: 1px; 8 | height: 1px; 9 | padding: 0; 10 | margin: -1px; 11 | overflow: hidden; 12 | clip: rect(0,0,0,0); 13 | border: 0; 14 | } 15 | 16 | // Use in conjunction with .sr-only to only display content when it's focused. 17 | // 18 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 19 | // 20 | // Credit: HTML5 Boilerplate 21 | 22 | @mixin sr-only-focusable { 23 | &:active, 24 | &:focus { 25 | position: static; 26 | width: auto; 27 | height: auto; 28 | margin: 0; 29 | overflow: visible; 30 | clip: auto; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/document_create.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/proposals/base.html" %} 2 | 3 | {% load bootstrap %} 4 | 5 | {% block page_title %}Upload Document to '{{ proposal.title }}'{% endblock %} 6 | 7 | {% block body %} 8 |
9 |

Upload Document to '{{ proposal.title }}'

10 |
11 | 12 |
13 |
14 |
15 | 16 |
17 | {% csrf_token %} 18 | {{ form|bootstrap }} 19 |
20 | 21 |
22 |
23 |
24 |
25 |
26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /djangocon/templates/account/base.html: -------------------------------------------------------------------------------- 1 | {% extends "theme_bootstrap/subnav_base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block body_class %}account{% endblock %} 6 | 7 | {% block subnav %} 8 |
9 |
{% trans "Settings" %}
10 |
11 | 14 | 17 | 20 |
21 |
22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /client/scss/common/bootstrap/_variables.scss: -------------------------------------------------------------------------------- 1 | // $enable-flex: true !default; 2 | 3 | 4 | $font-family-serif: 'OfficinaSerifITCW01-Boo_734540', Georgia, "Times New Roman", Times, serif !default; 5 | $font-family-brand: 'liberatorheavy', Helvetica, Arial, sans-serif !default; 6 | $font-family-base: $font-family-serif !default; 7 | 8 | $headings-font-family: $font-family-brand; 9 | 10 | $container-max-widths: ( 11 | sm: 576px, 12 | md: 720px, 13 | lg: 940px, 14 | xl: 1140px 15 | ) !default; 16 | 17 | 18 | $red: #cc0000; 19 | $white: #ffffff; 20 | $blue: #004b8d; 21 | $light-gray: #fbfaf6; 22 | $poster-border-width: 20px; 23 | 24 | // div[class="row"] { 25 | // border: 1px dotted rgba(0, 0, 0, 0.5); 26 | // } 27 | 28 | // div[class^="col-"] { 29 | // background-color: rgba(255, 0, 0, 0.2); 30 | // } -------------------------------------------------------------------------------- /djangocon/templates/pinax/blog/blog_list.html: -------------------------------------------------------------------------------- 1 | {% extends "pinax/blog/blog_base.html" %} 2 | 3 | {% block head_title_base %}{{ SITE_NAME }}{% endblock %} 4 | 5 | {% block content %} 6 | {% if post_list %} 7 |
8 | {% for post in post_list %} 9 |
10 |

{{ post.title }}

11 | {% include "pinax/blog/dateline.html" %} 12 |
{{ post.teaser_html|safe }}
13 |

read more...

14 |
15 | {% endfor %} 16 |
17 | {% include "pagination/builtin_pagination_reverse.html" %} 18 | {% else %} 19 |

No blog posts have been published.

20 | {% endif %} 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_cards.scss: -------------------------------------------------------------------------------- 1 | // Card variants 2 | 3 | @mixin card-variant($background, $border) { 4 | background-color: $background; 5 | border-color: $border; 6 | } 7 | 8 | @mixin card-outline-variant($color) { 9 | background-color: transparent; 10 | border-color: $color; 11 | } 12 | 13 | // 14 | // Inverse text within a card for use with dark backgrounds 15 | // 16 | 17 | @mixin card-inverse { 18 | .card-header, 19 | .card-footer { 20 | border-bottom: $card-border-width solid rgba(255,255,255,.2); 21 | } 22 | .card-header, 23 | .card-footer, 24 | .card-title, 25 | .card-blockquote { 26 | color: #fff; 27 | } 28 | .card-link, 29 | .card-text, 30 | .card-blockquote > footer { 31 | color: rgba(255,255,255,.65); 32 | } 33 | .card-link { 34 | @include hover-focus { 35 | color: $card-link-hover-color; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/proposal_cancel.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/proposals/base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}{% trans 'Cancel Proposal' %}{% endblock %} 6 | 7 | {% block body %} 8 | 9 |
10 |

Cancel: {{ proposal.title }}

11 |
12 | 13 |
14 |
15 |
16 | 17 |
18 | {% csrf_token %} 19 |

Are you sure you want to cancel {{ proposal.title }}?

20 | 21 | {% trans 'No, keep it for now' %} 22 |
23 | 24 |
25 |
26 |
27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_border-radius.scss: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | @mixin border-radius($radius: $border-radius) { 4 | @if $enable-rounded { 5 | border-radius: $radius; 6 | } 7 | } 8 | 9 | @mixin border-top-radius($radius) { 10 | @if $enable-rounded { 11 | border-top-right-radius: $radius; 12 | border-top-left-radius: $radius; 13 | } 14 | } 15 | 16 | @mixin border-right-radius($radius) { 17 | @if $enable-rounded { 18 | border-bottom-right-radius: $radius; 19 | border-top-right-radius: $radius; 20 | } 21 | } 22 | 23 | @mixin border-bottom-radius($radius) { 24 | @if $enable-rounded { 25 | border-bottom-right-radius: $radius; 26 | border-bottom-left-radius: $radius; 27 | } 28 | } 29 | 30 | @mixin border-left-radius($radius) { 31 | @if $enable-rounded { 32 | border-bottom-left-radius: $radius; 33 | border-top-left-radius: $radius; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /djangocon/proposals/migrations/0003_auto_20160322_0259.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.4 on 2016-03-22 02:59 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('proposals', '0002_auto_20160229_1817'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='talkproposal', 17 | name='audience_level', 18 | field=models.IntegerField(choices=[(1, b'Novice'), (3, b'Intermediate or Advanced'), (4, b'Not Applicable')]), 19 | ), 20 | migrations.AlterField( 21 | model_name='tutorialproposal', 22 | name='audience_level', 23 | field=models.IntegerField(choices=[(1, b'Novice'), (3, b'Intermediate or Advanced'), (4, b'Not Applicable')]), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /djangocon/templates/account/logout.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}{% trans "Log out" %}{% endblock %} 6 | 7 | {% block body %} 8 |
9 |

{% trans "Hope to see you soon!" %}

10 |
11 |
12 |
13 |
14 |
15 |
16 | {% trans "Log out" %} 17 |
18 | {% csrf_token %} 19 |

{% trans "Are you sure you want to log out?" %}

20 | 21 |
22 |
23 |
24 |
25 |
26 |
27 | {% endblock %} -------------------------------------------------------------------------------- /djangocon/templates/account/email_confirmation_sent.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}{% trans "Confirm your email address" %}{% endblock %} 6 | 7 | {% block body %} 8 |
9 |

{% trans "Confirm your email address" %}

10 |
11 | 12 |
13 |
14 |
15 |
16 |

{% blocktrans %}We have sent you an email to {{ email }} for verification. Follow the link provided to finalize the signup process. If you do not receive it within a few minutes, contact us at {{ THEME_CONTACT_EMAIL }}.{% endblocktrans %}

17 |

{% trans "Go back" %}

18 |
19 |
20 |
21 |
22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/proposal_submit.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/proposals/base.html" %} 2 | 3 | {% load pinax_boxes_tags %} 4 | {% load i18n %} 5 | 6 | {% block page_title %}{% trans "Submit A Proposal" %}{% endblock %} 7 | 8 | {% block body %} 9 | 10 |
11 |

Submit Proposal

12 |
13 | 14 |
15 |
16 |
17 | 18 | {% box "proposal_submit" %} 19 | 20 | {% if kinds %} 21 |

Select what kind of proposal you'd like to submit:

22 | 23 | {% for kind in kinds %} 24 | {{ kind }} 25 | {% endfor %} 26 | {% else %} 27 |

Proposals are not currently open for submission.

28 | {% endif %} 29 |
30 |
31 |
32 | 33 | {% endblock %} 34 | -------------------------------------------------------------------------------- /client/scss/common/_blog.scss: -------------------------------------------------------------------------------- 1 | .post-card { 2 | min-height: 250px; 3 | color: $blue; 4 | h4, a { 5 | color: $blue; 6 | } 7 | .btn { 8 | color: $white; 9 | text-decoration: none; 10 | } 11 | text-align: left; 12 | } 13 | 14 | .blue-wrapper .post-card { 15 | a { 16 | color: $blue; 17 | } 18 | } 19 | 20 | .blog-categories { 21 | ul { 22 | padding-left: 0; 23 | } 24 | li { 25 | list-style: none; 26 | margin-left: 0; 27 | } 28 | } 29 | 30 | .post-list { 31 | .post { 32 | margin-bottom: 3em; 33 | h2 { 34 | margin-bottom: 0; 35 | } 36 | } 37 | } 38 | 39 | .post-meta { 40 | display: block; 41 | font-size: 0.8em; 42 | margin-bottom: 1em 43 | } 44 | 45 | .post-detail { 46 | h1, h2, h3, h4 { 47 | margin-top: 2em; 48 | margin-bottom: 0.825em; 49 | // &:nth-of-type(1) { 50 | // margin-top: 0; 51 | // } 52 | } 53 | ul { 54 | padding-left: 1.2em; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /djangocon/templates/pinax/pages/page_edit.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load sitetree %} 4 | {% load i18n %} 5 | {% load bootstrap %} 6 | {% load static from staticfiles %} 7 | 8 | {% block body_class %}cms-page{% endblock %} 9 | 10 | {% block head_title %}Edit Page{% endblock %} 11 | 12 | {% block page_title %}{% trans "Edit page at:" %} {{ path }}{% endblock %} 13 | {% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %} 14 | 15 | {% block body %} 16 | 17 |
18 |
19 | 20 |
21 |
22 |
23 |
24 | {% csrf_token %} 25 | {{ form|bootstrap }} 26 |
27 | 28 |
29 |
30 |
31 |
32 |
33 | {% endblock %} 34 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/proposal_edit.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/proposals/base.html" %} 2 | 3 | {% load bootstrap %} 4 | 5 | {% block head_title %}Editing {{ proposal.title }}{% endblock %} 6 | 7 | {% block body %} 8 |
9 |

Edit: {{ proposal.title }}

10 |
11 | 12 |
13 |
14 |
15 | 16 |

Manage speakers

17 | 18 |
19 | {% csrf_token %} 20 | {{ form|bootstrap }} 21 |
22 | 23 | Cancel 24 |
25 |
26 |
27 |
28 |
29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /djangocon/templates/account/settings.html: -------------------------------------------------------------------------------- 1 | {% extends "account/base.html" %} 2 | 3 | {% load i18n %} 4 | {% load bootstrap %} 5 | 6 | {% block body_class %}account account-settings{% endblock %} 7 | 8 | {% block head_title %}{% trans "Account" %}{% endblock %} 9 | 10 | {% block body %} 11 |
12 |

{% trans "Account" %}

13 |
14 | 15 |
16 |
17 |
18 |
19 |
20 | {% trans "Account" %} 21 | {% csrf_token %} 22 | {{ form|bootstrap }} 23 | 24 |
25 |
26 |
27 |
28 |
29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /djangocon/templates/contact_form/contact_form.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load bootstrap %} 4 | {% load cache %} 5 | {% load i18n %} 6 | {% load pinax_boxes_tags %} 7 | 8 | {% block head_title %}Contact Us{% endblock head_title %} 9 | {% block page_title %}Contact Us{% endblock page_title %} 10 | 11 | {% block body %} 12 |
13 |

Contact Us

14 |
15 | 16 |
17 |
18 |
19 |
20 | {% csrf_token %} 21 |
22 | {{ form|bootstrap }} 23 |
24 |
25 | 26 |
27 |
28 | 29 |
30 |
31 |
32 | {% endblock body %} 33 | -------------------------------------------------------------------------------- /fixtures/conference.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pk": 1, 4 | "model": "symposion_conference.conference", 5 | "fields": { 6 | "timezone": "US/Eastern", 7 | "start_date": "2040-01-01", 8 | "end_date": "2040-01-04", 9 | "title": "DjangoCon US" 10 | } 11 | }, 12 | { 13 | "pk": 1, 14 | "model": "symposion_conference.section", 15 | "fields": { 16 | "conference": 1, 17 | "start_date": "2040-01-01", 18 | "name": "Tutorials", 19 | "end_date": "2040-01-01", 20 | "slug": "tutorials" 21 | } 22 | }, 23 | { 24 | "pk": 2, 25 | "model": "symposion_conference.section", 26 | "fields": { 27 | "conference": 1, 28 | "start_date": "2040-01-01", 29 | "name": "General Sessions", 30 | "end_date": "2040-01-01", 31 | "slug": "general-sessions" 32 | } 33 | } 34 | ] 35 | -------------------------------------------------------------------------------- /djangocon/templates/account/email_confirm.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}{% trans "Confirm Email" %}{% endblock %} 6 | 7 | {% block body %} 8 |
9 |

{% trans "Confirm Email" %}

10 |
11 | 12 |
13 |
14 |
15 |
16 | {% trans "Confirm Email" %} 17 |
18 | {% csrf_token %} 19 |

{% blocktrans with email=confirmation.email_address.email %}Confirm email address {{ email }}?{% endblocktrans %}

20 | 21 |
22 |
23 |
24 |
25 |
26 | {% endblock %} -------------------------------------------------------------------------------- /djangocon/templates/pinax/pages/page_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load sitetree %} 4 | {% load i18n %} 5 | {% load static from staticfiles %} 6 | 7 | {% block body_class %}cms-page{% endblock %} 8 | 9 | {% block head_title %}{{ page.title }}{% endblock %} 10 | 11 | {% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %} 12 | 13 | {% block body %} 14 | 15 |
16 |

{{ page.title }}

17 |
18 | 19 |
20 |
21 | {% if editable %} 22 | 28 | {% endif %} 29 | 30 |
31 |
32 | {{ page.body_html|safe }} 33 |
34 |
35 | 36 |
37 |
38 | 39 | {% endblock %} 40 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_utilities-responsive.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive utilities 3 | // 4 | 5 | @each $bp in map-keys($grid-breakpoints) { 6 | .hidden-#{$bp}-up { 7 | @include media-breakpoint-up($bp) { 8 | display: none !important; 9 | } 10 | } 11 | .hidden-#{$bp}-down { 12 | @include media-breakpoint-down($bp) { 13 | display: none !important; 14 | } 15 | } 16 | } 17 | 18 | 19 | // Print utilities 20 | // 21 | // Media queries are placed on the inside to be mixin-friendly. 22 | 23 | .visible-print-block { 24 | display: none !important; 25 | 26 | @media print { 27 | display: block !important; 28 | } 29 | } 30 | .visible-print-inline { 31 | display: none !important; 32 | 33 | @media print { 34 | display: inline !important; 35 | } 36 | } 37 | .visible-print-inline-block { 38 | display: none !important; 39 | 40 | @media print { 41 | display: inline-block !important; 42 | } 43 | } 44 | 45 | .hidden-print { 46 | @media print { 47 | display: none !important; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/speakers/speaker_edit.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/speakers/base.html" %} 2 | 3 | {% load bootstrap %} 4 | {% load i18n %} 5 | {% load pinax_boxes_tags %} 6 | {% load static from staticfiles %} 7 | 8 | {% block page_title %}{% trans "Edit Speaker Profile" %}{% endblock %} 9 | 10 | {% block body %} 11 |
12 |

{% trans "Edit Speaker" %}

13 |
14 | 15 |
16 |
17 |
18 | {% box "speaker-profile" %} 19 | 20 |
21 | {% csrf_token %} 22 | {% trans "Edit Speaker Profile" %} 23 | {{ speaker_form|bootstrap }} 24 |
25 | 26 | Cancel 27 |
28 |
29 |
30 |
31 |
32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /djangocon/templates/account/password_change.html: -------------------------------------------------------------------------------- 1 | {% extends "account/base.html" %} 2 | 3 | {% load i18n %} 4 | {% load bootstrap %} 5 | 6 | {% block body_class %}account account-password{% endblock %} 7 | 8 | {% block head_title %}{% trans "Change password" %}{% endblock %} 9 | 10 | {% block body %} 11 |
12 |

{% trans "Change password" %}

13 |
14 | 15 |
16 |
17 |
18 |
19 |
20 | {% trans "Change password" %} 21 |
22 | {% csrf_token %} 23 | {{ form|bootstrap }} 24 | 25 |
26 |
27 |
28 |
29 |
30 |
31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/sponsorship/add.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load bootstrap %} 4 | {% load i18n %} 5 | {% load pinax_boxes_tags %} 6 | {% load static from staticfiles %} 7 | 8 | {% block head_title %}{% trans "Add a Sponsor" %}{% endblock %} 9 | 10 | {% block body_class %}sponsorships{% endblock %} 11 | 12 | {% block body %} 13 | 14 |
15 |

{% trans "About Our Sponsors" %}

16 |
17 | 18 |
19 |
20 |
21 |
22 | {% csrf_token %} 23 | {% trans "Add a Sponsor" %} 24 | {{ form|bootstrap }} 25 |
26 | 27 | Cancel 28 |
29 |
30 |
31 |
32 |
33 | 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /djangocon/templates/account/password_reset_token.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | {% load bootstrap %} 5 | 6 | {% block head_title %}{% trans "Set your new password" %}{% endblock %} 7 | 8 | {% block body %} 9 | 10 |
11 |
12 | 13 |
14 |
15 |
16 |
17 |
18 | {% trans "Set your new password" %} 19 |
20 | {% csrf_token %} 21 | {{ form|bootstrap }} 22 | 23 |
24 |
25 |
26 |
27 |
28 |
29 | 30 | {% endblock %} -------------------------------------------------------------------------------- /notify.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from __future__ import print_function 3 | import sys 4 | import subprocess 5 | import re 6 | import datetime 7 | 8 | def notify(text, title="Error"): 9 | script = 'display notification "{}" with title "Error" subtitle "world" sound name "Funk"'.format(text) 10 | subprocess.Popen(['osascript', '-e', script]) 11 | 12 | 13 | def watch_for_error(proc): 14 | regex = re.compile(r'^\s+"formatted"\: "Error: (.*)",$', 15 | re.UNICODE | re.DOTALL | re.MULTILINE) 16 | for line in iter(proc.stderr.readline, b''): 17 | print(datetime.datetime.now()) 18 | print(line, file=sys.stderr, end="") 19 | try: 20 | error = regex.match(line).groups()[0] 21 | notify(error) 22 | except AttributeError: 23 | pass 24 | 25 | 26 | def main(): 27 | cmd = sys.argv[1:] 28 | proc = subprocess.Popen(cmd, stderr=subprocess.PIPE) 29 | try: 30 | watch_for_error(proc) 31 | except KeyboardInterrupt: 32 | proc.kill() 33 | exit() 34 | 35 | if __name__ == '__main__': 36 | main() -------------------------------------------------------------------------------- /client/scss/common/bootstrap/_navbar.scss: -------------------------------------------------------------------------------- 1 | .navbar { 2 | font-family: $font-family-brand; 3 | background: $red; 4 | color: $red; 5 | border-radius: 0rem; 6 | z-index: 3; 7 | box-shadow: 8 | 0 0 0 3px rgba(255,255,255,1), 9 | 0 0 0 10px $blue; 10 | } 11 | 12 | // White links against a dark background 13 | .navbar-dark { 14 | .navbar-brand { 15 | color: $navbar-dark-active-color; 16 | 17 | @include hover-focus { 18 | color: $navbar-dark-active-color; 19 | } 20 | } 21 | 22 | .navbar-nav { 23 | .nav-link { 24 | color: $navbar-dark-color; 25 | 26 | @include hover-focus { 27 | color: $navbar-dark-hover-color; 28 | } 29 | } 30 | 31 | .open > .nav-link, 32 | .active > .nav-link, 33 | .nav-link.open, 34 | .nav-link.active { 35 | @include plain-hover-focus { 36 | color: $navbar-dark-active-color; 37 | } 38 | } 39 | } 40 | 41 | .navbar-divider { 42 | background-color: rgba(255,255,255,.075); 43 | } 44 | } 45 | 46 | .navbar-toggler { 47 | color: $white; 48 | border: 0px solid transparent; 49 | } 50 | 51 | 52 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/schedule/schedule_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | {% load pinax_boxes_tags %} 5 | {% load cache %} 6 | {% load sitetree %} 7 | 8 | {% block head_title %}Conference Schedule{% endblock %} 9 | 10 | {% block body_class %}full conference-schedule{% endblock %} 11 | 12 | {% block right %} 13 | {% endblock %} 14 | 15 | {% block body %} 16 | 17 |
18 |

{{ schedule.section }} Schedule

19 |
20 | 21 |
22 |
23 | 24 | {% box "schedule_top" %} 25 | 26 | {% cache 600 "schedule-table" schedule.section %} 27 | {% for timetable in days %} 28 |
29 |

{{ timetable.day.date }}

30 | {% include "symposion/schedule/_grid.html" %} 31 |
32 | {% endfor %} 33 | {% endcache %} 34 | 35 |
36 | {% box "schedule_bottom" %} 37 |
38 | 39 |
40 |
41 | 42 | {% endblock %} 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | *.egg-info/ 23 | .installed.cfg 24 | *.egg 25 | 26 | # PyInstaller 27 | # Usually these files are written by a python script from a template 28 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 29 | *.manifest 30 | *.spec 31 | 32 | # Installer logs 33 | pip-log.txt 34 | pip-delete-this-directory.txt 35 | 36 | # Unit test / coverage reports 37 | htmlcov/ 38 | .tox/ 39 | .coverage 40 | .coverage.* 41 | .cache 42 | nosetests.xml 43 | coverage.xml 44 | *,cover 45 | 46 | # Translations 47 | *.mo 48 | *.pot 49 | 50 | # Django stuff: 51 | *.log 52 | 53 | # Sphinx documentation 54 | docs/_build/ 55 | 56 | # PyBuilder 57 | target/ 58 | 59 | 60 | # Misc 61 | dev.db 62 | /build 63 | /node_modules 64 | /var/ 65 | /tmp 66 | .DS_Store 67 | 68 | 69 | 70 | djangocon/settings/local.py 71 | pages.json 72 | dump.sql 73 | site_media 74 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/speakers/speaker_create.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/speakers/base.html" %} 2 | 3 | {% load bootstrap %} 4 | {% load i18n %} 5 | {% load pinax_boxes_tags %} 6 | {% load static from staticfiles %} 7 | 8 | {% block page_title %}{% trans "Create Speaker Profile" %}{% endblock %} 9 | 10 | {% block body %} 11 |
12 |

{% trans "Create Speaker Profile" %}

13 |
14 | 15 |
16 |
17 |
18 |
19 | {% box "speaker-profile" %} 20 | 21 |
22 | {% csrf_token %} 23 | {% trans "Create Speaker Profile" %} 24 | {{ speaker_form|bootstrap }} 25 |
26 | 27 | Cancel 28 |
29 |
30 |
31 |
32 |
33 |
34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /djangocon/templates/_account_bar.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load account_tags %} 3 | 4 | 5 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_hover.scss: -------------------------------------------------------------------------------- 1 | @mixin hover { 2 | @if $enable-hover-media-query { 3 | // See Media Queries Level 4: http://drafts.csswg.org/mediaqueries/#hover 4 | // Currently shimmed by https://github.com/twbs/mq4-hover-shim 5 | @media (hover: hover) { 6 | &:hover { @content } 7 | } 8 | } 9 | @else { 10 | &:hover { @content } 11 | } 12 | } 13 | 14 | @mixin hover-focus { 15 | @if $enable-hover-media-query { 16 | &:focus { @content } 17 | @include hover { @content } 18 | } 19 | @else { 20 | &:focus, 21 | &:hover { 22 | @content 23 | } 24 | } 25 | } 26 | 27 | @mixin plain-hover-focus { 28 | @if $enable-hover-media-query { 29 | &, 30 | &:focus { 31 | @content 32 | } 33 | @include hover { @content } 34 | } 35 | @else { 36 | &, 37 | &:focus, 38 | &:hover { 39 | @content 40 | } 41 | } 42 | } 43 | 44 | @mixin hover-focus-active { 45 | @if $enable-hover-media-query { 46 | &:focus, 47 | &:active { 48 | @content 49 | } 50 | @include hover { @content } 51 | } 52 | @else { 53 | &:focus, 54 | &:active, 55 | &:hover { 56 | @content 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /djangocon/proposals/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('symposion_proposals', '__first__'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='TalkProposal', 16 | fields=[ 17 | ('proposalbase_ptr', models.OneToOneField(primary_key=True, to='symposion_proposals.ProposalBase', parent_link=True, auto_created=True, serialize=False)), 18 | ('audience_level', models.IntegerField(choices=[(1, b'Novice'), (3, b'Intermediate'), (2, b'Experienced')])), 19 | ('recording_release', models.BooleanField(help_text=b'By submitting your proposal, you agree to give permission to the conference organizers to record, edit, and release audio and/or video of your presentation. If you do not agree to this, please uncheck this box.', default=True)), 20 | ], 21 | options={ 22 | 'verbose_name': 'talk proposal', 23 | }, 24 | bases=('symposion_proposals.proposalbase',), 25 | ), 26 | ] 27 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_pager.scss: -------------------------------------------------------------------------------- 1 | .pager { 2 | padding-left: 0; 3 | margin-top: $spacer-y; 4 | margin-bottom: $spacer-y; 5 | text-align: center; 6 | list-style: none; 7 | @include clearfix(); 8 | 9 | li { 10 | display: inline; 11 | 12 | > a, 13 | > span { 14 | display: inline-block; 15 | padding: 5px 14px; 16 | background-color: $pager-bg; 17 | border: $pager-border-width solid $pager-border-color; 18 | border-radius: $pager-border-radius; 19 | } 20 | 21 | > a { 22 | @include hover-focus { 23 | text-decoration: none; 24 | background-color: $pager-hover-bg; 25 | } 26 | } 27 | } 28 | 29 | .disabled { 30 | > a { 31 | @include plain-hover-focus { 32 | color: $pager-disabled-color; 33 | cursor: $cursor-disabled; 34 | background-color: $pager-bg; 35 | } 36 | } 37 | > span { 38 | color: $pager-disabled-color; 39 | cursor: $cursor-disabled; 40 | background-color: $pager-bg; 41 | } 42 | } 43 | } 44 | 45 | .pager-next { 46 | > a, 47 | > span { 48 | float: right; 49 | } 50 | } 51 | 52 | .pager-prev { 53 | > a, 54 | > span { 55 | float: left; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_utilities-spacing.scss: -------------------------------------------------------------------------------- 1 | // Margin and Padding 2 | 3 | .m-x-auto { 4 | margin-right: auto !important; 5 | margin-left: auto !important; 6 | } 7 | 8 | @each $prop, $abbrev in (margin: m, padding: p) { 9 | @each $size, $lengths in $spacers { 10 | $length-x: map-get($lengths, x); 11 | $length-y: map-get($lengths, y); 12 | 13 | .#{$abbrev}-a-#{$size} { #{$prop}: $length-y $length-x !important; } // a = All sides 14 | .#{$abbrev}-t-#{$size} { #{$prop}-top: $length-y !important; } 15 | .#{$abbrev}-r-#{$size} { #{$prop}-right: $length-x !important; } 16 | .#{$abbrev}-b-#{$size} { #{$prop}-bottom: $length-y !important; } 17 | .#{$abbrev}-l-#{$size} { #{$prop}-left: $length-x !important; } 18 | 19 | // Axes 20 | .#{$abbrev}-x-#{$size} { 21 | #{$prop}-right: $length-x !important; 22 | #{$prop}-left: $length-x !important; 23 | } 24 | .#{$abbrev}-y-#{$size} { 25 | #{$prop}-top: $length-y !important; 26 | #{$prop}-bottom: $length-y !important; 27 | } 28 | } 29 | } 30 | 31 | // Positioning 32 | 33 | .pos-f-t { 34 | position: fixed; 35 | top: 0; 36 | right: 0; 37 | left: 0; 38 | z-index: $zindex-navbar-fixed; 39 | } 40 | -------------------------------------------------------------------------------- /djangocon/templates/pinax/pages/file_list.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% block head_title %}Uploaded Files{% endblock %} 4 | 5 | {% block body %} 6 | 7 |
8 |

Files

9 |
10 | 11 |
12 |
13 |
14 | 15 | {% for file in files %} 16 |
17 |
18 | {% csrf_token %} 19 | 20 |
21 |

{{ file.file }}

22 | Uploaded {{ file.created|date:"N j, Y" }} 23 |
24 | {% empty %} 25 |

No uploaded files.

26 | {% endfor %} 27 |
28 | 29 | 30 | Add File 31 | 32 |
33 |
34 |
35 |
36 | {% endblock %} 37 | -------------------------------------------------------------------------------- /client/scss/common/_global.scss: -------------------------------------------------------------------------------- 1 | body { 2 | overflow-x: hidden; 3 | position: relative; 4 | } 5 | 6 | * { 7 | -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */ 8 | font-weight: normal; 9 | } 10 | 11 | a { 12 | color: $blue; 13 | } 14 | 15 | .arrow-link { 16 | position: relative; 17 | &:before { 18 | text-decoration: none; 19 | content: '\21E2'; 20 | position: absolute; 21 | font-size: 1.5em; 22 | left: -27px; 23 | top: -7px; 24 | } 25 | } 26 | 27 | section { 28 | margin-bottom: 4em; 29 | h3 { 30 | margin-bottom: 1em; 31 | } 32 | } 33 | .page-content { 34 | h1, h2, h3, h4 { 35 | margin-top: 2em; 36 | margin-bottom: 0.825em; 37 | &:nth-of-type(1) { 38 | margin-top: 0; 39 | } 40 | } 41 | a { 42 | text-decoration: underline; 43 | } 44 | } 45 | 46 | // FOT DJANGO DBT 47 | 48 | // [hidden] { 49 | // display: block !important; 50 | // } 51 | 52 | .search { 53 | margin-bottom: 2em; 54 | } 55 | img { 56 | width: 100%; 57 | } 58 | 59 | input { 60 | color: $blue; 61 | } 62 | 63 | .btn-ticket { 64 | color: #fff; 65 | border-color: $white; 66 | border: 2px solid; 67 | background: transparent; 68 | } 69 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid($display: block) { 11 | display: $display; 12 | max-width: 100%; // Part 1: Set a maximum relative to the parent 13 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching 14 | } 15 | 16 | 17 | // Retina image 18 | // 19 | // Short retina mixin for setting background-image and -size. 20 | 21 | @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { 22 | background-image: url($file-1x); 23 | 24 | // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, 25 | // but doesn't convert dppx=>dpi. 26 | // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. 27 | // Compatibility info: http://caniuse.com/#feat=css-media-resolution 28 | @media 29 | only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx 30 | only screen and (min-resolution: 2dppx) { // Standardized 31 | background-image: url($file-2x); 32 | background-size: $width-1x $height-1x; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/schedule/schedule_conference.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | {% load pinax_boxes_tags %} 5 | {% load cache %} 6 | 7 | {% block head_title %}Conference Schedule{% endblock %} 8 | 9 | {% block body_class %}full conference-schedule{% endblock %} 10 | 11 | {% block right %} 12 | {% endblock %} 13 | 14 | {% block body %} 15 |
16 |

Conference Schedule

17 |
18 | 19 |
20 |
21 |
22 | 23 |
24 | 25 | {% block breadcrumbs %}{% endblock %} 26 |
27 | {% box "schedule_top" %} 28 | 29 | {% for section in sections %} 30 | {% cache 600 "schedule-table" section.schedule.section %} 31 | {% for timetable in section.days %} 32 |
33 |

{{ section.schedule.section.name }} — {{ timetable.day.date }}

34 |
35 | {% include "symposion/schedule/_grid.html" %} 36 | {% endfor %} 37 | {% endcache %} 38 | {% endfor %} 39 | 40 | {% box "schedule_bottom" %} 41 |
42 |
43 |
44 | {% endblock %} 45 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/_proposal_row.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ proposal.title }} 4 | 5 | 6 | {{ proposal.kind.name }} 7 | 8 | 9 | {% if proposal.cancelled %} 10 | Cancelled 11 | {% else %} 12 | {% if request.user == proposal.speaker.user %} 13 | {% if proposal.result.status == "accepted" %} 14 | Accepted 15 | {% else %} 16 | Submitted 17 | {% endif %} 18 | {% else %} 19 | Associated 20 | {% endif %} 21 | {% endif %} 22 | 23 | 24 | 25 | {% if not proposal.cancelled %} 26 | {% if request.user == proposal.speaker.user and proposal.can_edit %} 27 | Edit 28 | Manage Additional Speakers 29 | {% endif %} 30 | {% endif %} 31 | 32 | 33 | -------------------------------------------------------------------------------- /fixtures/proposal_base.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pk": 1, 4 | "model": "symposion_proposals.proposalsection", 5 | "fields": { 6 | "start": null, 7 | "section": 1, 8 | "end": null, 9 | "closed": null, 10 | "published": null 11 | } 12 | }, 13 | { 14 | "pk": 2, 15 | "model": "symposion_proposals.proposalsection", 16 | "fields": { 17 | "start": null, 18 | "section": 2, 19 | "end": null, 20 | "closed": null, 21 | "published": null 22 | } 23 | }, 24 | { 25 | "pk": 1, 26 | "model": "symposion_proposals.proposalkind", 27 | "fields": { 28 | "section": 1, 29 | "name": "tutorial", 30 | "slug": "tutorial" 31 | } 32 | }, 33 | { 34 | "pk": 2, 35 | "model": "symposion_proposals.proposalkind", 36 | "fields": { 37 | "section": 2, 38 | "name": "25 minute talk", 39 | "slug": "talk-25-min" 40 | } 41 | }, 42 | { 43 | "pk": 3, 44 | "model": "symposion_proposals.proposalkind", 45 | "fields": { 46 | "section": 2, 47 | "name": "45 minute talk", 48 | "slug": "talk-45-min" 49 | } 50 | } 51 | ] 52 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v4.0.0-alpha.2 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | // Core variables and mixins 8 | @import "variables"; 9 | @import "mixins"; 10 | 11 | // Reset and dependencies 12 | @import "normalize"; 13 | @import "print"; 14 | 15 | // Core CSS 16 | @import "reboot"; 17 | @import "type"; 18 | @import "images"; 19 | @import "code"; 20 | @import "grid"; 21 | @import "tables"; 22 | @import "forms"; 23 | @import "buttons"; 24 | 25 | // Components 26 | @import "animation"; 27 | @import "dropdown"; 28 | @import "button-group"; 29 | @import "input-group"; 30 | @import "custom-forms"; 31 | @import "nav"; 32 | @import "navbar"; 33 | @import "card"; 34 | @import "breadcrumb"; 35 | @import "pagination"; 36 | @import "pager"; 37 | @import "labels"; 38 | @import "jumbotron"; 39 | @import "alert"; 40 | @import "progress"; 41 | @import "media"; 42 | @import "list-group"; 43 | @import "responsive-embed"; 44 | @import "close"; 45 | 46 | // Components w/ JavaScript 47 | @import "modal"; 48 | @import "tooltip"; 49 | @import "popover"; 50 | @import "carousel"; 51 | 52 | // Utility classes 53 | @import "utilities"; 54 | @import "utilities-background"; 55 | @import "utilities-spacing"; 56 | @import "utilities-responsive"; 57 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/proposal_submit_kind.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/proposals/base.html" %} 2 | 3 | {% load bootstrap %} 4 | {% load pinax_boxes_tags %} 5 | {% load i18n %} 6 | 7 | {% block page_title %}Submit a Proposal for a {{ kind.name }}{% endblock %} 8 | 9 | {% block body %} 10 |
11 |

Proposal

12 |
13 | 14 |
15 |
16 |
17 | 18 | {% box "example_proposal" %} 19 | 20 |
21 | {% csrf_token %} 22 | {{ proposal_form|bootstrap }} 23 |
24 |

25 | You will be able to edit your proposal after it has been submitted. The program committee may ask questions, provide feedback, and even suggest changes to your proposal as part of the review processes. 26 |

27 | 28 | 29 | 30 |
31 |
32 |
33 |
34 |
35 | {% endblock %} 36 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_code.scss: -------------------------------------------------------------------------------- 1 | // Inline and block code styles 2 | code, 3 | kbd, 4 | pre, 5 | samp { 6 | font-family: $font-family-monospace; 7 | } 8 | 9 | // Inline code 10 | code { 11 | padding: .2rem .4rem; 12 | font-size: 90%; 13 | color: $code-color; 14 | background-color: $code-bg; 15 | @include border-radius($border-radius); 16 | } 17 | 18 | // User input typically entered via keyboard 19 | kbd { 20 | padding: .2rem .4rem; 21 | font-size: 90%; 22 | color: $kbd-color; 23 | background-color: $kbd-bg; 24 | @include border-radius($border-radius-sm); 25 | @include box-shadow(inset 0 -.1rem 0 rgba(0,0,0,.25)); 26 | 27 | kbd { 28 | padding: 0; 29 | font-size: 100%; 30 | font-weight: $nested-kbd-font-weight; 31 | @include box-shadow(none); 32 | } 33 | } 34 | 35 | // Blocks of code 36 | pre { 37 | display: block; 38 | margin-top: 0; 39 | margin-bottom: 1rem; 40 | font-size: 90%; 41 | line-height: $line-height; 42 | color: $pre-color; 43 | 44 | // Account for some code outputs that place code tags in pre tags 45 | code { 46 | padding: 0; 47 | font-size: inherit; 48 | color: inherit; 49 | background-color: transparent; 50 | border-radius: 0; 51 | } 52 | } 53 | 54 | // Enable scrollable blocks of code 55 | .pre-scrollable { 56 | max-height: $pre-scrollable-max-height; 57 | overflow-y: scroll; 58 | } 59 | -------------------------------------------------------------------------------- /djangocon/templates/site_base.html: -------------------------------------------------------------------------------- 1 | {% load staticfiles %} 2 | {% load metron_tags %} 3 | {% load i18n %} 4 | {% load sitetree %} 5 | {% load markitup_tags %} 6 | 7 | 8 | 9 | 10 | 11 | 12 | {% block head_title %}{% endblock %} 13 | 14 | 15 | 16 | 17 | {% block extra_css %} 18 | {% endblock %} 19 | 20 | 21 | 22 | 23 | {% block nav %} 24 | {% sitetree_menu from "main" include "trunk" %} 25 | {% endblock %} 26 | 27 | {% include "includes/cards.html" %} 28 | 29 | {% include "_messages.html" %} 30 | 31 |
32 | 33 | {% block body %} 34 | {% endblock %} 35 | {% include "includes/footer.html" %} 36 | 37 |
38 | 39 | 40 | {% block extra_script %} 41 | 42 | {% endblock %} 43 | 44 | {% analytics %} 45 | {% block extra_body %}{% endblock %} 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/sponsorship/apply.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load bootstrap %} 4 | {% load i18n %} 5 | {% load pinax_boxes_tags %} 6 | {% load static from staticfiles %} 7 | 8 | {% block head_title %}{% trans "Apply to be a Sponsor" %}{% endblock %} 9 | 10 | {% block body_class %}sponsorships{% endblock %} 11 | 12 | {% block body %} 13 | 14 |
15 |

{% trans "Apply for Sponsorship" %}

16 |
17 | 18 |
19 |
20 |
21 |
22 | {# box "sponsorship-apply" #} 23 | 24 |
25 | {% csrf_token %} 26 | {% trans "Apply to Be a Sponsor" %} 27 | {{ form|bootstrap_horizontal }} 28 |
29 | 30 | Cancel 31 |

32 | By submitting this sponsor application you are agreeing to the terms and conditions. 33 |

34 |
35 |
36 |
37 |
38 |
39 |
40 | {% endblock %} 41 | -------------------------------------------------------------------------------- /djangocon/templates/account/password_reset_sent.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | {% load account_tags %} 5 | 6 | {% block head_title %}{% trans "Password reset sent" %}{% endblock %} 7 | 8 | {% block body %} 9 |
10 |

{% trans "Password reset sent" %}

11 |
12 | 13 |
14 |
15 |
16 |
17 | {% if not resend %} 18 |

{% blocktrans %}We have sent you an email. If you do not receive it within a few minutes, try resending or contact us at {{ THEME_CONTACT_EMAIL }}.{% endblocktrans %}

19 |
20 | {% csrf_token %} 21 | {% for field in form %} 22 | {{ field.as_hidden }} 23 | {% endfor %} 24 | 25 |
26 | {% else %} 27 |

{% blocktrans %}We have resent the password email. If you do not receive it within a few minutes, contact us at {{ THEME_CONTACT_EMAIL }}.{% endblocktrans %}

28 | {% endif %} 29 |
30 |
31 |
32 |
33 | {% endblock %} 34 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap Grid only 2 | // 3 | // Includes relevant variables and mixins for the regular (non-flexbox) grid 4 | // system, as well as the generated predefined classes (e.g., `.col-4-sm`). 5 | 6 | 7 | // 8 | // Variables 9 | // 10 | 11 | 12 | // Grid breakpoints 13 | // 14 | // Define the minimum and maximum dimensions at which your layout will change, 15 | // adapting to different screen sizes, for use in media queries. 16 | 17 | $grid-breakpoints: ( 18 | // Extra small screen / phone 19 | xs: 0, 20 | // Small screen / phone 21 | sm: 544px, 22 | // Medium screen / tablet 23 | md: 768px, 24 | // Large screen / desktop 25 | lg: 992px, 26 | // Extra large screen / wide desktop 27 | xl: 1200px 28 | ) !default; 29 | 30 | 31 | // Grid containers 32 | // 33 | // Define the maximum width of `.container` for different screen sizes. 34 | 35 | $container-max-widths: ( 36 | sm: 576px, 37 | md: 720px, 38 | lg: 940px, 39 | xl: 1140px 40 | ) !default; 41 | 42 | 43 | // Grid columns 44 | // 45 | // Set the number of columns and specify the width of the gutters. 46 | 47 | $grid-columns: 12 !default; 48 | $grid-gutter-width: 1.875rem !default; // 30px 49 | 50 | 51 | // 52 | // Grid mixins 53 | // 54 | 55 | @import "variables"; 56 | 57 | @import "mixins/clearfix"; 58 | @import "mixins/breakpoints"; 59 | @import "mixins/grid-framework"; 60 | @import "mixins/grid"; 61 | 62 | @import "grid"; 63 | -------------------------------------------------------------------------------- /djangocon/templates/includes/cards.html: -------------------------------------------------------------------------------- 1 | {% load staticfiles %} 2 | 3 |
4 |
5 | 6 |
7 | 8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 17 |
18 |
19 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | @mixin box-shadow($shadow...) { 6 | @if $enable-shadows { 7 | box-shadow: $shadow; 8 | } 9 | } 10 | 11 | @mixin transition($transition...) { 12 | @if $enable-transitions { 13 | transition: $transition; 14 | } 15 | } 16 | 17 | // Utilities 18 | @import "mixins/breakpoints"; 19 | @import "mixins/hover"; 20 | @import "mixins/image"; 21 | @import "mixins/label"; 22 | @import "mixins/reset-filter"; 23 | @import "mixins/resize"; 24 | @import "mixins/screen-reader"; 25 | @import "mixins/size"; 26 | @import "mixins/tab-focus"; 27 | @import "mixins/reset-text"; 28 | @import "mixins/text-emphasis"; 29 | @import "mixins/text-hide"; 30 | @import "mixins/text-truncate"; 31 | 32 | // // Components 33 | @import "mixins/alert"; 34 | @import "mixins/buttons"; 35 | @import "mixins/cards"; 36 | @import "mixins/pagination"; 37 | @import "mixins/lists"; 38 | @import "mixins/list-group"; 39 | @import "mixins/nav-divider"; 40 | @import "mixins/forms"; 41 | @import "mixins/progress"; 42 | @import "mixins/table-row"; 43 | 44 | // // Skins 45 | @import "mixins/background-variant"; 46 | @import "mixins/border-radius"; 47 | @import "mixins/gradients"; 48 | 49 | // // Layout 50 | @import "mixins/clearfix"; 51 | @import "mixins/center-block"; 52 | // @import "mixins/navbar-align"; 53 | @import "mixins/grid-framework"; 54 | @import "mixins/grid"; 55 | @import "mixins/pulls"; 56 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_media.scss: -------------------------------------------------------------------------------- 1 | @if $enable-flex { 2 | .media { 3 | display: flex; 4 | margin-bottom: $spacer; 5 | } 6 | .media-body { 7 | flex: 1; 8 | } 9 | .media-middle { 10 | align-self: center; 11 | } 12 | .media-bottom { 13 | align-self: flex-end; 14 | } 15 | } @else { 16 | .media { 17 | margin-top: 15px; 18 | 19 | &:first-child { 20 | margin-top: 0; 21 | } 22 | } 23 | .media, 24 | .media-body { 25 | overflow: hidden; 26 | zoom: 1; 27 | } 28 | .media-body { 29 | width: 10000px; 30 | } 31 | .media-left, 32 | .media-right, 33 | .media-body { 34 | display: table-cell; 35 | vertical-align: top; 36 | } 37 | .media-middle { 38 | vertical-align: middle; 39 | } 40 | .media-bottom { 41 | vertical-align: bottom; 42 | } 43 | } 44 | 45 | 46 | // 47 | // Images/elements as the media anchor 48 | // 49 | 50 | .media-object { 51 | display: block; 52 | 53 | // Fix collapse in webkit from max-width: 100% and display: table-cell. 54 | &.img-thumbnail { 55 | max-width: none; 56 | } 57 | } 58 | 59 | 60 | // 61 | // Alignment 62 | // 63 | 64 | .media-right { 65 | padding-left: 10px; 66 | } 67 | 68 | .media-left { 69 | padding-right: 10px; 70 | } 71 | 72 | 73 | // 74 | // Headings 75 | // 76 | 77 | .media-heading { 78 | margin-top: 0; 79 | margin-bottom: 5px; 80 | } 81 | 82 | 83 | // 84 | // Media list variation 85 | // 86 | 87 | .media-list { 88 | padding-left: 0; 89 | list-style: none; 90 | } 91 | -------------------------------------------------------------------------------- /djangocon/templates/data.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load static from staticfiles %} 4 | {% load i18n %} 5 | {% load pinax_boxes_tags %} 6 | {% load waffle_tags %} 7 | 8 | {% block head_title %}{% trans "DjangoCon US 2016" %}{% endblock %} 9 | 10 | 11 | {% block body %} 12 |
13 |
14 |

List of downloadable CSV data files

15 |
16 | 17 |
18 |
19 |
20 |
21 |

22 | This page lists the downloadable CSV data files. For use by superuser only. 23 |

24 |
25 | {% for downloadable in downloadables %} 26 | 27 | {{ downloadable.name }} 28 | 29 | {% empty %} 30 | Nothing to download 31 | {% endfor %} 32 |
33 |
34 |
35 |
36 |
37 |
38 | 39 | 40 | {% endblock %} 41 | -------------------------------------------------------------------------------- /djangocon/templates/pinax/boxes/_box_body.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | {% if form %} 4 | 23 | {% endif %} 24 | 25 |
26 | {% if form %} 27 | 28 | 29 | Edit this content 30 | 31 | {% endif %} 32 | {{ box.content_html|safe }} 33 |
34 | -------------------------------------------------------------------------------- /fixtures/sponsor_levels.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pk": 1, 4 | "model": "symposion_sponsorship.sponsorlevel", 5 | "fields": { 6 | "conference": 1, 7 | "description": "", 8 | "cost": 4000, 9 | "name": "Gold", 10 | "order": 300 11 | } 12 | }, 13 | { 14 | "pk": 2, 15 | "model": "symposion_sponsorship.sponsorlevel", 16 | "fields": { 17 | "conference": 1, 18 | "description": "", 19 | "cost": 2000, 20 | "name": "Silver", 21 | "order": 400 22 | } 23 | }, 24 | { 25 | "pk": 3, 26 | "model": "symposion_sponsorship.sponsorlevel", 27 | "fields": { 28 | "conference": 1, 29 | "description": "", 30 | "cost": 1000, 31 | "name": "Bronze", 32 | "order": 500 33 | } 34 | }, 35 | { 36 | "pk": 4, 37 | "model": "symposion_sponsorship.sponsorlevel", 38 | "fields": { 39 | "conference": 1, 40 | "description": "", 41 | "cost": 8000, 42 | "name": "Platinum", 43 | "order": 200 44 | } 45 | }, 46 | { 47 | "pk": 5, 48 | "model": "symposion_sponsorship.sponsorlevel", 49 | "fields": { 50 | "conference": 1, 51 | "description": "", 52 | "cost": 16000, 53 | "name": "Diamond", 54 | "order": 100 55 | } 56 | } 57 | ] 58 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/proposal_speaker_manage.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/proposals/base.html" %} 2 | 3 | {% load i18n %} 4 | {% load bootstrap %} 5 | 6 | {% block body %} 7 | 8 |
9 |

{% trans 'Proposal:' %} {{ proposal.title }}

10 |
11 | 12 |
13 |
14 |
15 |

{% trans 'Proposal:' %} {{ proposal.title }}

16 | 17 |

18 | {% trans 'Edit proposal' %} 19 | 20 |

21 | 22 |

{% trans 'Current Speakers' %}

23 | 24 | {% for speaker in speakers %} 25 | {% if speaker.user %} 26 |

{{ speaker.name }} — {{ speaker.email }}

27 | {% else %} 28 |

{{ speaker.email }} — {% trans 'pending invitation' %}

29 | {% endif %} 30 | {% endfor %} 31 | 32 |

{% trans 'Add another speaker' %}

33 | 34 |
35 | {% csrf_token %} 36 | {{ add_speaker_form|bootstrap }} 37 |
38 | 39 |
40 |
41 |
42 |
43 |
44 | {% endblock %} 45 | 46 | {% block extra_body %} 47 | 52 | {% endblock %} 53 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid(); 10 | } 11 | 12 | // Rounded corners 13 | .img-rounded { 14 | @include border-radius($border-radius-lg); 15 | } 16 | 17 | // Image thumbnails 18 | .img-thumbnail { 19 | padding: $thumbnail-padding; 20 | line-height: $line-height; 21 | background-color: $thumbnail-bg; 22 | border: $thumbnail-border-width solid $thumbnail-border-color; 23 | border-radius: $thumbnail-border-radius; 24 | transition: all .2s ease-in-out; 25 | @include box-shadow(0 1px 2px rgba(0,0,0,.075)); 26 | 27 | // Keep them at most 100% wide 28 | @include img-fluid(inline-block); 29 | } 30 | 31 | // Perfect circle 32 | .img-circle { 33 | border-radius: 50%; 34 | } 35 | 36 | // 37 | // Figures 38 | // 39 | 40 | .figure { 41 | // Ensures the caption's text aligns with the image. 42 | display: inline-block; 43 | } 44 | 45 | .figure-img { 46 | margin-bottom: ($spacer-y / 2); 47 | line-height: 1; 48 | } 49 | 50 | .figure-caption { 51 | font-size: 90%; 52 | color: $gray-light; 53 | } 54 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_grid-framework.scss: -------------------------------------------------------------------------------- 1 | // Framework grid generation 2 | // 3 | // Used only by Bootstrap to generate the correct number of grid classes given 4 | // any value of `$grid-columns`. 5 | 6 | @mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) { 7 | // Common properties for all breakpoints 8 | %grid-column { 9 | position: relative; 10 | // Prevent columns from collapsing when empty 11 | min-height: 1px; 12 | // Inner gutter via padding 13 | padding-left: ($gutter / 2); 14 | padding-right: ($gutter / 2); 15 | } 16 | @each $breakpoint in map-keys($breakpoints) { 17 | @for $i from 1 through $columns { 18 | .col-#{$breakpoint}-#{$i} { 19 | @extend %grid-column; 20 | } 21 | } 22 | @include media-breakpoint-up($breakpoint) { 23 | // Work around cross-media @extend (https://github.com/sass/sass/issues/1050) 24 | %grid-column-float-#{$breakpoint} { 25 | float: left; 26 | } 27 | @for $i from 1 through $columns { 28 | .col-#{$breakpoint}-#{$i} { 29 | @if not $enable-flex { 30 | @extend %grid-column-float-#{$breakpoint}; 31 | } 32 | @include make-col-span($i, $columns); 33 | } 34 | } 35 | @each $modifier in (pull, push, offset) { 36 | @for $i from 0 through $columns { 37 | .col-#{$breakpoint}-#{$modifier}-#{$i} { 38 | @include make-col-modifier($modifier, $i, $columns) 39 | } 40 | } 41 | } 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /djangocon/receivers.py: -------------------------------------------------------------------------------- 1 | from django.dispatch import receiver 2 | 3 | from account.signals import password_changed 4 | from account.signals import user_sign_up_attempt, user_signed_up 5 | from account.signals import user_login_attempt, user_logged_in 6 | 7 | from pinax.eventlog.models import log 8 | 9 | 10 | @receiver(user_logged_in) 11 | def handle_user_logged_in(sender, **kwargs): 12 | log( 13 | user=kwargs.get("user"), 14 | action="USER_LOGGED_IN", 15 | extra={} 16 | ) 17 | 18 | 19 | @receiver(password_changed) 20 | def handle_password_changed(sender, **kwargs): 21 | log( 22 | user=kwargs.get("user"), 23 | action="PASSWORD_CHANGED", 24 | extra={} 25 | ) 26 | 27 | 28 | @receiver(user_login_attempt) 29 | def handle_user_login_attempt(sender, **kwargs): 30 | log( 31 | user=None, 32 | action="LOGIN_ATTEMPTED", 33 | extra={ 34 | "username": kwargs.get("username"), 35 | "result": kwargs.get("result") 36 | } 37 | ) 38 | 39 | 40 | @receiver(user_sign_up_attempt) 41 | def handle_user_sign_up_attempt(sender, **kwargs): 42 | log( 43 | user=None, 44 | action="SIGNUP_ATTEMPTED", 45 | extra={ 46 | "username": kwargs.get("username"), 47 | "email": kwargs.get("email"), 48 | "result": kwargs.get("result") 49 | } 50 | ) 51 | 52 | 53 | @receiver(user_signed_up) 54 | def handle_user_signed_up(sender, **kwargs): 55 | log( 56 | user=kwargs.get("user"), 57 | action="USER_SIGNED_UP", 58 | extra={} 59 | ) 60 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/review_admin.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/reviews/base.html" %} 2 | 3 | {% block review_heading %}Reviewers{% endblock review_heading %} 4 | 5 | {% block content %} 6 | 7 | 8 | 11 | 17 | 20 | 23 | 26 | 29 | 30 | {% for reviewer in reviewers %} 31 | 32 | 35 | 38 | 41 | 44 | 47 | 50 | 53 | 54 | {% endfor %} 55 |
9 | Reviewer 10 | 12 | Proposals
Reviewed 13 | 14 |
15 | Comments 16 | 18 | +1 19 | 21 | +0 22 | 24 | −0 25 | 27 | −1 28 |
33 | {{ reviewer.get_full_name }} 34 | 36 | {{ reviewer.total_votes }} 37 | 39 | {{ reviewer.comment_count }} 40 | 42 | {{ reviewer.plus_one }} 43 | 45 | {{ reviewer.plus_zero }} 46 | 48 | {{ reviewer.minus_zero }} 49 | 51 | {{ reviewer.minus_one }} 52 |
56 | {% endblock %} 57 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/sponsorship/detail.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load bootstrap %} 4 | {% load i18n %} 5 | {% load static from staticfiles %} 6 | 7 | {% block head_title %}{{ sponsor }}{% endblock %} 8 | 9 | {% block page_title %}{% trans "Sponsorship" %}{% endblock %} 10 | 11 | {% block body %} 12 | 13 |
14 |

{{ sponsor.name }} ({{ sponsor.level }})

15 |
16 | 17 |
18 |
19 |
20 | 21 |
22 | {% csrf_token %} 23 |
24 | {{ form|bootstrap }} 25 |
26 | 27 |

{{ sponsor.level }} Sponsor Benefits

28 | 29 | {{ formset.management_form }} 30 | {{ formset.non_form_errors }} 31 | 32 | {% for form in formset.forms %} 33 |
34 | 35 |
36 | {{ form }} 37 |

{{ form.instance.benefit.description }}

38 |
39 |
40 | {% endfor %} 41 | 42 |
43 | 44 | Cancel 45 |
46 | 47 |
48 |
49 |
50 |
51 | {% endblock %} 52 | -------------------------------------------------------------------------------- /djangocon/templates/account/signup.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load account_tags %} 4 | {% load i18n %} 5 | {% load bootstrap %} 6 | 7 | {% block head_title %}{% trans "Sign up" %}{% endblock %} 8 | 9 | {% block body %} 10 |
11 |
12 | 13 |
14 |
15 |
16 |
17 |
18 | {% trans "Sign up" %} 19 | {% csrf_token %} 20 | {{ form|bootstrap }} 21 | {% if redirect_field_value %} 22 | 23 | {% endif %} 24 | 25 |
26 | 31 |
32 |
33 |
34 |
35 | {% endblock %} 36 | 37 | {% block scripts %} 38 | {{ block.super }} 39 | 44 | {% endblock %} 45 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | padding: $alert-padding; 7 | margin-bottom: $spacer-y; 8 | border: $alert-border-width solid transparent; 9 | @include border-radius($alert-border-radius); 10 | 11 | // Improve alignment and spacing of inner content 12 | > p, 13 | > ul { 14 | margin-bottom: 0; 15 | } 16 | > p + p { 17 | margin-top: 5px; 18 | } 19 | } 20 | 21 | // Headings for larger alerts 22 | .alert-heading { 23 | // Specified to prevent conflicts of changing $headings-color 24 | color: inherit; 25 | } 26 | 27 | // Provide class for links that match alerts 28 | .alert-link { 29 | font-weight: $alert-link-font-weight; 30 | } 31 | 32 | 33 | // Dismissible alerts 34 | // 35 | // Expand the right padding and account for the close button's positioning. 36 | 37 | .alert-dismissible { 38 | padding-right: ($alert-padding + 20); 39 | 40 | // Adjust close link position 41 | .close { 42 | position: relative; 43 | top: -2px; 44 | right: -21px; 45 | color: inherit; 46 | } 47 | } 48 | 49 | 50 | // Alternate styles 51 | // 52 | // Generate contextual modifier classes for colorizing the alert. 53 | 54 | .alert-success { 55 | @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); 56 | } 57 | .alert-info { 58 | @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); 59 | } 60 | .alert-warning { 61 | @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); 62 | } 63 | .alert-danger { 64 | @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); 65 | } 66 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/review_assignment.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/reviews/base.html" %} 2 | 3 | {% block reviews %} 4 |
5 |

Review Assignments

6 |
7 | 8 |
9 |
10 |
11 |
12 | {% include "symposion/reviews/_sidebar.html" %} 13 |
14 | 15 |
16 | {% if assignments %} 17 | 18 | 19 | 20 | 21 | 22 | 23 | {% for assignment in assignments %} 24 | 25 | 30 | 36 | 37 | {% endfor %} 38 |
ProposalOpted outOpt out
26 | 27 | {{ assignment.proposal.title }} 28 | 29 | 31 |
32 | {% csrf_token %} 33 | 34 |
35 |
39 | {% else %} 40 |

You do not have any assignments.

41 | {% endif %} 42 |
43 |
44 |
45 |
46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) Django Events Foundation North America (DEFNA) and individual 2 | contributors. 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without modification, 6 | are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in the 13 | documentation and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of DEFNA nor the names of its contributors may be used 16 | to endorse or promote products derived from this software without 17 | specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 23 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /djangocon/templates/account/password_reset.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | {% load bootstrap %} 5 | {% load account_tags %} 6 | 7 | {% block head_title %}{% trans "Password reset" %}{% endblock %} 8 | 9 | {% user_display request.user as user_display %} 10 | 11 | {% block body %} 12 |
13 |
14 | 15 |
16 |
17 |
18 |
19 |
20 | {% trans "Password reset" %} 21 |

{% trans "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." %}

22 |
23 |
24 | {% csrf_token %} 25 | {{ form|bootstrap }} 26 | 29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |

{% blocktrans %}If you have any trouble resetting your password, contact us at {{ THEME_CONTACT_EMAIL }}.{% endblocktrans %}

37 |
38 |
39 |
40 |
41 | {% endblock %} 42 | 43 | {% block extra_body %} 44 | 47 | {% endblock %} -------------------------------------------------------------------------------- /djangocon/templates/symposion/proposals/_pending_proposal_row.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | 4 | 5 | {{ proposal.title }} 6 | 7 | 8 | {{ proposal.kind.name }} 9 | 10 | 11 | {% if proposal.cancelled %} 12 | {% trans 'Cancelled' %} 13 | {% else %} 14 | {% if request.user == proposal.speaker.user %} 15 | {% if proposal.result.status == "accepted" %} 16 | {% trans 'Accepted' %} 17 | {% else %} 18 | {% trans 'Submitted' %} 19 | {% endif %} 20 | {% else %} 21 | {% trans 'Invited' %} 22 | {% endif %} 23 | {% endif %} 24 | 25 | 26 | 27 | {% if not proposal.cancelled %} 28 |
29 | 30 | {% trans 'Choose Response' %} 31 | 32 | 33 | 39 |
40 | {% endif %} 41 | 42 | 43 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/schedule/presentation_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load markitup_tags %} 4 | {% load pinax_boxes_tags %} 5 | {% load sitetree %} 6 | 7 | {% block head_title %}Presentation: {{ presentation.title }}{% endblock %} 8 | 9 | {% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %} 10 | 11 | {% block body %} 12 | 13 |
14 |

{{ presentation.title }}

15 |

16 | {% for speaker in presentation.speakers %} 17 | {{ speaker }}{% if not forloop.last %}, {% endif %} 18 | {% endfor %} 19 |

20 | 21 | {% if presentation.slot %} 22 | 23 | {{ presentation.slot.day.date|date:"l" }} 24 | {{ presentation.slot.start}}–{{ presentation.slot.end }} 25 | 26 | {% endif %} 27 |
28 | 29 |
30 |
31 |
32 |
Audience level: {{ presentation.proposal.get_audience_level_display }}
33 |
34 |
35 |
36 |

Description

37 |
{{ presentation.description }}
38 | 39 |

Abstract

40 |
{{ presentation.abstract|render_markup|safe}}
41 |
42 |
43 |
44 |
45 | {% box "presentation_bottom" %} 46 |
47 |
48 |
49 |
50 | {% endblock %} 51 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_print.scss: -------------------------------------------------------------------------------- 1 | // Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css 2 | 3 | // ========================================================================== 4 | // Print styles. 5 | // Inlined to avoid the additional HTTP request: h5bp.com/r 6 | // ========================================================================== 7 | 8 | @media print { 9 | *, 10 | *::before, 11 | *::after { 12 | text-shadow: none !important; 13 | box-shadow: none !important; 14 | } 15 | 16 | a, 17 | a:visited { 18 | text-decoration: underline; 19 | } 20 | 21 | abbr[title]::after { 22 | content: " (" attr(title) ")"; 23 | } 24 | 25 | pre, 26 | blockquote { 27 | border: $border-width solid #999; 28 | page-break-inside: avoid; 29 | } 30 | 31 | thead { 32 | display: table-header-group; // h5bp.com/t 33 | } 34 | 35 | tr, 36 | img { 37 | page-break-inside: avoid; 38 | } 39 | 40 | img { 41 | max-width: 100% !important; 42 | } 43 | 44 | p, 45 | h2, 46 | h3 { 47 | orphans: 3; 48 | widows: 3; 49 | } 50 | 51 | h2, 52 | h3 { 53 | page-break-after: avoid; 54 | } 55 | 56 | // Bootstrap specific changes start 57 | 58 | // Bootstrap components 59 | .navbar { 60 | display: none; 61 | } 62 | .btn, 63 | .dropup > .btn { 64 | > .caret { 65 | border-top-color: #000 !important; 66 | } 67 | } 68 | .label { 69 | border: $border-width solid #000; 70 | } 71 | 72 | .table { 73 | border-collapse: collapse !important; 74 | 75 | td, 76 | th { 77 | background-color: #fff !important; 78 | } 79 | } 80 | .table-bordered { 81 | th, 82 | td { 83 | border: 1px solid #ddd !important; 84 | } 85 | } 86 | 87 | // Bootstrap specific changes end 88 | } 89 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_labels.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .label { 7 | display: inline-block; 8 | padding: .25em .4em; 9 | font-size: 75%; 10 | font-weight: $label-font-weight; 11 | line-height: 1; 12 | color: $label-color; 13 | text-align: center; 14 | white-space: nowrap; 15 | vertical-align: baseline; 16 | @include border-radius(); 17 | 18 | // Empty labels collapse automatically 19 | &:empty { 20 | display: none; 21 | } 22 | } 23 | 24 | // Quick fix for labels in buttons 25 | .btn .label { 26 | position: relative; 27 | top: -1px; 28 | } 29 | 30 | // Add hover effects, but only for links 31 | a.label { 32 | @include hover-focus { 33 | color: $label-link-hover-color; 34 | text-decoration: none; 35 | cursor: pointer; 36 | } 37 | } 38 | 39 | // Pill labels 40 | // 41 | // Make them extra rounded with a modifier to replace v3's badges. 42 | 43 | .label-pill { 44 | padding-right: .6em; 45 | padding-left: .6em; 46 | // Use a higher than normal value to ensure completely rounded edges when 47 | // customizing padding or font-size on labels. 48 | @include border-radius(10rem); 49 | } 50 | 51 | // Colors 52 | // 53 | // Contextual variations (linked labels get darker on :hover). 54 | 55 | .label-default { 56 | @include label-variant($label-default-bg); 57 | } 58 | 59 | .label-primary { 60 | @include label-variant($label-primary-bg); 61 | } 62 | 63 | .label-success { 64 | @include label-variant($label-success-bg); 65 | } 66 | 67 | .label-info { 68 | @include label-variant($label-info-bg); 69 | } 70 | 71 | .label-warning { 72 | @include label-variant($label-warning-bg); 73 | } 74 | 75 | .label-danger { 76 | @include label-variant($label-danger-bg); 77 | } 78 | -------------------------------------------------------------------------------- /djangocon/proposals/management/commands/create_test_data.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.models import User 2 | from django.core.management.base import BaseCommand 3 | from django.core.urlresolvers import reverse 4 | from faker import Factory 5 | 6 | from djangocon.proposals import models 7 | from symposion.proposals import models as symposion_proposal_models 8 | from symposion.speakers.models import Speaker 9 | 10 | 11 | class Command(BaseCommand): 12 | 13 | def handle(self, *args, **options): 14 | fake = Factory.create() 15 | proposal_kind, _ = symposion_proposal_models.ProposalKind.objects.get_or_create( 16 | name='25 minute talk', 17 | slug='talk-25-min', 18 | ) 19 | user_bob, _ = User.objects.get_or_create(username='bob-the-builder') 20 | speaker_bob, _ = Speaker.objects.update_or_create( 21 | user=user_bob, 22 | defaults={ 23 | 'biography': 'Can Bob build it in Django? Yes, he can!' 24 | } 25 | ) 26 | talk_proposal, _ = models.TalkProposal.objects.update_or_create( 27 | speaker=speaker_bob, 28 | title='How to write a test proposal in Django', 29 | kind=proposal_kind, 30 | audience_level=models.Proposal.AUDIENCE_LEVEL_NOVICE, 31 | defaults={ 32 | 'description': fake.text(), 33 | 'abstract': fake.text(), 34 | 'additional_notes': fake.text(), 35 | 'recording_release': fake.text(), 36 | 'special_requirements': fake.text(), 37 | } 38 | ) 39 | 40 | print('speaker detail page: {0}'.format(reverse('speaker_profile', args=[speaker_bob.pk]))) 41 | print('proposal detail page: {0}'.format(reverse('proposal_detail', args=[talk_proposal.pk]))) 42 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/_review_table.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load waffle_tags %} 3 | 4 | 5 | 6 | 7 | {% flag double_blind_reviews %} 8 | 9 | {% else %} 10 | 11 | {% endflag %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | {% for proposal in proposals %} 23 | 24 | 25 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | {% endfor %} 43 | 44 |
#{% trans "Speaker / Title" %}{% trans "Title" %}{% trans "Category" %}{% trans "+1" %}{% trans "+0" %}{% trans "-0" %}{% trans "-1" %}
{{ proposal.number }} 26 | 27 | {% flag double_blind_reviews %} 28 | {{ proposal.speaker }} 29 |
30 | {% endflag %} 31 | {{ proposal.title }} 32 |
33 |
{{ proposal.kind }}{{ proposal.comment_count }}{{ proposal.plus_one }}{{ proposal.plus_zero }}{{ proposal.minus_zero }}{{ proposal.minus_one }}{{ proposal.user_vote|default:"" }}
45 | -------------------------------------------------------------------------------- /client/scss/common/_sponsorship.scss: -------------------------------------------------------------------------------- 1 | .sponsorship-level { 2 | text-align: center; 3 | padding: 1em 0 0em 0; 4 | h3 { 5 | 6 | &:after { 7 | display: inline-block; 8 | margin: 0 0 8px 20px; 9 | height: 2px; 10 | content: " "; 11 | text-shadow: none; 12 | background-color: $white; 13 | width: 30%; 14 | } 15 | &:before { 16 | display: inline-block; 17 | margin: 0 20px 8px 0; 18 | height: 2px; 19 | content: " "; 20 | text-shadow: none; 21 | background-color: $white; 22 | width: 30%; 23 | } 24 | } 25 | } 26 | 27 | .sponsorship-list { 28 | margin-bottom: 3em; 29 | 30 | .card-link { 31 | display: block; 32 | cursor: pointer; 33 | } 34 | 35 | .sponsorship-card { 36 | position: relative; 37 | width: 100%; 38 | cursor: pointer; 39 | background-color: $white; 40 | box-shadow: 0 1px 3px rgba(0,0,0,0.52), 0 1px 2px rgba(0,0,0,0.64); 41 | padding: 10px; 42 | color: $blue; 43 | border-radius: 1em; 44 | cursor: pointer; 45 | .card-text { 46 | white-space: nowrap; 47 | overflow: hidden; 48 | text-overflow: ellipsis; 49 | } 50 | 51 | h4,h5,h6 { 52 | color: $blue; 53 | } 54 | @include media-breakpoint-up(sd) {} 55 | @include media-breakpoint-up(md) {} 56 | @include media-breakpoint-up(lg) {} 57 | @include media-breakpoint-up(xl) {} 58 | 59 | a { 60 | color: $blue; 61 | text-decoration: none; 62 | } 63 | } 64 | 65 | &.diamond, &.platinum { 66 | .card-link { 67 | padding-left: 2em; 68 | padding-right: 2em; 69 | } 70 | } 71 | } 72 | 73 | .card-caption { 74 | margin-top: 2em; 75 | font-size: 1rem; 76 | } 77 | 78 | @include media-breakpoint-up(md) { 79 | .diamond, .platinum { 80 | img { 81 | margin-top: 3em; 82 | width: 60% 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /tasks.py: -------------------------------------------------------------------------------- 1 | from invoke import run, task 2 | 3 | 4 | @task 5 | def create_feature_flags(production=False): 6 | """Creates/updates feature flags and switches.""" 7 | 8 | instance = 'primary' if production else 'staging' 9 | run('ec run --instance {instance} web -- python manage.py flag double_blind_reviews --create --superuser'.format(instance=instance)) 10 | run('ec run --instance {instance} web -- python manage.py switch homepage_sponsorship_list off --create'.format(instance=instance)) 11 | 12 | 13 | @task 14 | def deploy(production=False): 15 | """Deploy code to staging or primary (production).""" 16 | 17 | instance = 'primary' if production else 'staging' 18 | run('ec deploy --instance {instance}'.format(instance=instance)) 19 | 20 | 21 | @task 22 | def migrate(production=False): 23 | """Migrate staging or primary (production) database.""" 24 | 25 | instance = 'primary' if production else 'staging' 26 | run('ec run --instance {instance} web -- python manage.py migrate --no-input'.format(instance=instance)) 27 | 28 | 29 | @task 30 | def push(): 31 | """Push development and master branches to github.""" 32 | 33 | run('git push origin development') 34 | run('git push origin master') 35 | 36 | 37 | @task 38 | def restart(production=False): 39 | """Restart staging or primary (production) database.""" 40 | 41 | instance = 'primary' if production else 'staging' 42 | run('ec services restart --instance {instance} web'.format(instance=instance)) 43 | 44 | 45 | @task 46 | def update_local_db(production=False): 47 | """Copy production database to local machine (for testing only).""" 48 | 49 | instance = 'primary' if production else 'staging' 50 | run('dropdb -h localhost djangocon2016; createdb -h localhost djangocon2016 && ec run --instance {instance} db -- pg_dump --no-owner --no-acl | ./manage.py dbshell'.format(instance=instance)) 51 | -------------------------------------------------------------------------------- /djangocon/templates/account/login.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load account_tags %} 4 | {% load i18n %} 5 | {% load bootstrap %} 6 | {% load static from staticfiles %} 7 | 8 | {% block head_title %}{% trans "Log in" %}{% endblock %} 9 | 10 | {% block body %} 11 |
12 |

{% trans "Hi!" %}

13 |
14 |
15 |
16 |
17 |
18 |
19 | {% trans "Log in to an existing account" %} 20 | {% csrf_token %} 21 | {{ form|bootstrap }} 22 | {% if redirect_field_value %} 23 | 24 | {% endif %} 25 | 26 | {% trans "Forgot your password?" %} 27 |
28 | {% if ACCOUNT_OPEN_SIGNUP %} 29 | 34 | {% endif %} 35 |
36 |
37 |
38 |
39 | {% endblock %} 40 | 41 | {% block scripts %} 42 | {{ block.super }} 43 | 48 | {% endblock %} 49 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/schedule/schedule_list.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | {% load cache %} 5 | {% load sitetree %} 6 | 7 | {% block head_title %}Presentation Listing{% endblock %} 8 | 9 | {% block extra_head %} 10 | 26 | {% endblock %} 27 | 28 | {% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %} 29 | 30 | {% block body %} 31 |
32 |

Accepted {{ schedule.section.name }}

33 |
34 | 35 |
36 |
37 |
38 | {% cache 600 "schedule-list" schedule.section.name %} 39 | {% for presentation in presentations %} 40 |
41 |
42 |

{{ presentation.title }}

43 |

{{ presentation.speakers|join:", " }}

44 | {{ presentation.description }} 45 | {% if presentation.slot %} 46 |

47 | {{ presentation.slot.day.date|date:"l" }} 48 | {{ presentation.slot.start}}–{{ presentation.slot.end }} 49 | in 50 | {{ presentation.slot.rooms|join:", " }} 51 |

52 | {% endif %} 53 |
54 |
55 | {% endfor %} 56 | {% endcache %} 57 |
58 |
59 |
60 | {% endblock %} 61 | -------------------------------------------------------------------------------- /djangocon/proposals/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.utils.translation import ugettext_lazy as _ 3 | from markitup.fields import MarkupField 4 | from symposion.proposals.models import ProposalBase 5 | 6 | 7 | class Proposal(ProposalBase): 8 | 9 | AUDIENCE_LEVEL_NOVICE = 1 10 | AUDIENCE_LEVEL_EXPERIENCED = 2 11 | AUDIENCE_LEVEL_INTERMEDIATE = 3 12 | AUDIENCE_LEVEL_NOT_APPLICABLE = 4 13 | 14 | AUDIENCE_LEVELS = [ 15 | (AUDIENCE_LEVEL_NOVICE, "Novice"), 16 | (AUDIENCE_LEVEL_INTERMEDIATE, "Intermediate or Advanced"), 17 | # (AUDIENCE_LEVEL_EXPERIENCED, "Experienced"), 18 | (AUDIENCE_LEVEL_NOT_APPLICABLE, "Not Applicable"), 19 | ] 20 | 21 | audience_level = models.IntegerField(choices=AUDIENCE_LEVELS) 22 | 23 | recording_release = models.BooleanField( 24 | default=True, 25 | help_text=_("By submitting your talk proposal, you agree to give " 26 | "permission to the conference organizers to record, edit, " 27 | "and release audio and/or video of your presentation. If " 28 | "you do not agree to this, please uncheck this box."), 29 | ) 30 | 31 | special_requirements = MarkupField( 32 | _("Special Requirements"), 33 | blank=True, 34 | help_text=_("If you have any special requirements such as needing " 35 | "travel assistance, accessibility needs, or anything " 36 | "else please let us know here so that we may plan " 37 | "accordingly. (This is not made public nor will the " 38 | "review committee have access to view it.)") 39 | ) 40 | 41 | class Meta: 42 | abstract = True 43 | 44 | def __unicode__(self): 45 | return u"%s" % self.title 46 | 47 | 48 | class TalkProposal(Proposal): 49 | pass 50 | 51 | 52 | class TutorialProposal(Proposal): 53 | pass 54 | 55 | 56 | class OpenSpaceProposal(ProposalBase): 57 | pass 58 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_grid.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | .container { 6 | @include make-container(); 7 | @include make-container-max-widths(); 8 | 9 | } 10 | 11 | 12 | // Fluid container 13 | // 14 | // Utilizes the mixin meant for fixed width containers, but without any defined 15 | // width for fluid, full width layouts. 16 | 17 | .container-fluid { 18 | @include make-container(); 19 | } 20 | 21 | 22 | // Row 23 | // 24 | // Rows contain and clear the floats of your columns. 25 | 26 | @if $enable-grid-classes { 27 | .row { 28 | @include make-row(); 29 | } 30 | } 31 | 32 | 33 | // Columns 34 | // 35 | // Common styles for small and large grid columns 36 | 37 | @if $enable-grid-classes { 38 | @include make-grid-columns(); 39 | } 40 | 41 | 42 | // Flex variation 43 | // 44 | // Custom styles for additional flex alignment options. 45 | 46 | @if $enable-flex and $enable-grid-classes { 47 | 48 | // Flex column reordering 49 | 50 | @each $breakpoint in map-keys($grid-breakpoints) { 51 | @include media-breakpoint-up($breakpoint) { 52 | .col-#{$breakpoint}-first { order: -1; } 53 | .col-#{$breakpoint}-last { order: 1; } 54 | } 55 | } 56 | 57 | // Alignment for every column in row 58 | 59 | @each $breakpoint in map-keys($grid-breakpoints) { 60 | @include media-breakpoint-up($breakpoint) { 61 | .row-#{$breakpoint}-top { align-items: flex-start; } 62 | .row-#{$breakpoint}-center { align-items: center; } 63 | .row-#{$breakpoint}-bottom { align-items: flex-end; } 64 | } 65 | } 66 | 67 | // Alignment per column 68 | 69 | @each $breakpoint in map-keys($grid-breakpoints) { 70 | @include media-breakpoint-up($breakpoint) { 71 | .col-#{$breakpoint}-top { align-self: flex-start; } 72 | .col-#{$breakpoint}-center { align-self: center; } 73 | .col-#{$breakpoint}-bottom { align-self: flex-end; } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /djangocon/templates/includes/mailchimp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 |
9 |
10 |
11 | 12 |
13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 | 21 |
22 |
23 |
24 |
25 | 26 | -------------------------------------------------------------------------------- /djangocon/templates/sponsorship_raw.html: -------------------------------------------------------------------------------- 1 | {% load sponsorship_tags %} 2 | {% load thumbnail %} 3 | 4 | {% sponsors as all_sponsors %} 5 | {% regroup all_sponsors by level as sponsors_list %} 6 | 7 |

Sponsor blocks

8 | 9 |

Plain

10 | 11 |
12 | {% for sponsor in sponsors_list %} 13 |

14 | {{ sponsor.grouper }}: 15 | {% for sponsor in sponsor.list %} 16 | 17 | {% if not forloop.first %} | {% endif %} 18 | 19 | {{ sponsor }} 20 | 21 | 22 | {% endfor %} 23 |

24 | {% endfor %} 25 |
26 | 27 |
28 | 29 |

Markdown

30 | 31 | 32 | {% for sponsor in sponsors_list %} 33 | **{{ sponsor.grouper }}:** {% for sponsor in sponsor.list %}{% if not forloop.first %} | {% endif %}[{{ sponsor }}]({{ sponsor.external_url }}){% endfor %} 34 | {% endfor %} 35 | 36 | 37 | 38 |
39 | 40 |

Table (rich / logo)

41 | 42 |
43 | {% for sponsor in sponsors_list%} 44 |

{{ sponsor.grouper }}

45 | 46 | 47 | 48 | {% for sponsor in sponsor.list %} 49 | 57 | {% if forloop.counter|divisibleby:4 %} 58 | 59 | {% endif %} 60 | {% endfor %} 61 | 62 | 63 |
50 | 51 | {{ sponsor.name }} 52 |
53 | {{ sponsor }} 54 |
55 |
56 |
64 | {% endfor %} 65 |
66 | 67 |
68 | 69 |

List (rich / logo)

70 | 71 |
72 | {% for sponsor in sponsors_list%} 73 |

{{ sponsor.grouper }}

74 | {% for sponsor in sponsor.list %} 75 |

76 | 77 | {{ sponsor.name }} 78 |

79 | {{ sponsor }} 80 |
81 | 82 |

83 | {% endfor %} 84 | {% endfor %} 85 |
86 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_pagination.scss: -------------------------------------------------------------------------------- 1 | .pagination { 2 | display: inline-block; 3 | padding-left: 0; 4 | margin-top: $spacer-y; 5 | margin-bottom: $spacer-y; 6 | @include border-radius(); 7 | } 8 | 9 | .page-item { 10 | display: inline; // Remove list-style and block-level defaults 11 | 12 | &:first-child { 13 | .page-link { 14 | margin-left: 0; 15 | @include border-left-radius($border-radius); 16 | } 17 | } 18 | &:last-child { 19 | .page-link { 20 | @include border-right-radius($border-radius); 21 | } 22 | } 23 | 24 | &.active .page-link { 25 | @include plain-hover-focus { 26 | z-index: 2; 27 | color: $pagination-active-color; 28 | cursor: default; 29 | background-color: $pagination-active-bg; 30 | border-color: $pagination-active-border; 31 | } 32 | } 33 | 34 | &.disabled .page-link { 35 | @include plain-hover-focus { 36 | color: $pagination-disabled-color; 37 | cursor: $cursor-disabled; 38 | background-color: $pagination-disabled-bg; 39 | border-color: $pagination-disabled-border; 40 | } 41 | } 42 | } 43 | 44 | .page-link { 45 | position: relative; 46 | float: left; // Collapse white-space 47 | padding: $pagination-padding-y $pagination-padding-x; 48 | margin-left: -1px; 49 | line-height: $line-height; 50 | color: $pagination-color; 51 | text-decoration: none; 52 | background-color: $pagination-bg; 53 | border: $pagination-border-width solid $pagination-border-color; 54 | 55 | @include hover-focus { 56 | color: $pagination-hover-color; 57 | background-color: $pagination-hover-bg; 58 | border-color: $pagination-hover-border; 59 | } 60 | } 61 | 62 | 63 | // 64 | // Sizing 65 | // 66 | 67 | .pagination-lg { 68 | @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg); 69 | } 70 | 71 | .pagination-sm { 72 | @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm); 73 | } 74 | -------------------------------------------------------------------------------- /client/scss/common/bootstrap/_type.scss: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'liberatorheavy'; 3 | src: url('../assets/fonts/liberator-heavy-webfont.eot'); 4 | src: url('../assets/fonts/liberator-heavy-webfont.eot?#iefix') format('embedded-opentype'), 5 | url('../assets/fonts/liberator-heavy-webfont.woff2') format('woff2'), 6 | url('../assets/fonts/liberator-heavy-webfont.woff') format('woff'), 7 | url('../assets/fonts/liberator-heavy-webfont.ttf') format('truetype'), 8 | url('../assets/fonts/liberator-heavy-webfont.svg#liberatorheavy') format('svg'); 9 | font-weight: normal; 10 | font-style: normal; 11 | } 12 | 13 | 14 | @import url("https://fast.fonts.net/t/1.css?apiType=css&projectid=59d67ea6-c9ee-4e4b-9993-40a9b28e0c96"); 15 | @font-face{ 16 | font-family:"OfficinaSerifITCW01-Boo_734540"; 17 | src: url("../assets/fonts/d29a1003-aa62-4492-a4ab-3b649c7efccd.eot?#iefix"); 18 | src: url("../assets/fonts/d29a1003-aa62-4492-a4ab-3b649c7efccd.eot?#iefix") format("eot"), 19 | url("../assets/fonts/73586ea9-fb0d-422d-806c-ac63e6238c1d.woff2") format("woff2"), 20 | url("../assets/fonts/d8999082-96b7-4355-bab1-d135f4e4bee7.woff") format("woff"), 21 | url("../assets/fonts/e0a4e45b-0b2e-4b30-82d9-808d85415dc9.ttf") format("truetype"), 22 | url("../assets/fonts/9e9b325c-b638-44e5-9889-91dd0d826f86.svg#9e9b325c-b638-44e5-9889-91dd0d826f86") format("svg"); 23 | } 24 | 25 | 26 | * { 27 | font-weight: 300; 28 | backface-visibility: hidden; 29 | -webkit-font-smoothing: antialiased; 30 | -moz-font-smoothing: antialiased; 31 | -moz-osx-font-smoothing: grayscale; 32 | } 33 | // 34 | // Headings 35 | // 36 | 37 | h1, h2, h3, h4, h5, h6, 38 | .h1, .h2, .h3, .h4, .h5, .h6 { 39 | font-weight: normal; 40 | font-style: normal; 41 | color: $blue; 42 | text-transform: uppercase; 43 | } 44 | 45 | .interim-teaser h3 { 46 | font-family: $font-family-serif; 47 | color: $white; 48 | } 49 | 50 | h4, h5, h6 { 51 | font-family: $font-family-serif; 52 | } 53 | 54 | hr { 55 | margin-top: 3rem; 56 | margin-bottom: 3rem; 57 | border-bottom: 1px dashed #ccc; 58 | background: transparent; 59 | } 60 | 61 | li { 62 | list-style: diamond; 63 | } 64 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/speakers/speaker_profile.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | {% load thumbnail %} 5 | {% load markitup_tags %} 6 | 7 | {% block head_title %}{{ speaker.name }}{% endblock %} 8 | 9 | {% block body %} 10 |
11 |

{% trans "Our Speakers" %}

12 |
13 | 14 |
15 |
16 |
17 |
18 | 19 | {% if speaker.photo %} 20 | 21 |
22 | {{ speaker.name }} 23 |
24 |

{{ speaker.name }}

25 |
26 |
27 | 28 | {% else %} 29 |   30 | {% endif %} 31 |
32 | 33 |
34 | {% if speaker.user == request.user or request.user.is_staff %} 35 | Edit 36 | {% endif %} 37 |

{{ speaker.name }}

38 |
{{ speaker.biography|render_markup|safe }}
39 | 40 |

Presentations:

41 | {% for presentation in presentations %} 42 |

{{ presentation.title }}

43 | {% if presentation.slot %} 44 |

45 | {{ presentation.slot.day.date|date:"l" }} 46 | {{ presentation.slot.start}}–{{ presentation.slot.end }} 47 | in 48 | {{ presentation.slot.rooms|join:", " }} 49 |

50 | {% endif %} 51 | {% empty %} 52 |

No presentations. This page is only visible to staff until there is a presentation.

53 | {% endfor %} 54 |
55 |
56 |
57 |
58 | {% endblock %} 59 | -------------------------------------------------------------------------------- /djangocon/templates/includes/sponsorship_list.html: -------------------------------------------------------------------------------- 1 | {% load sponsorship_tags %} 2 | {% load thumbnail %} 3 | {% load i18n %} 4 | {% load static from staticfiles %} 5 | 6 | {% sponsor_levels as levels %} 7 | {% for level in levels %} 8 | {% if level.sponsors %} 9 | 10 |
11 |

{{ level.name }}

12 |
13 |
14 | {% for sponsor in level.sponsors %} 15 | {% if sponsor.website_logo %} 16 | 17 | {% if level.name == 'Diamond' %} 18 |
19 | {% elif level.name == 'Platinum' %} 20 |
21 | {% else %} 22 |
23 | {% endif %} 24 | 25 | 26 |
27 | {{ sponsor.name }} 28 |
29 |

{{ sponsor.name }}

30 |

{{ sponsor.external_url }}

31 |
32 |
33 |
34 |
35 |

{{ sponsor.listing_text|truncatewords:150 }}

36 |
37 |
38 | 39 | {% if forloop.counter|divisibleby:3 and level.name == 'Diamond' and not forloop.last or forloop.counter|divisibleby:3 and level.name == 'Platinum' and not forloop.last%} 40 |
41 |
42 | {% elif forloop.counter|divisibleby:4 and not level.name == 'Diamond' and not forloop.last or forloop.counter|divisibleby:4 and not level.name == 'Platinum' and not forloop.last%} 43 |
44 |
45 | {% elif forloop.last %} 46 |
47 | {% endif %} 48 | {% endif %} 49 | {% endfor %} 50 | {% endif %} 51 | {% endfor %} 52 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/reviews/result_notification_prepare.html: -------------------------------------------------------------------------------- 1 | {% extends "symposion/reviews/base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block review_heading %}Result Notification Prepare{% endblock review_heading %} 6 | 7 | {% block content %} 8 |
9 |
10 |

Proposals

11 | 12 | {% for proposal in proposals %} 13 | 14 | 19 | 20 | {% endfor %} 21 |
15 | {{ proposal.speaker }} ({{ proposal.speaker.email }}) 16 |
17 | {{ proposal.title }} 18 |
22 |
23 |
24 |

Email

25 | 26 |
27 | 28 | {% csrf_token %} 29 | 30 | 31 | 32 |
33 | 34 | 35 |
36 | 37 | 38 |
39 | 40 | 41 | 42 | {% include "symposion/reviews/_result_notification_prepare_help.html" %} 43 | 44 | 45 | Cancel 46 |
47 |
48 |
49 | {% endblock %} 50 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/mixins/_grid.scss: -------------------------------------------------------------------------------- 1 | /// Grid system 2 | // 3 | // Generate semantic grid columns with these mixins. 4 | 5 | @mixin make-container($gutter: $grid-gutter-width) { 6 | margin-left: auto; 7 | margin-right: auto; 8 | padding-left: ($gutter / 2); 9 | padding-right: ($gutter / 2); 10 | @if not $enable-flex { 11 | @include clearfix(); 12 | } 13 | } 14 | 15 | 16 | // For each breakpoint, define the maximum width of the container in a media query 17 | @mixin make-container-max-widths($max-widths: $container-max-widths) { 18 | @each $breakpoint, $container-max-width in $max-widths { 19 | @include media-breakpoint-up($breakpoint) { 20 | max-width: $container-max-width; 21 | } 22 | } 23 | } 24 | 25 | @mixin make-row($gutter: $grid-gutter-width) { 26 | @if $enable-flex { 27 | display: flex; 28 | flex-wrap: wrap; 29 | } @else { 30 | @include clearfix(); 31 | } 32 | margin-left: ($gutter / -2); 33 | margin-right: ($gutter / -2); 34 | } 35 | 36 | @mixin make-col($gutter: $grid-gutter-width) { 37 | position: relative; 38 | @if not $enable-flex { 39 | float: left; 40 | } 41 | min-height: 1px; 42 | padding-left: ($gutter / 2); 43 | padding-right: ($gutter / 2); 44 | } 45 | 46 | @mixin make-col-span($size, $columns: $grid-columns) { 47 | @if $enable-flex { 48 | flex: 0 0 percentage($size / $columns); 49 | } @else { 50 | width: percentage($size / $columns); 51 | } 52 | } 53 | 54 | @mixin make-col-offset($size, $columns: $grid-columns) { 55 | margin-left: percentage($size / $columns); 56 | } 57 | 58 | @mixin make-col-push($size, $columns: $grid-columns) { 59 | left: if($size > 0, percentage($size / $columns), auto); 60 | } 61 | 62 | @mixin make-col-pull($size, $columns: $grid-columns) { 63 | right: if($size > 0, percentage($size / $columns), auto); 64 | } 65 | 66 | @mixin make-col-modifier($type, $size, $columns) { 67 | // Work around the lack of dynamic mixin @include support (https://github.com/sass/sass/issues/626) 68 | @if $type == push { 69 | @include make-col-push($size, $columns); 70 | } @else if $type == pull { 71 | @include make-col-pull($size, $columns); 72 | } @else if $type == offset { 73 | @include make-col-offset($size, $columns); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /djangocon/templates/pinax/blog/blog_post.html: -------------------------------------------------------------------------------- 1 | {% extends "pinax/blog/blog_base.html" %} 2 | 3 | {% block body_class %}blog blog-post{% endblock %} 4 | 5 | {% block head_title_base %}{{ post.title }} | {{ SITE_NAME }}{% endblock %} 6 | 7 | {% block extra_head %} 8 | {{ block.super }} 9 | 10 | {% comment %} 11 | 12 | {% endcomment %} 13 | 14 | {% if post.description %} 15 | 16 | 17 | {% else %} 18 | 19 | 20 | {% endif %} 21 | {% if post.primary_image %} 22 | 23 | {% else %} 24 | {% comment %} 25 | 26 | {% endcomment %} 27 | {% endif %} 28 | 29 | 30 | {% endblock %} 31 | 32 | {% block content %} 33 |
34 |
35 | 36 | {% include "pinax/blog/dateline_stale.html" %} 37 | 38 |
{{ post.teaser_html|safe }}
39 | 40 |
{{ post.content_html|safe }}
41 | 42 | 46 |
47 |
48 | {% endblock %} 49 | -------------------------------------------------------------------------------- /djangocon/proposals/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from . import models 4 | 5 | 6 | def mark_proposal_as_accepted(modeladmin, request, queryset): 7 | for proposal in queryset: 8 | # proposal.result.accepted = True 9 | proposal.result.status = 'accepted' 10 | proposal.result.save() 11 | mark_proposal_as_accepted.short_description = "Mark selected proposal status as accepted" 12 | 13 | 14 | def mark_proposal_as_rejected(modeladmin, request, queryset): 15 | for proposal in queryset: 16 | # proposal.result.accepted = False 17 | proposal.result.status = 'rejected' 18 | proposal.result.save() 19 | mark_proposal_as_rejected.short_description = "Mark selected proposal status as rejected" 20 | 21 | 22 | def mark_proposal_as_standby(modeladmin, request, queryset): 23 | for proposal in queryset: 24 | # proposal.result.accepted = None 25 | proposal.result.status = 'standby' 26 | proposal.result.save() 27 | mark_proposal_as_standby.short_description = "Mark selected proposal status as standby" 28 | 29 | 30 | def mark_proposal_as_undecided(modeladmin, request, queryset): 31 | for proposal in queryset: 32 | # proposal.result.accepted = None 33 | proposal.result.status = 'undecided' 34 | proposal.result.save() 35 | mark_proposal_as_undecided.short_description = "Mark selected proposal status as undecided" 36 | 37 | 38 | class ProposalAdmin(admin.ModelAdmin): 39 | actions = [ 40 | mark_proposal_as_accepted, 41 | mark_proposal_as_rejected, 42 | mark_proposal_as_standby, 43 | mark_proposal_as_undecided, 44 | ] 45 | 46 | list_display = [ 47 | 'id', 48 | 'title', 49 | 'speaker', 50 | 'speaker_email', 51 | 'kind', 52 | 'audience_level', 53 | 'cancelled', 54 | ] 55 | 56 | list_filter = [ 57 | 'kind__name', 58 | 'result__status', 59 | 'result__accepted', 60 | ] 61 | 62 | raw_id_admin = [ 63 | 'speaker', 64 | ] 65 | 66 | 67 | @admin.register(models.TalkProposal) 68 | class TalkProposalAdmin(ProposalAdmin): 69 | pass 70 | 71 | 72 | @admin.register(models.TutorialProposal) 73 | class TutorialProposalAdmin(ProposalAdmin): 74 | pass 75 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | SHELL=/bin/bash -eu -o pipefail 2 | NPM_BIN := $(shell pwd)/node_modules/.bin 3 | 4 | # --- Utils -------------------------------------------------------------------- 5 | 6 | # Copy all assets from client > build. Just symlink them. 7 | # No processing necessary 8 | assets: 9 | mkdir -p build && rm -f build/assets && ln -s ../client/assets build/assets 10 | 11 | clean: 12 | rm -rf build/* 13 | 14 | collect: 15 | $(shell pwd)/manage.py collectstatic --noinput 16 | 17 | # --- CSS ---------------------------------------------------------------------- 18 | 19 | # Standard CSS compilation. Compile SCSS to CSS and run it 20 | # through autoprefixer. 21 | buildcss = cat $(1) \ 22 | | $(NPM_BIN)/node-sass --include-path client/scss --output-style compressed \ 23 | | $(NPM_BIN)/postcss --use autoprefixer --autoprefixer.browsers "last 2 versions" \ 24 | > $(2) 25 | 26 | ifdef watch 27 | # Watch for css changes. This works 'on folders' and not specific files 28 | # and also doesn't run autoprefixer. 29 | #buildcss = $(NPM_BIN)/node-sass client/scss -o build/css --source-map=true --watch | grep -e '"formatted": "Error' > notify.sh 30 | buildcss = $(NPM_BIN)/node-sass client/scss -o build/css --source-map=true --watch 31 | #buildcss = $(NPM_BIN)/node-sass client/scss -o build/css --source-map=true --watch 2> >(grep '' 1>&2) > log.txt 32 | 33 | endif 34 | 35 | css: 36 | mkdir -p build/css && \ 37 | $(call buildcss, client/scss/base.scss, build/css/base.css) 38 | 39 | # --- JS ----------------------------------------------------------------------- 40 | 41 | # Standard JS build process, collect all JS files with browserify 42 | # and compress them with uglifyjs. 43 | buildjs = $(NPM_BIN)/browserify -t babelify --presets es2015 $(1) \ 44 | | $(NPM_BIN)/uglifyjs --mangle --compress warnings=false \ 45 | > $(2) 46 | 47 | ifdef watch 48 | # Watch for changes, and no autoprefixer since it doesn't work 49 | # well together. 50 | buildjs = $(NPM_BIN)/watchify -t babelify --presets es2015 $(1) -o $(2) --verbose --debug 51 | endif 52 | 53 | js: 54 | mkdir -p build/js && \ 55 | $(call buildjs, client/js/base.js, build/js/base.js) 56 | 57 | # ------------------------------------------------------------------------------ 58 | 59 | all: assets css js 60 | 61 | .PHONY: clean assets css js collect 62 | -------------------------------------------------------------------------------- /djangocon/proposals/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from markitup.widgets import MarkItUpWidget 3 | 4 | from .models import OpenSpaceProposal, TalkProposal, TutorialProposal 5 | 6 | 7 | class ProposalForm(forms.ModelForm): 8 | 9 | def clean_description(self): 10 | value = self.cleaned_data["description"] 11 | if len(value) > 400: 12 | raise forms.ValidationError( 13 | u"The description must be less than 400 characters" 14 | ) 15 | return value 16 | 17 | def __init__(self, *args, **kwargs): 18 | super(ProposalForm, self).__init__(*args, **kwargs) 19 | for f in self.fields.values(): 20 | if not f.required: 21 | continue 22 | f.widget.attrs.setdefault('required', True) 23 | f.label = '{} *'.format(f.label) 24 | 25 | 26 | class OpenSpaceProposalForm(ProposalForm): 27 | 28 | class Meta: 29 | model = OpenSpaceProposal 30 | fields = [ 31 | "title", 32 | "description", 33 | "abstract", 34 | "additional_notes", 35 | ] 36 | widgets = { 37 | "abstract": MarkItUpWidget(), 38 | "additional_notes": MarkItUpWidget(), 39 | } 40 | 41 | 42 | class TalkProposalForm(ProposalForm): 43 | 44 | class Meta: 45 | model = TalkProposal 46 | fields = [ 47 | "title", 48 | "audience_level", 49 | "description", 50 | "abstract", 51 | "additional_notes", 52 | "special_requirements", 53 | "recording_release", 54 | ] 55 | widgets = { 56 | "abstract": MarkItUpWidget(), 57 | "additional_notes": MarkItUpWidget(), 58 | } 59 | 60 | 61 | class TutorialProposalForm(ProposalForm): 62 | 63 | class Meta: 64 | model = TutorialProposal 65 | fields = [ 66 | "title", 67 | "audience_level", 68 | "description", 69 | "abstract", 70 | "additional_notes", 71 | "special_requirements", 72 | "recording_release", 73 | ] 74 | widgets = { 75 | "abstract": MarkItUpWidget(), 76 | "additional_notes": MarkItUpWidget(), 77 | } 78 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_utilities.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Floats 3 | // 4 | 5 | .clearfix { 6 | @include clearfix(); 7 | } 8 | 9 | .center-block { 10 | @include center-block(); 11 | } 12 | 13 | @each $breakpoint in map-keys($grid-breakpoints) { 14 | @include media-breakpoint-up($breakpoint) { 15 | .pull-#{$breakpoint}-left { 16 | @include pull-left(); 17 | } 18 | .pull-#{$breakpoint}-right { 19 | @include pull-right(); 20 | } 21 | .pull-#{$breakpoint}-none { 22 | float: none !important; 23 | } 24 | } 25 | } 26 | 27 | 28 | // 29 | // Screenreaders 30 | // 31 | 32 | .sr-only { 33 | @include sr-only(); 34 | } 35 | 36 | .sr-only-focusable { 37 | @include sr-only-focusable(); 38 | } 39 | 40 | .invisible { 41 | visibility: hidden !important; 42 | } 43 | 44 | .text-hide { 45 | @include text-hide(); 46 | } 47 | 48 | 49 | // 50 | // Text 51 | // 52 | 53 | // Alignment 54 | 55 | .text-justify { text-align: justify !important; } 56 | .text-nowrap { white-space: nowrap !important; } 57 | .text-truncate { @include text-truncate; } 58 | 59 | // Responsive alignment 60 | 61 | @each $breakpoint in map-keys($grid-breakpoints) { 62 | @include media-breakpoint-up($breakpoint) { 63 | .text-#{$breakpoint}-left { text-align: left !important; } 64 | .text-#{$breakpoint}-right { text-align: right !important; } 65 | .text-#{$breakpoint}-center { text-align: center !important; } 66 | } 67 | } 68 | 69 | // Transformation 70 | 71 | .text-lowercase { text-transform: lowercase !important; } 72 | .text-uppercase { text-transform: uppercase !important; } 73 | .text-capitalize { text-transform: capitalize !important; } 74 | 75 | // Weight and italics 76 | 77 | .font-weight-normal { font-weight: normal; } 78 | .font-weight-bold { font-weight: bold; } 79 | .font-italic { font-style: italic; } 80 | 81 | // Contextual colors 82 | 83 | .text-muted { 84 | color: $text-muted; 85 | } 86 | 87 | @include text-emphasis-variant('.text-primary', $brand-primary); 88 | 89 | @include text-emphasis-variant('.text-success', $brand-success); 90 | 91 | @include text-emphasis-variant('.text-info', $brand-info); 92 | 93 | @include text-emphasis-variant('.text-warning', $brand-warning); 94 | 95 | @include text-emphasis-variant('.text-danger', $brand-danger); 96 | -------------------------------------------------------------------------------- /djangocon/templates/interim_homepage.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load static from staticfiles %} 4 | {% load i18n %} 5 | {% load pinax_boxes_tags %} 6 | 7 | {% block head_title %}{% trans "DjangoCon US 2016" %}{% endblock %} 8 | 9 | {% block body_class %}home interim{% endblock %} 10 | 11 | {% block body %} 12 | 13 |
14 |
15 |
16 | 17 |
18 |
19 |
20 |

DjangoCon US 2016

21 |
22 |
23 |

We are pleased to announce that the DjangoCon US 2016 conference will take place in:

Philadelphia, Pennsylvania

from:

July 17-22, 2016

at:

The Wharton School at the University of Pennsylvania



24 |
25 |
26 |

July 17: Tutorials

27 |

July 18-20: Talks

28 |

July 21-22: Sprints

29 |
30 |
31 |
32 |
33 |
34 |

35 | We have a lot of amazing things planned that we’ll announce over the next few weeks.

Until then, here’s what you can do to help: 36 |

37 |

38 | Mark your calendars and help us spread the word! 39 | Start thinking about topics for when our Call for Proposals is announced. 40 |

41 |

42 | Watch this space, @DjangoCon on Twitter, or follow the discussions on the djangocon-organizers list. 43 | Sponsor the event! 44 | Want to help by joining our organizers? 45 | Start working on those proposals, and we hope we'll see you at DjangoCon US!

46 |
47 |
48 |
49 |
50 | 51 | {% endblock %} 52 | -------------------------------------------------------------------------------- /djangocon/templates/sitetree/menu.html: -------------------------------------------------------------------------------- 1 | {% load sitetree %} 2 | {% load static from staticfiles %} 3 | 4 | -------------------------------------------------------------------------------- /client/scss/vendor/bootstrap/_tooltip.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | .tooltip { 3 | position: absolute; 4 | z-index: $zindex-tooltip; 5 | display: block; 6 | // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. 7 | // So reset our font and text properties to avoid inheriting weird values. 8 | @include reset-text(); 9 | font-size: $font-size-sm; 10 | opacity: 0; 11 | 12 | &.in { opacity: $tooltip-opacity; } 13 | 14 | &.tooltip-top, 15 | &.bs-tether-element-attached-bottom { 16 | padding: $tooltip-arrow-width 0; 17 | margin-top: -3px; 18 | 19 | .tooltip-arrow { 20 | bottom: 0; 21 | left: 50%; 22 | margin-left: -$tooltip-arrow-width; 23 | border-width: $tooltip-arrow-width $tooltip-arrow-width 0; 24 | border-top-color: $tooltip-arrow-color; 25 | } 26 | } 27 | &.tooltip-right, 28 | &.bs-tether-element-attached-left { 29 | padding: 0 $tooltip-arrow-width; 30 | margin-left: 3px; 31 | 32 | .tooltip-arrow { 33 | top: 50%; 34 | left: 0; 35 | margin-top: -$tooltip-arrow-width; 36 | border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0; 37 | border-right-color: $tooltip-arrow-color; 38 | } 39 | } 40 | &.tooltip-bottom, 41 | &.bs-tether-element-attached-top { 42 | padding: $tooltip-arrow-width 0; 43 | margin-top: 3px; 44 | 45 | .tooltip-arrow { 46 | top: 0; 47 | left: 50%; 48 | margin-left: -$tooltip-arrow-width; 49 | border-width: 0 $tooltip-arrow-width $tooltip-arrow-width; 50 | border-bottom-color: $tooltip-arrow-color; 51 | } 52 | } 53 | &.tooltip-left, 54 | &.bs-tether-element-attached-right { 55 | padding: 0 $tooltip-arrow-width; 56 | margin-left: -3px; 57 | 58 | .tooltip-arrow { 59 | top: 50%; 60 | right: 0; 61 | margin-top: -$tooltip-arrow-width; 62 | border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width; 63 | border-left-color: $tooltip-arrow-color; 64 | } 65 | } 66 | } 67 | 68 | // Wrapper for the tooltip content 69 | .tooltip-inner { 70 | max-width: $tooltip-max-width; 71 | padding: 3px 8px; 72 | color: $tooltip-color; 73 | text-align: center; 74 | background-color: $tooltip-bg; 75 | @include border-radius($border-radius); 76 | } 77 | 78 | // Arrows 79 | .tooltip-arrow { 80 | position: absolute; 81 | width: 0; 82 | height: 0; 83 | border-color: transparent; 84 | border-style: solid; 85 | } 86 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/schedule/_grid.html: -------------------------------------------------------------------------------- 1 | {% load pinax_boxes_tags %} 2 | {% load core_tags %} 3 | 4 | {% regroup timetable.slots_qs by start as slots %} 5 | 6 | {% for slot_group in slots %} 7 | 8 |
9 | {{ slot_group.grouper|time:"h:i A"}} 10 |
11 | 12 |
13 | {% for slot in slot_group.list|sort_by_m2m:"rooms.order" %} 14 | 15 |
16 |
17 | {% if slot.rooms %} 18 | {% for room in slot.rooms %} 19 | {{ room.name }}{% if not forloop.last %}, {% endif %} 20 | {% endfor %} 21 | {% endif %} 22 |
23 |
24 | 25 | {% if slot.content %} 26 |

{{ slot.content.title }}

27 |

{{ slot.content.speakers|join:", " }}

28 | {% if slot.content.proposal.audience_level != 4 %} 29 | {{ slot.content.proposal.get_audience_level_display }} Level 30 | {% endif %} 31 | {% else %} 32 | {% if slot.content_override %} 33 | {{ slot.content_override_html|safe }} 34 | {% else %} 35 | {% endif %} 36 | {% endif %} 37 | 38 |
39 | 40 | {# These should all be slot.end - 5 minutes #} 41 | {% comment %} 42 | {% if slot.content or slot.content_override.raw %} 43 | 46 | {% endif %} 47 | {% endcomment %} 48 | 49 | 52 | 53 |
54 | 55 | {% if not forloop.last and forloop.counter|divisibleby:"3"%} 56 |
57 |
58 | {% endif %} 59 | 60 | {% endfor %} 61 | 62 |
63 | 64 | {% endfor %} 65 | 66 | 67 | {% with timetable.day.date.day|slugify as day %} 68 | {% box "schedule_day_"|add:day %} 69 | {% endwith %} 70 | -------------------------------------------------------------------------------- /djangocon/templates/symposion/schedule/schedule_edit.html: -------------------------------------------------------------------------------- 1 | {% extends "site_base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}Conference Schedule Edit{% endblock %} 6 | 7 | {% block body_class %}full conference-schedule{% endblock %} 8 | 9 | {% block right %} 10 | {% endblock %} 11 | 12 | {% block extra_head %} 13 | 14 | {% endblock %} 15 | 16 | {% block body %} 17 |
18 |

Schedule Edit

19 |
20 |
21 |
22 | 23 | {% for timetable in days %} 24 |
25 |

{{ timetable.day.date }}

26 | {% include "symposion/schedule/_edit_grid.html" %} 27 |
28 | {% endfor %} 29 | 30 |
31 |
{% csrf_token %} 32 | {{ form.as_p }} 33 | 34 | 35 |
36 | 37 |
38 |
39 |
40 |
41 | 42 | {% endblock %} 43 | 44 | {% block extra_script %} 45 | 46 | 71 | {% endblock %} 72 | --------------------------------------------------------------------------------