Changeset - fdc2503fcfc3
[Not reviewed]
Merge
! ! !
Christopher Neugebauer - 7 years ago 2017-08-09 02:16:40
chrisjrn@gmail.com
Merge remote-tracking branch 'rd/all-python'
93 files changed:
LICENSE
54
Changeset was too big and was cut off... Show full diff anyway
0 comments (0 inline, 0 general)
.gitignore
Show inline comments
 
*.pyc
 
node_modules/
 
_build/
 
.DS_Store
 
dev.db
 
.coverage
 
staticfiles
LICENSE
Show inline comments
 
registrasion-demo
 
-----------------
 

	
 
# Copyright (c) 2016-2017 Christopher Neugebauer and contributors
 
#
 
# Permission is hereby granted, free of charge, to any person obtaining a copy
 
# of this software and associated documentation files (the "Software"), to deal
 
# in the Software without restriction, including without limitation the rights
 
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
# copies of the Software, and to permit persons to whom the Software is
 
# furnished to do so, subject to the following conditions:
 
#
 
# The above copyright notice and this permission notice shall be included in
 
# all copies or substantial portions of the Software.
 
#
 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
# THE SOFTWARE.
 

	
 

	
 
pinaxcon
 
--------
 

	
 
# Copyright (c) 2009-2015 James Tauber and contributors
 
#
 
# Permission is hereby granted, free of charge, to any person obtaining a copy
 
# of this software and associated documentation files (the "Software"), to deal
 
# in the Software without restriction, including without limitation the rights
 
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
# copies of the Software, and to permit persons to whom the Software is
 
# furnished to do so, subject to the following conditions:
 
#
 
# The above copyright notice and this permission notice shall be included in
 
# all copies or substantial portions of the Software.
 
#
 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
# THE SOFTWARE.
 

	
 

	
 
bootstrap-sass
 
--------------
 

	
 
The MIT License (MIT)
 

	
 
Copyright (c) 2011-2016 Twitter, Inc
 
Copyright (c) 2011-2016 The Bootstrap Authors
 

	
 
Permission is hereby granted, free of charge, to any person obtaining a copy
 
of this software and associated documentation files (the "Software"), to deal
 
in the Software without restriction, including without limitation the rights
 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
copies of the Software, and to permit persons to whom the Software is
 
furnished to do so, subject to the following conditions:
 

	
 
The above copyright notice and this permission notice shall be included in
 
all copies or substantial portions of the Software.
 

	
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
THE SOFTWARE.
fixtures/sitetree.json
Show inline comments
 
[
 
    {
 
        "pk": 1,
 
        "model": "sitetree.tree",
 
        "fields": {
 
            "alias": "main",
 
            "title": "main"
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "pages_page \"about/\"",
 
            "url": "page_about",
 
            "inbreadcrumbs": true,
 
            "title": "About",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 2,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "pages_page \"venue/\"",
 
            "url": "page_venue",
 
            "inbreadcrumbs": true,
 
            "title": "Venue",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 3,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "#",
 
            "inbreadcrumbs": true,
 
            "title": "Sponsors",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 4,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": false
 
        }
 
    },
 
    {
 
        "pk": 4,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "home",
 
            "inbreadcrumbs": true,
 
            "title": "Home",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 1,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 5,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": 3,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "sponsor_apply",
 
            "url": "page_sponsor_info",
 
            "inbreadcrumbs": true,
 
            "title": "Apply to be a Sponsor",
 
            "title": "Prospectus",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 6,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 6,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": 3,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "sponsor_list",
 
            "inbreadcrumbs": true,
 
            "title": "{{ SITE_NAME }} Sponsors",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 5,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    }
 
]
gondor.yml
Show inline comments
 
deleted file
gulpfile.js
Show inline comments
 
deleted file
pinaxcon/settings.py
Show inline comments
 
import os
 
import dj_database_url
 

	
 

	
 
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
 
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
 
BASE_DIR = PACKAGE_ROOT
 

	
 
DEBUG = bool(int(os.environ.get("DEBUG", "1")))
 

	
 
DATABASES = {
 
    "default": {
 
        "ENGINE": "django.db.backends.sqlite3",
 
        "NAME": os.path.join(PROJECT_ROOT, "dev.db"),
 
    }
 
}
 

	
 
ALLOWED_HOSTS = []
 

	
 
# Local time zone for this installation. Choices can be found here:
 
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
 
# although not all choices may be available on all operating systems.
 
# On Unix systems, a value of None will cause Django to use the same
 
# timezone as the operating system.
 
# If running in a Windows environment this must be set to the same as your
 
# system time zone.
 
TIME_ZONE = "UTC"
 

	
 
# Language code for this installation. All choices can be found here:
 
# http://www.i18nguy.com/unicode/language-identifiers.html
 
LANGUAGE_CODE = "en-us"
 

	
 
SITE_ID = int(os.environ.get("SITE_ID", 1))
 

	
 
# If you set this to False, Django will make some optimizations so as not
 
# to load the internationalization machinery.
 
USE_I18N = True
 

	
 
# If you set this to False, Django will not format dates, numbers and
 
# calendars according to the current locale.
 
USE_L10N = True
 

	
 
# If you set this to False, Django will not use timezone-aware datetimes.
 
USE_TZ = True
 

	
 
# Absolute filesystem path to the directory that will hold user-uploaded files.
 
# Example: "/home/media/media.lawrence.com/media/"
 
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "media")
 

	
 
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
 
# trailing slash.
 
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
 
MEDIA_URL = "/site_media/media/"
 

	
 
# Absolute path to the directory static files should be collected to.
 
# Don"t put anything in this directory yourself; store your static files
 
# in apps" "static/" subdirectories and in STATICFILES_DIRS.
 
# Example: "/home/media/media.lawrence.com/static/"
 
STATIC_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "static")
 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
 

	
 
# URL prefix for static files.
 
# Example: "http://media.lawrence.com/static/"
 
STATIC_URL = "/site_media/static/"
 
STATIC_URL = '/static/'
 

	
 
# Additional locations of static files
 
STATICFILES_DIRS = [
 
    os.path.join(PROJECT_ROOT, "static", "dist"),
 
]
 
STATICFILES_DIRS = (
 
    os.path.join(PROJECT_ROOT, 'static'),
 
)
 

	
 
# List of finder classes that know how to find static files in
 
# various locations.
 
STATICFILES_FINDERS = [
 
    "django.contrib.staticfiles.finders.FileSystemFinder",
 
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
 
    "compressor.finders.CompressorFinder",
 
]
 

	
 
# Make this unique, and don't share it with anybody.
 
SECRET_KEY = "6r&z0i#!k-thu4nv^zzx!f$fbp(&#2i5mq_^%%@ihu_qxxotl_"
 

	
 
TEMPLATES = [
 
    {
 
        "BACKEND": "django.template.backends.django.DjangoTemplates",
 
        "DIRS": [
 
            os.path.join(PACKAGE_ROOT, "templates"),
 
        ],
 
        "APP_DIRS": True,
 
        "OPTIONS": {
 
            "debug": DEBUG,
 
            "context_processors": [
 
                "django.contrib.auth.context_processors.auth",
 
                "django.core.context_processors.debug",
 
                "django.core.context_processors.i18n",
 
                "django.core.context_processors.media",
 
                "django.core.context_processors.static",
 
                "django.core.context_processors.tz",
 
                "django.core.context_processors.request",
 
                "django.contrib.messages.context_processors.messages",
 
                "account.context_processors.account",
 
                "pinax_theme_bootstrap.context_processors.theme",
 
                "symposion.reviews.context_processors.reviews",
 
            ],
 
        },
 
    },
 
]
 

	
 
MIDDLEWARE_CLASSES = [
 
    "django.contrib.sessions.middleware.SessionMiddleware",
 
    "django.middleware.common.CommonMiddleware",
 
    "django.middleware.csrf.CsrfViewMiddleware",
 
    "django.contrib.auth.middleware.AuthenticationMiddleware",
 
    "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
 
    "django.contrib.messages.middleware.MessageMiddleware",
 
    "reversion.middleware.RevisionMiddleware",
 
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
 
]
 

	
 
ROOT_URLCONF = "pinaxcon.urls"
 

	
 
# Python dotted path to the WSGI application used by Django's runserver.
 
WSGI_APPLICATION = "pinaxcon.wsgi.application"
 

	
 
INSTALLED_APPS = [
 
    "django.contrib.admin",
 
    "django.contrib.auth",
 
    "django.contrib.contenttypes",
 
    "django.contrib.messages",
 
    "django.contrib.sessions",
 
    "django.contrib.sites",
 
    "django.contrib.staticfiles",
 

	
 
    # theme
 
    "bootstrapform",
 
    "pinax_theme_bootstrap",
 

	
 
    # external
 
    "account",
 
    "easy_thumbnails",
 
    "taggit",
 
    "reversion",
 
    "metron",
 
    "sitetree",
 
    "pinax.boxes",
 
    "pinax.eventlog",
 
    "pinax.pages",
 

	
 
    # symposion
 
    "symposion",
 
    "symposion.conference",
 
    "symposion.proposals",
 
    "symposion.reviews",
 
    "symposion.schedule",
 
    "symposion.speakers",
 
    "symposion.sponsorship",
 
    "symposion.teams",
 

	
 
    # Registrasion
 
    "registrasion",
 
    "symposion_templates",
 

	
 
    # Registrasion-stipe
 
    "pinax.stripe",
 
    "django_countries",
 
    "registripe",
 

	
 
    #admin - required by registrasion ??
 
    "nested_admin",
 

	
 
    # project
 
    "pinaxcon",
 
    "pinaxcon.proposals",
 
    "pinaxcon.registrasion",
 

	
 
    #testing
 
    "django_nose",
 

	
 
    # stylesheets and js
 
    'compressor',
 
]
 

	
 
# A sample logging configuration. The only tangible logging
 
# performed by this configuration is to send an email to
 
# the site admins on every HTTP 500 error when DEBUG=False.
 
# See http://docs.djangoproject.com/en/dev/topics/logging for
 
# more details on how to customize your logging configuration.
 
LOGGING = {
 
    "version": 1,
 
    "disable_existing_loggers": False,
 
    "filters": {
 
        "require_debug_false": {
 
            "()": "django.utils.log.RequireDebugFalse"
 
        }
 
    },
 
    "handlers": {
 
        "mail_admins": {
 
            "level": "ERROR",
 
            "filters": ["require_debug_false"],
 
            "class": "django.utils.log.AdminEmailHandler"
 
        }
 
    },
 
    "loggers": {
 
        "django.request": {
 
            "handlers": ["mail_admins"],
 
            "level": "ERROR",
 
            "propagate": True,
 
        },
 
    }
 
}
 

	
 
COMPRESS_PRECOMPILERS = (
 
    ('text/x-scss', 'django_libsass.SassCompiler'),
 
)
 

	
 
FIXTURE_DIRS = [
 
    os.path.join(PROJECT_ROOT, "fixtures"),
 
]
 

	
 
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
 

	
 
ACCOUNT_OPEN_SIGNUP = True
 
ACCOUNT_EMAIL_UNIQUE = True
 
ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = False
 
ACCOUNT_LOGIN_REDIRECT_URL = "home"
 
ACCOUNT_LOGOUT_REDIRECT_URL = "home"
 
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
 
ACCOUNT_USE_AUTH_AUTHENTICATE = True
 

	
 
AUTHENTICATION_BACKENDS = [
 
    "symposion.teams.backends.TeamPermissionsBackend",
 
    "account.auth_backends.UsernameAuthenticationBackend",
 
]
 

	
 
CONFERENCE_ID = 1
 
PROPOSAL_FORMS = {
 
    "talk": "pinaxcon.proposals.forms.TalkProposalForm",
 
}
 
PINAX_PAGES_HOOKSET = "pinaxcon.hooks.PinaxPagesHookSet"
 
PINAX_BOXES_HOOKSET = "pinaxcon.hooks.PinaxBoxesHookSet"
 

	
 
PINAX_STRIPE_PUBLIC_KEY = os.environ.get("STRIPE_PUBLIC_KEY", "your test public key")
 
PINAX_STRIPE_SECRET_KEY = os.environ.get("STRIPE_SECRET_KEY", "your test secret key")
 
PINAX_STRIPE_SEND_EMAIL_RECEIPTS = False
 

	
 
# Registrasion Attendee profile model
 
ATTENDEE_PROFILE_MODEL = "pinaxcon.registrasion.models.AttendeeProfile"
 
# Registrasion attendee profile form -- must act on ATTENDEE_PROFILE_FORM
 
# You only need to provide this if you're customising the form from the default
 
# ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
 

	
 
# Ticket product category -- used to identify which products must be available
 
# in order to register.
 
TICKET_PRODUCT_CATEGORY = 1
 

	
 

	
 
INVOICE_CURRENCY = "AUD"
 

	
 
# Use nose to run all tests
 
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
 

	
 

	
 
# Tell nose to measure coverage on the 'foo' and 'bar' apps
 
NOSE_ARGS = [
 
    '--with-coverage',
 
    '--cover-package=registrasion.controllers,registrasion.models',
 
]
pinaxcon/templates/_footer.html
Show inline comments
 
<div class="pull-left">
 
    &copy;2016
 
    &copy; 2017
 
</div>
 

	
 
<div class="pull-right">
 
    Site powered by <a href="http://eldarion.com/symposion/"><b>Symposion</b></a>.
 
    Site powered by <a href="http://eldarion.com/symposion/"><b>Symposion</b></a>
 
    and <a href="http://github.com/chrisjrn/registrasion/"><b>Registrasion</b></a>.
 
</div>
pinaxcon/templates/_scripts.html
Show inline comments
 
<script src='/site_media/static/js/site-92ae8d0d6c.js'></script>
 
{% load compress %}
 
{% load staticfiles %}
 

	
 
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>
 
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.2.0/ace.js"></script>
 

	
 
{% compress js %}
 
  <script src='{% static "bootstrap/javascripts/bootstrap.min.js" %}'></script>
 
  <script src='{% static "js/site.js" %}'></script>
 
{% endcompress %}
pinaxcon/templates/_styles.html
Show inline comments
 
<link href='/site_media/static/css/site-0a247b924d.css' rel='stylesheet' />
 
{% load compress %}
 
{% load staticfiles %}
 

	
 
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
 
{% compress css %}
 
    <link rel="stylesheet" type="text/x-scss" href="{% static "scss/site.scss" %}" />
 
{% endcompress %}
pinaxcon/templates/homepage.html
Show inline comments
 
{% extends "site_base.html" %}
 

	
 
{% load i18n %}
 
{% load pinax_boxes_tags %}
 

	
 
{% block head_title %}{% trans "Welcome" %}{% endblock %}
 

	
 
{% block body_class %}home{% endblock %}
 

	
 
{% block body %}
 
    {% box "homepage" %}
 
  <h1>{{ SITE_NAME }}</h1>
 
  <p class="lead">Welcome to the demo site.</p>
 
{% endblock %}
pinaxcon/templates/page_with_title_and_lede.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% block head_title %}{% block title %}{% endblock %}{% endblock %}
 

	
 
{% block body %}
 

	
 
  {% block heading_base %}
 
    <h1>{% block heading %}{% endblock %}</h1>
 
  {% endblock %}
 

	
 
  {% block lede_base %}
 
    <p class="lead">{% block lede %}{% endblock %}</p>
 
  {% endblock %}
 

	
 
  {% block content %}
 
  {% endblock %}
 

	
 
{% endblock %}
pinaxcon/templates/pages/about.html
Show inline comments
 
new file 100644
 
{% extends "page_with_title_and_lede.html" %}
 

	
 
{% block title %}About {{ SITE_NAME }}{% endblock %}
 
{% block heading %}About {{ SITE_NAME }}{% endblock %}
 
{% block lede %}{{ SITE_NAME }} is the premier demo conference site for Symposion and Registrasion{% endblock %}
 

	
 
{% block content %}
 
  <p>I am the body content</p>
 
{% endblock %}
pinaxcon/templates/pages/sponsors/info.html
Show inline comments
 
new file 100644
 
{% extends "page_with_title_and_lede.html" %}
 

	
 
{% block title %}Sponsorship Prospectus{% endblock %}
 
{% block heading %}Sponsorship Prospectus{% endblock %}
 
{% block lede %}{{ SITE_NAME }} wants sponsors.{% endblock %}
 

	
 
{% block content %}
 
  <p>I am the body content</p>
 
{% endblock %}
pinaxcon/templates/pages/venue.html
Show inline comments
 
new file 100644
 
{% extends "page_with_title_and_lede.html" %}
 

	
 
{% block title %}Venue{% endblock %}
 
{% block heading %}Venue{% endblock %}
 
{% block lede %}{{ SITE_NAME }} is being held on a Django Hosting facility, somewhere.{% endblock %}
 

	
 
{% block content %}
 
  <p>I am the body content</p>
 
{% endblock %}
pinaxcon/templates/site_base.html
Show inline comments
 
{% extends "theme_bootstrap/base.html" %}
 

	
 
{% load staticfiles %}
 
{% load metron_tags %}
 
{% load i18n %}
 
{% load sitetree %}
 

	
 

	
 
{% block styles %}
 
    {% include "_styles.html" %}
 
{% endblock %}
 

	
 

	
 
{% block extra_head_base %}
 
    {% block extra_head %}{% endblock %}
 
{% endblock %}
 

	
 
{% block nav %}
 
    {% sitetree_menu from "main" include "trunk" template "sitetree/menu_bootstrap3.html" %}
 
{% endblock %}
 

	
 
{% block body_base %}
 
    <section id="content_body">
 
        <div class="container">
 
            {% include "_messages.html" %}
 
            <div class="row">
 
                <div class="col-md-9">
 
                    {% block body %}
 
                    {% endblock %}
 
                </div>
 
                <div class="col-md-3">
 
                    {% block sidebar %}
 
                        {% include "_default_sidebar.html" %}
 
                    {% endblock %}
 
                </div>
 
            </div>
 
        </div>
 
    </section>
 
{% endblock %}
 

	
 

	
 
{% block footer %}
 
    {% include "_footer.html" %}
 
{% endblock %}
 

	
 

	
 
{% block scripts %}
 
    {% include "_scripts.html" %}
 
    <script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.2.0/ace.js"></script>
 
{% endblock %}
 

	
 
{% block extra_body_base %}
 
    {% analytics %}
 
    {% block extra_body %}{% endblock %}
 
{% endblock %}
pinaxcon/templates/symposion/conference/user_list.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/proposal_new_message/message.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/proposal_new_message/subject.txt
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/proposal_updated/message.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/proposal_updated/subject.txt
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/speaker_addition/message.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/speaker_addition/subject.txt
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/speaker_invite/message.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/speaker_invite/subject.txt
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/speaker_no_profile/message.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/speaker_no_profile/subject.txt
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/sponsor_signup/message.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/sponsor_signup/subject.txt
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/teams_user_applied/message.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/teams_user_applied/subject.txt
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/teams_user_invited/message.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/emails/teams_user_invited/subject.txt
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/_pending_proposal_row.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/_proposal_fields.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/_proposal_row.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/base.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/document_create.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/proposal_cancel.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/proposal_detail.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/proposal_edit.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/proposal_leave.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/proposal_speaker_manage.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/proposal_submit.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/proposals/proposal_submit_kind.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/_result_notification_prepare_help.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/_review_table.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/access_not_permitted.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/base.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/result_notification.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/result_notification_prepare.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/review_admin.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/review_assignment.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/review_bulk_accept.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/review_comment.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/review_detail.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/review_list.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/review_review.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/reviews/review_stats.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/schedule/_edit_grid.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/schedule/_grid.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/schedule/_slot_edit.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/schedule/presentation_detail.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/schedule/schedule_conference.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/schedule/schedule_detail.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/schedule/schedule_edit.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/schedule/schedule_list.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/speakers/base.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/speakers/speaker_create.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/speakers/speaker_edit.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/speakers/speaker_profile.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/sponsorship/_horizontal_by_level.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/sponsorship/_sponsor_link.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/sponsorship/_vertical_by_level.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/sponsorship/_wall.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/sponsorship/add.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/sponsorship/apply.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/sponsorship/detail.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/sponsorship/list.html
Show inline comments
 
deleted file
pinaxcon/templates/symposion/teams/team_detail.html
Show inline comments
 
deleted file
pinaxcon/urls.py
Show inline comments
 
from django.conf import settings
 
from django.conf.urls import patterns, include, url
 
from django.conf.urls.static import static
 
from django.views.generic import TemplateView
 

	
 
from django.contrib import admin
 

	
 
import symposion.views
 

	
 

	
 
urlpatterns = [
 
    url(r"^$", TemplateView.as_view(template_name="homepage.html"), name="home"),
 

	
 
    url(r"^about$", TemplateView.as_view(template_name="pages/about.html"), name="page_about"),
 
    url(r"^venue$", TemplateView.as_view(template_name="pages/venue.html"), name="page_venue"),
 
    url(
 
        r"^sponsors/info$",
 
        TemplateView.as_view(template_name="pages/sponsors/info.html"),
 
        name="page_sponsor_info",
 
    ),
 

	
 
    url(r"^admin/", include(admin.site.urls)),
 

	
 
    url(r"^account/", include("account.urls")),
 

	
 
    url(r"^dashboard/", symposion.views.dashboard, name="dashboard"),
 

	
 
    url(r"^speaker/", include("symposion.speakers.urls")),
 
    url(r"^proposals/", include("symposion.proposals.urls")),
 
    url(r"^sponsors/", include("symposion.sponsorship.urls")),
 
    url(r"^reviews/", include("symposion.reviews.urls")),
 
    url(r"^schedule/", include("symposion.schedule.urls")),
 

	
 
    url(r"^teams/", include("symposion.teams.urls")),
 

	
 
    # Demo payment gateway and related features
 
    url(r"^register/pinaxcon/", include("pinaxcon.registrasion.urls")),
 

	
 
    # Demo payment gateway and related features
 
    url(r"^register/payments/", include("registripe.urls")),
 

	
 
    # Required by registrasion
 
    url(r'^register/', include('registrasion.urls')),
 
    url(r'^nested_admin/', include('nested_admin.urls')),
 

	
 
    url(r"^boxes/", include("pinax.boxes.urls")),
 

	
 
    # Catch-all MUST go last.
 
    #url(r"^", include("pinax.pages.urls")),
 
]
 

	
 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
requirements.txt
Show inline comments
 
Django==1.9.2
 
pinax-theme-bootstrap==7.3.0
 
django-user-accounts==1.3.1
 
metron==1.3.7
 
pinax-eventlog==1.1.1
 
dj-static==0.0.6
 
dj-database-url==0.4.0
 
pinax-pages==0.4.2
 
pinax-boxes==2.1.2
 
django-libsass==0.7
 

	
 
# For testing
 
django-nose==1.4.3
 
coverage==4.0.3
 

	
 
# Registrasion
 
https://github.com/chrisjrn/registrasion/tarball/master#egg=registrasion
 
https://github.com/pinax/symposion/tarball/ad81810#egg=symposion
 
https://github.com/chrisjrn/registrasion-stripe/tarball/master#egg=registrasion-stripe
 
https://github.com/chrisjrn/symposion-bootstrap-templates/tarball/master#egg=symposion-bootstrap-templates
static/STATIC_README.md
Show inline comments
 
deleted file
static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.eot
Show inline comments
 
file renamed from static/dist/fonts/glyphicons-halflings-regular.eot to static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.eot
static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.svg
Show inline comments
 
file renamed from static/dist/fonts/glyphicons-halflings-regular.svg to static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.svg
static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.ttf
Show inline comments
 
file renamed from static/dist/fonts/glyphicons-halflings-regular.ttf to static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.ttf
static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff
Show inline comments
 
file renamed from static/dist/fonts/glyphicons-halflings-regular.woff to static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff
static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff2
Show inline comments
 
file renamed from static/dist/fonts/glyphicons-halflings-regular.woff2 to static/bootstrap/fonts/bootstrap/glyphicons-halflings-regular.woff2
static/bootstrap/images/.keep
Show inline comments
 
new file 100644
static/bootstrap/javascripts/bootstrap-sprockets.js
Show inline comments
 
new file 100644
 
//= require ./bootstrap/transition
 
//= require ./bootstrap/alert
 
//= require ./bootstrap/button
 
//= require ./bootstrap/carousel
 
//= require ./bootstrap/collapse
 
//= require ./bootstrap/dropdown
 
//= require ./bootstrap/modal
 
//= require ./bootstrap/tab
 
//= require ./bootstrap/affix
 
//= require ./bootstrap/scrollspy
 
//= require ./bootstrap/tooltip
 
//= require ./bootstrap/popover
static/bootstrap/javascripts/bootstrap.js
Show inline comments
 
new file 100644
 
/*!
 
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 
 * Copyright 2011-2016 Twitter, Inc.
 
 * Licensed under the MIT license
 
 */
 

	
 
if (typeof jQuery === 'undefined') {
 
  throw new Error('Bootstrap\'s JavaScript requires jQuery')
 
}
 

	
 
+function ($) {
 
  'use strict';
 
  var version = $.fn.jquery.split(' ')[0].split('.')
 
  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
 
    throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
 
  }
 
}(jQuery);
 

	
 
/* ========================================================================
 
 * Bootstrap: transition.js v3.3.7
 
 * http://getbootstrap.com/javascript/#transitions
 
 * ========================================================================
 
 * Copyright 2011-2016 Twitter, Inc.
 
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 
 * ======================================================================== */
 

	
 

	
 
+function ($) {
 
  'use strict';
 

	
 
  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
 
  // ============================================================
 

	
 
  function transitionEnd() {
 
    var el = document.createElement('bootstrap')
 

	
 
    var transEndEventNames = {
 
      WebkitTransition : 'webkitTransitionEnd',
 
      MozTransition    : 'transitionend',
 
      OTransition      : 'oTransitionEnd otransitionend',
 
      transition       : 'transitionend'
 
    }
 

	
 
    for (var name in transEndEventNames) {
 
      if (el.style[name] !== undefined) {
 
        return { end: transEndEventNames[name] }
 
      }
 
    }
 

	
 
    return false // explicit for ie8 (  ._.)
 
  }
 

	
 
  // http://blog.alexmaccaw.com/css-transitions
 
  $.fn.emulateTransitionEnd = function (duration) {
 
    var called = false
 
    var $el = this
 
    $(this).one('bsTransitionEnd', function () { called = true })
 
    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
 
    setTimeout(callback, duration)
 
    return this
 
  }
 

	
 
  $(function () {
 
    $.support.transition = transitionEnd()
 

	
 
    if (!$.support.transition) return
 

	
 
    $.event.special.bsTransitionEnd = {
 
      bindType: $.support.transition.end,
 
      delegateType: $.support.transition.end,
 
      handle: function (e) {
 
        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
 
      }
 
    }
 
  })
 

	
 
}(jQuery);
 

	
 
/* ========================================================================
 
 * Bootstrap: alert.js v3.3.7
 
 * http://getbootstrap.com/javascript/#alerts
 
 * ========================================================================
 
 * Copyright 2011-2016 Twitter, Inc.
 
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 
 * ======================================================================== */
 

	
 

	
 
+function ($) {
 
  'use strict';
 

	
 
  // ALERT CLASS DEFINITION
 
  // ======================
 

	
 
  var dismiss = '[data-dismiss="alert"]'
 
  var Alert   = function (el) {
 
    $(el).on('click', dismiss, this.close)
 
  }
 

	
 
  Alert.VERSION = '3.3.7'
 

	
 
  Alert.TRANSITION_DURATION = 150
 

	
 
  Alert.prototype.close = function (e) {
 
    var $this    = $(this)
 
    var selector = $this.attr('data-target')
 

	
 
    if (!selector) {
 
      selector = $this.attr('href')
 
      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
 
    }
 

	
 
    var $parent = $(selector === '#' ? [] : selector)
 

	
 
    if (e) e.preventDefault()
 

	
 
    if (!$parent.length) {
 
      $parent = $this.closest('.alert')
 
    }
 

	
 
    $parent.trigger(e = $.Event('close.bs.alert'))
 

	
 
    if (e.isDefaultPrevented()) return
 

	
 
    $parent.removeClass('in')
 

	
 
    function removeElement() {
 
      // detach from parent, fire event then clean up data
 
      $parent.detach().trigger('closed.bs.alert').remove()
 
    }
 

	
 
    $.support.transition && $parent.hasClass('fade') ?
 
      $parent
 
        .one('bsTransitionEnd', removeElement)
 
        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
 
      removeElement()
 
  }
 

	
 

	
 
  // ALERT PLUGIN DEFINITION
 
  // =======================
 

	
 
  function Plugin(option) {
 
    return this.each(function () {
 
      var $this = $(this)
 
      var data  = $this.data('bs.alert')
 

	
 
      if (!data) $this.data('bs.alert', (data = new Alert(this)))
 
      if (typeof option == 'string') data[option].call($this)
 
    })
 
  }
 

	
 
  var old = $.fn.alert
 

	
 
  $.fn.alert             = Plugin
 
  $.fn.alert.Constructor = Alert
 

	
 

	
 
  // ALERT NO CONFLICT
 
  // =================
 

	
 
  $.fn.alert.noConflict = function () {
 
    $.fn.alert = old
 
    return this
 
  }
 

	
 

	
 
  // ALERT DATA-API
 
  // ==============
 

	
 
  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
 

	
 
}(jQuery);
 

	
 
/* ========================================================================
 
 * Bootstrap: button.js v3.3.7
 
 * http://getbootstrap.com/javascript/#buttons
 
 * ========================================================================
 
 * Copyright 2011-2016 Twitter, Inc.
 
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 
 * ======================================================================== */
 

	
 

	
 
+function ($) {
 
  'use strict';
 

	
 
  // BUTTON PUBLIC CLASS DEFINITION
 
  // ==============================
 

	
 
  var Button = function (element, options) {
 
    this.$element  = $(element)
 
    this.options   = $.extend({}, Button.DEFAULTS, options)
 
    this.isLoading = false
 
  }
 

	
 
  Button.VERSION  = '3.3.7'
 

	
 
  Button.DEFAULTS = {
 
    loadingText: 'loading...'
 
  }
 

	
 
  Button.prototype.setState = function (state) {
 
    var d    = 'disabled'
 
    var $el  = this.$element
 
    var val  = $el.is('input') ? 'val' : 'html'
 
    var data = $el.data()
 

	
 
    state += 'Text'
 

	
 
    if (data.resetText == null) $el.data('resetText', $el[val]())
 

	
 
    // push to event loop to allow forms to submit
 
    setTimeout($.proxy(function () {
 
      $el[val](data[state] == null ? this.options[state] : data[state])
 

	
 
      if (state == 'loadingText') {
 
        this.isLoading = true
 
        $el.addClass(d).attr(d, d).prop(d, true)
 
      } else if (this.isLoading) {
 
        this.isLoading = false
 
        $el.removeClass(d).removeAttr(d).prop(d, false)
 
      }
 
    }, this), 0)
 
  }
 

	
 
  Button.prototype.toggle = function () {
 
    var changed = true
 
    var $parent = this.$element.closest('[data-toggle="buttons"]')
 

	
 
    if ($parent.length) {
 
      var $input = this.$element.find('input')
 
      if ($input.prop('type') == 'radio') {
 
        if ($input.prop('checked')) changed = false
 
        $parent.find('.active').removeClass('active')
 
        this.$element.addClass('active')
 
      } else if ($input.prop('type') == 'checkbox') {
 
        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
 
        this.$element.toggleClass('active')
 
      }
 
      $input.prop('checked', this.$element.hasClass('active'))
 
      if (changed) $input.trigger('change')
 
    } else {
 
      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
 
      this.$element.toggleClass('active')
 
    }
 
  }
 

	
 

	
 
  // BUTTON PLUGIN DEFINITION
 
  // ========================
 

	
 
  function Plugin(option) {
 
    return this.each(function () {
 
      var $this   = $(this)
 
      var data    = $this.data('bs.button')
 
      var options = typeof option == 'object' && option
 

	
 
      if (!data) $this.data('bs.button', (data = new Button(this, options)))
 

	
 
      if (option == 'toggle') data.toggle()
 
      else if (option) data.setState(option)
 
    })
 
  }
 

	
 
  var old = $.fn.button
 

	
 
  $.fn.button             = Plugin
 
  $.fn.button.Constructor = Button
 

	
 

	
 
  // BUTTON NO CONFLICT
 
  // ==================
 

	
 
  $.fn.button.noConflict = function () {
 
    $.fn.button = old
 
    return this
 
  }
 

	
 

	
 
  // BUTTON DATA-API
 
  // ===============
 

	
 
  $(document)
 
    .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
 
      var $btn = $(e.target).closest('.btn')
 
      Plugin.call($btn, 'toggle')
 
      if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
 
        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
 
        e.preventDefault()
 
        // The target component still receive the focus
 
        if ($btn.is('input,button')) $btn.trigger('focus')
 
        else $btn.find('input:visible,button:visible').first().trigger('focus')
 
      }
 
    })
 
    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
 
      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
 
    })
 

	
 
}(jQuery);
 

	
 
/* ========================================================================
 
 * Bootstrap: carousel.js v3.3.7
 
 * http://getbootstrap.com/javascript/#carousel
 
 * ========================================================================
 
 * Copyright 2011-2016 Twitter, Inc.
 
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 
 * ======================================================================== */
 

	
 

	
 
+function ($) {
 
  'use strict';
 

	
 
  // CAROUSEL CLASS DEFINITION
 
  // =========================
 

	
 
  var Carousel = function (element, options) {
 
    this.$element    = $(element)
 
    this.$indicators = this.$element.find('.carousel-indicators')
 
    this.options     = options
 
    this.paused      = null
 
    this.sliding     = null
 
    this.interval    = null
 
    this.$active     = null
 
    this.$items      = null
 

	
 
    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
 

	
 
    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
 
      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
 
      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
 
  }
 

	
 
  Carousel.VERSION  = '3.3.7'
 

	
 
  Carousel.TRANSITION_DURATION = 600
 

	
 
  Carousel.DEFAULTS = {
 
    interval: 5000,
 
    pause: 'hover',
 
    wrap: true,
 
    keyboard: true
 
  }
 

	
 
  Carousel.prototype.keydown = function (e) {
 
    if (/input|textarea/i.test(e.target.tagName)) return
 
    switch (e.which) {
 
      case 37: this.prev(); break
 
      case 39: this.next(); break
 
      default: return
 
    }
 

	
 
    e.preventDefault()
 
  }
 

	
 
  Carousel.prototype.cycle = function (e) {
 
    e || (this.paused = false)
 

	
 
    this.interval && clearInterval(this.interval)
 

	
 
    this.options.interval
 
      && !this.paused
 
      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
 

	
 
    return this
 
  }
 

	
 
  Carousel.prototype.getItemIndex = function (item) {
 
    this.$items = item.parent().children('.item')
 
    return this.$items.index(item || this.$active)
 
  }
 

	
 
  Carousel.prototype.getItemForDirection = function (direction, active) {
 
    var activeIndex = this.getItemIndex(active)
 
    var willWrap = (direction == 'prev' && activeIndex === 0)
 
                || (direction == 'next' && activeIndex == (this.$items.length - 1))
 
    if (willWrap && !this.options.wrap) return active
 
    var delta = direction == 'prev' ? -1 : 1
 
    var itemIndex = (activeIndex + delta) % this.$items.length
 
    return this.$items.eq(itemIndex)
 
  }
 

	
 
  Carousel.prototype.to = function (pos) {
 
    var that        = this
 
    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
 

	
 
    if (pos > (this.$items.length - 1) || pos < 0) return
 

	
 
    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
 
    if (activeIndex == pos) return this.pause().cycle()
 

	
 
    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
 
  }
 

	
 
  Carousel.prototype.pause = function (e) {
 
    e || (this.paused = true)
 

	
 
    if (this.$element.find('.next, .prev').length && $.support.transition) {
 
      this.$element.trigger($.support.transition.end)
 
      this.cycle(true)
 
    }
 

	
 
    this.interval = clearInterval(this.interval)
 

	
 
    return this
 
  }
 

	
 
  Carousel.prototype.next = function () {
 
    if (this.sliding) return
 
    return this.slide('next')
 
  }
 

	
 
  Carousel.prototype.prev = function () {
 
    if (this.sliding) return
 
    return this.slide('prev')
 
  }