├── 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 |
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.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 |
4 | {% for item in sitetree_items %}
5 | {% if item.insitetree %}
6 |
7 | {{ item.title_resolved }}
8 | {% if item.has_children %}
9 | {% sitetree_children of item for sitetree template "sitetree/tree.html" %}
10 | {% endif %}
11 |
12 | {% endif %}
13 | {% endfor %}
14 |
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 |
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 |
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 |
4 | {% templatetag openvariable %} proposal.title {% templatetag closevariable %} e.g. {{ proposals.0.title }}
5 | {% templatetag openvariable %} proposal.kind {% templatetag closevariable %} e.g. {{ proposals.0.kind }}
6 | {% templatetag openvariable %} proposal.speaker {% templatetag closevariable %} e.g. {{ proposals.0.speaker }}
7 |
--------------------------------------------------------------------------------
/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 |
6 | Applicant : {{ applicant }}
7 | Sponsor Name : {{ sponsor_name }}
8 | Sponsor Contact : {{ contact }}
9 | Sponsor Contact Email : {{ email }}
10 | Sponsorship Level : {{ level }}
11 |
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 |
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 |
8 |
9 |
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 |
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 |
11 |
12 |
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 |
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 |
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 |
11 |
12 |
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 |
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 |
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 |
12 |
13 |
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 |
11 |
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 |
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 |
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 |
19 |
20 |
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 |
11 |
12 |
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 |
14 |
15 |
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 |
15 |
16 |
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 |
11 |
12 |
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 |
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 |
14 |
15 |
16 |
17 |
18 | {% box "speaker-profile" %}
19 |
20 |
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 |
14 |
15 |
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 |
17 |
18 |
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 |
12 |
13 |
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 |
20 |
21 |
22 |
23 |
24 | {% box "schedule_top" %}
25 |
26 | {% cache 600 "schedule-table" schedule.section %}
27 | {% for timetable in days %}
28 |
29 |
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 |
14 |
15 |
16 |
17 |
18 |
19 | {% box "speaker-profile" %}
20 |
21 |
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 |
10 |
11 |
12 |
13 |
14 |
15 | {% for file in files %}
16 |
17 |
21 |
22 |
Uploaded {{ file.created|date:"N j, Y" }}
23 |
24 | {% empty %}
25 |
No uploaded files.
26 | {% endfor %}
27 |
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 |
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 |
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 |
13 |
14 |
15 |
16 |
17 |
18 | {% box "example_proposal" %}
19 |
20 |
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 |
17 |
18 |
19 |
20 |
21 |
22 | {# box "sponsorship-apply" #}
23 |
24 |
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 |
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 |
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 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | This page lists the downloadable CSV data files. For use by superuser only.
23 |
24 |
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 |
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 |
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 |
9 | Reviewer
10 |
11 |
12 | Proposals Reviewed
13 |
14 |
15 | Comments
16 |
17 |
18 | +1
19 |
20 |
21 | +0
22 |
23 |
24 | −0
25 |
26 |
27 | −1
28 |
29 |
30 | {% for reviewer in reviewers %}
31 |
32 |
33 | {{ reviewer.get_full_name }}
34 |
35 |
36 | {{ reviewer.total_votes }}
37 |
38 |
39 | {{ reviewer.comment_count }}
40 |
41 |
42 | {{ reviewer.plus_one }}
43 |
44 |
45 | {{ reviewer.plus_zero }}
46 |
47 |
48 | {{ reviewer.minus_zero }}
49 |
50 |
51 | {{ reviewer.minus_one }}
52 |
53 |
54 | {% endfor %}
55 |
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 |
16 |
17 |
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 |
12 |
13 |
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 |
7 |
8 |
9 |
10 |
11 |
12 | {% include "symposion/reviews/_sidebar.html" %}
13 |
14 |
15 |
16 | {% if assignments %}
17 |
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 |
14 |
15 |
16 |
17 |
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 |
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 |
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 | {% trans "Speaker / Title" %}
9 | {% else %}
10 | {% trans "Title" %}
11 | {% endflag %}
12 | {% trans "Category" %}
13 |
14 | {% trans "+1" %}
15 | {% trans "+0" %}
16 | {% trans "-0" %}
17 | {% trans "-1" %}
18 |
19 |
20 |
21 |
22 | {% for proposal in proposals %}
23 |
24 | {{ proposal.number }}
25 |
26 |
27 | {% flag double_blind_reviews %}
28 | {{ proposal.speaker }}
29 |
30 | {% endflag %}
31 | {{ proposal.title }}
32 |
33 |
34 | {{ proposal.kind }}
35 | {{ proposal.comment_count }}
36 | {{ proposal.plus_one }}
37 | {{ proposal.plus_zero }}
38 | {{ proposal.minus_zero }}
39 | {{ proposal.minus_one }}
40 | {{ proposal.user_vote|default:"" }}
41 |
42 | {% endfor %}
43 |
44 |
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 |
14 |
15 |
16 |
17 |
18 |
28 | {% if ACCOUNT_OPEN_SIGNUP %}
29 |
30 |
31 | {% trans "Don't have an account?" %} {% trans "Sign up" %}
32 |
33 |
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 |
34 |
35 |
36 |
37 |
38 | {% cache 600 "schedule-list" schedule.section.name %}
39 | {% for presentation in presentations %}
40 |
41 |
42 |
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 |
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 |
50 |
51 |
52 |
53 | {{ sponsor }}
54 |
55 |
56 |
57 | {% if forloop.counter|divisibleby:4 %}
58 |
59 | {% endif %}
60 | {% endfor %}
61 |
62 |
63 |
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 |
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 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | {% if speaker.photo %}
20 |
21 |
22 |
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 |
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 |
13 |