| @@ -0,0 +1,191 @@ | ||
| +// SPRITES | ||
| +// Glyphs and icons for buttons, nav, and more | ||
| +// ------------------------------------------- | ||
| + | ||
| + | ||
| +// ICONS | ||
| +// ----- | ||
| + | ||
| +// All icons receive the styles of the <i> tag with a base class | ||
| +// of .i and are then given a unique class to add width, height, | ||
| +// and background-position. Your resulting HTML will look like | ||
| +// <i class="icon-inbox"></i>. | ||
| + | ||
| +// For the white version of the icons, just add the .icon-white class: | ||
| +// <i class="icon-inbox icon-white"></i> | ||
| + | ||
| +[class^="icon-"], | ||
| +[class*=" icon-"] { | ||
| + display: inline-block; | ||
| + width: 14px; | ||
| + height: 14px; | ||
| + .ie7-restore-right-whitespace(); | ||
| + line-height: 14px; | ||
| + vertical-align: text-top; | ||
| + background-image: url("@{iconSpritePath}"); | ||
| + background-position: 14px 14px; | ||
| + background-repeat: no-repeat; | ||
| + | ||
| +} | ||
| +.icon-white { | ||
| + background-image: url("@{iconWhiteSpritePath}"); | ||
| +} | ||
| + | ||
| +.icon-glass { background-position: 0 0; } | ||
| +.icon-music { background-position: -24px 0; } | ||
| +.icon-search { background-position: -48px 0; } | ||
| +.icon-envelope { background-position: -72px 0; } | ||
| +.icon-heart { background-position: -96px 0; } | ||
| +.icon-star { background-position: -120px 0; } | ||
| +.icon-star-empty { background-position: -144px 0; } | ||
| +.icon-user { background-position: -168px 0; } | ||
| +.icon-film { background-position: -192px 0; } | ||
| +.icon-th-large { background-position: -216px 0; } | ||
| +.icon-th { background-position: -240px 0; } | ||
| +.icon-th-list { background-position: -264px 0; } | ||
| +.icon-ok { background-position: -288px 0; } | ||
| +.icon-remove { background-position: -312px 0; } | ||
| +.icon-zoom-in { background-position: -336px 0; } | ||
| +.icon-zoom-out { background-position: -360px 0; } | ||
| +.icon-off { background-position: -384px 0; } | ||
| +.icon-signal { background-position: -408px 0; } | ||
| +.icon-cog { background-position: -432px 0; } | ||
| +.icon-trash { background-position: -456px 0; } | ||
| + | ||
| +.icon-home { background-position: 0 -24px; } | ||
| +.icon-file { background-position: -24px -24px; } | ||
| +.icon-time { background-position: -48px -24px; } | ||
| +.icon-road { background-position: -72px -24px; } | ||
| +.icon-download-alt { background-position: -96px -24px; } | ||
| +.icon-download { background-position: -120px -24px; } | ||
| +.icon-upload { background-position: -144px -24px; } | ||
| +.icon-inbox { background-position: -168px -24px; } | ||
| +.icon-play-circle { background-position: -192px -24px; } | ||
| +.icon-repeat { background-position: -216px -24px; } | ||
| +.icon-refresh { background-position: -240px -24px; } | ||
| +.icon-list-alt { background-position: -264px -24px; } | ||
| +.icon-lock { background-position: -287px -24px; } // 1px off | ||
| +.icon-flag { background-position: -312px -24px; } | ||
| +.icon-headphones { background-position: -336px -24px; } | ||
| +.icon-volume-off { background-position: -360px -24px; } | ||
| +.icon-volume-down { background-position: -384px -24px; } | ||
| +.icon-volume-up { background-position: -408px -24px; } | ||
| +.icon-qrcode { background-position: -432px -24px; } | ||
| +.icon-barcode { background-position: -456px -24px; } | ||
| + | ||
| +.icon-tag { background-position: 0 -48px; } | ||
| +.icon-tags { background-position: -25px -48px; } // 1px off | ||
| +.icon-book { background-position: -48px -48px; } | ||
| +.icon-bookmark { background-position: -72px -48px; } | ||
| +.icon-print { background-position: -96px -48px; } | ||
| +.icon-camera { background-position: -120px -48px; } | ||
| +.icon-font { background-position: -144px -48px; } | ||
| +.icon-bold { background-position: -167px -48px; } // 1px off | ||
| +.icon-italic { background-position: -192px -48px; } | ||
| +.icon-text-height { background-position: -216px -48px; } | ||
| +.icon-text-width { background-position: -240px -48px; } | ||
| +.icon-align-left { background-position: -264px -48px; } | ||
| +.icon-align-center { background-position: -288px -48px; } | ||
| +.icon-align-right { background-position: -312px -48px; } | ||
| +.icon-align-justify { background-position: -336px -48px; } | ||
| +.icon-list { background-position: -360px -48px; } | ||
| +.icon-indent-left { background-position: -384px -48px; } | ||
| +.icon-indent-right { background-position: -408px -48px; } | ||
| +.icon-facetime-video { background-position: -432px -48px; } | ||
| +.icon-picture { background-position: -456px -48px; } | ||
| + | ||
| +.icon-pencil { background-position: 0 -72px; } | ||
| +.icon-map-marker { background-position: -24px -72px; } | ||
| +.icon-adjust { background-position: -48px -72px; } | ||
| +.icon-tint { background-position: -72px -72px; } | ||
| +.icon-edit { background-position: -96px -72px; } | ||
| +.icon-share { background-position: -120px -72px; } | ||
| +.icon-check { background-position: -144px -72px; } | ||
| +.icon-move { background-position: -168px -72px; } | ||
| +.icon-step-backward { background-position: -192px -72px; } | ||
| +.icon-fast-backward { background-position: -216px -72px; } | ||
| +.icon-backward { background-position: -240px -72px; } | ||
| +.icon-play { background-position: -264px -72px; } | ||
| +.icon-pause { background-position: -288px -72px; } | ||
| +.icon-stop { background-position: -312px -72px; } | ||
| +.icon-forward { background-position: -336px -72px; } | ||
| +.icon-fast-forward { background-position: -360px -72px; } | ||
| +.icon-step-forward { background-position: -384px -72px; } | ||
| +.icon-eject { background-position: -408px -72px; } | ||
| +.icon-chevron-left { background-position: -432px -72px; } | ||
| +.icon-chevron-right { background-position: -456px -72px; } | ||
| + | ||
| +.icon-plus-sign { background-position: 0 -96px; } | ||
| +.icon-minus-sign { background-position: -24px -96px; } | ||
| +.icon-remove-sign { background-position: -48px -96px; } | ||
| +.icon-ok-sign { background-position: -72px -96px; } | ||
| +.icon-question-sign { background-position: -96px -96px; } | ||
| +.icon-info-sign { background-position: -120px -96px; } | ||
| +.icon-screenshot { background-position: -144px -96px; } | ||
| +.icon-remove-circle { background-position: -168px -96px; } | ||
| +.icon-ok-circle { background-position: -192px -96px; } | ||
| +.icon-ban-circle { background-position: -216px -96px; } | ||
| +.icon-arrow-left { background-position: -240px -96px; } | ||
| +.icon-arrow-right { background-position: -264px -96px; } | ||
| +.icon-arrow-up { background-position: -289px -96px; } // 1px off | ||
| +.icon-arrow-down { background-position: -312px -96px; } | ||
| +.icon-share-alt { background-position: -336px -96px; } | ||
| +.icon-resize-full { background-position: -360px -96px; } | ||
| +.icon-resize-small { background-position: -384px -96px; } | ||
| +.icon-plus { background-position: -408px -96px; } | ||
| +.icon-minus { background-position: -433px -96px; } | ||
| +.icon-asterisk { background-position: -456px -96px; } | ||
| + | ||
| +.icon-exclamation-sign { background-position: 0 -120px; } | ||
| +.icon-gift { background-position: -24px -120px; } | ||
| +.icon-leaf { background-position: -48px -120px; } | ||
| +.icon-fire { background-position: -72px -120px; } | ||
| +.icon-eye-open { background-position: -96px -120px; } | ||
| +.icon-eye-close { background-position: -120px -120px; } | ||
| +.icon-warning-sign { background-position: -144px -120px; } | ||
| +.icon-plane { background-position: -168px -120px; } | ||
| +.icon-calendar { background-position: -192px -120px; } | ||
| +.icon-random { background-position: -216px -120px; } | ||
| +.icon-comment { background-position: -240px -120px; } | ||
| +.icon-magnet { background-position: -264px -120px; } | ||
| +.icon-chevron-up { background-position: -288px -120px; } | ||
| +.icon-chevron-down { background-position: -313px -119px; } // 1px, 1px off | ||
| +.icon-retweet { background-position: -336px -120px; } | ||
| +.icon-shopping-cart { background-position: -360px -120px; } | ||
| +.icon-folder-close { background-position: -384px -120px; } | ||
| +.icon-folder-open { background-position: -408px -120px; } | ||
| +.icon-resize-vertical { background-position: -432px -119px; } // 1px, 1px off | ||
| +.icon-resize-horizontal { background-position: -456px -118px; } // 1px, 2px off | ||
| + | ||
| +.icon-hdd { background-position: 0 -144px; } | ||
| +.icon-bullhorn { background-position: -24px -144px; } | ||
| +.icon-bell { background-position: -48px -144px; } | ||
| +.icon-certificate { background-position: -72px -144px; } | ||
| +.icon-thumbs-up { background-position: -96px -144px; } | ||
| +.icon-thumbs-down { background-position: -120px -144px; } | ||
| +.icon-hand-right { background-position: -144px -144px; } | ||
| +.icon-hand-left { background-position: -168px -144px; } | ||
| +.icon-hand-up { background-position: -192px -144px; } | ||
| +.icon-hand-down { background-position: -216px -144px; } | ||
| +.icon-circle-arrow-right { background-position: -240px -144px; } | ||
| +.icon-circle-arrow-left { background-position: -264px -144px; } | ||
| +.icon-circle-arrow-up { background-position: -288px -144px; } | ||
| +.icon-circle-arrow-down { background-position: -312px -144px; } | ||
| +.icon-globe { background-position: -336px -144px; } | ||
| +.icon-wrench { background-position: -360px -144px; } | ||
| +.icon-tasks { background-position: -384px -144px; } | ||
| +.icon-filter { background-position: -408px -144px; } | ||
| +.icon-briefcase { background-position: -432px -144px; } | ||
| +.icon-fullscreen { background-position: -456px -144px; } | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + | ||
| + |
| @@ -0,0 +1,118 @@ | ||
| +/*! | ||
| + * Bootstrap v2.0.4 | ||
| + * | ||
| + * Copyright 2012 Twitter, Inc | ||
| + * Licensed under the Apache License v2.0 | ||
| + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| + * | ||
| + * Designed and built with all the love in the world @twitter by @mdo and @fat. | ||
| + */ | ||
| + | ||
| +// CSS Reset | ||
| +@import "reset.less"; | ||
| + | ||
| +// Core variables and mixins | ||
| +@import "variables.less"; // Modify this for custom colors, font-sizes, etc | ||
| +@import "mixins.less"; | ||
| + | ||
| +// Grid system and page structure | ||
| +@import "scaffolding.less"; | ||
| +@import "grid.less"; | ||
| +@import "layouts.less"; | ||
| + | ||
| +// Base CSS | ||
| +@import "type.less"; | ||
| +@import "code.less"; | ||
| +@import "forms.less"; | ||
| +@import "tables.less"; | ||
| + | ||
| +// Components: common | ||
| +@import "sprites.less"; | ||
| +@import "dropdowns.less"; | ||
| +@import "wells.less"; | ||
| +@import "component-animations.less"; | ||
| +@import "close.less"; | ||
| + | ||
| +// Components: Buttons & Alerts | ||
| +@import "buttons.less"; | ||
| +@import "button-groups.less"; | ||
| +@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less | ||
| + | ||
| +// Components: Nav | ||
| +@import "navs.less"; | ||
| +@import "navbar.less"; | ||
| +@import "breadcrumbs.less"; | ||
| +@import "pagination.less"; | ||
| +@import "pager.less"; | ||
| + | ||
| +// Components: Popovers | ||
| +@import "modals.less"; | ||
| +@import "tooltip.less"; | ||
| +@import "popovers.less"; | ||
| + | ||
| +// Components: Misc | ||
| +@import "thumbnails.less"; | ||
| +@import "labels-badges.less"; | ||
| +@import "progress-bars.less"; | ||
| +@import "accordion.less"; | ||
| +@import "carousel.less"; | ||
| +@import "hero-unit.less"; | ||
| + | ||
| +// Utility classes | ||
| +@import "utilities.less"; // Has to be last to override when necessary | ||
| + | ||
| +/*! | ||
| + * Bootstrap Responsive v2.0.4 | ||
| + * | ||
| + * Copyright 2012 Twitter, Inc | ||
| + * Licensed under the Apache License v2.0 | ||
| + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| + * | ||
| + * Designed and built with all the love in the world @twitter by @mdo and @fat. | ||
| + */ | ||
| + | ||
| + | ||
| +// Responsive.less | ||
| +// For phone and tablet devices | ||
| +// ------------------------------------------------------------- | ||
| + | ||
| + | ||
| +// RESPONSIVE CLASSES | ||
| +// ------------------ | ||
| + | ||
| +@import "responsive-utilities.less"; | ||
| + | ||
| + | ||
| +// MEDIA QUERIES | ||
| +// ------------------ | ||
| + | ||
| +// Phones to portrait tablets and narrow desktops | ||
| +@import "responsive-767px-max.less"; | ||
| + | ||
| +// Tablets to regular desktops | ||
| +@import "responsive-768px-979px.less"; | ||
| + | ||
| +// Large desktops | ||
| +@import "responsive-1200px-min.less"; | ||
| + | ||
| + | ||
| +// RESPONSIVE NAVBAR | ||
| +// ------------------ | ||
| + | ||
| +// From 979px and below, show a button to toggle navbar contents | ||
| +@import "responsive-navbar.less"; | ||
| + | ||
| + | ||
| +/*! | ||
| + * The Blue Alliance | ||
| + * Built on top of the Twitter Bootstrap Framework | ||
| + */ | ||
| + | ||
| +@import "tba_base.less"; | ||
| +@import "tba_bracket_table.less"; | ||
| +@import "tba_event_list.less"; | ||
| +@import "tba_event_page.less"; | ||
| +@import "tba_landing.less"; | ||
| +@import "tba_match_table.less"; | ||
| +@import "tba_team_page.less"; | ||
| +@import "tba_team_table.less"; |
| @@ -0,0 +1,176 @@ | ||
| +// | ||
| +// Tables.less | ||
| +// Tables for, you guessed it, tabular data | ||
| +// ---------------------------------------- | ||
| + | ||
| + | ||
| +// BASE TABLES | ||
| +// ----------------- | ||
| + | ||
| +table { | ||
| + max-width: 100%; | ||
| + background-color: @tableBackground; | ||
| + border-collapse: collapse; | ||
| + border-spacing: 0; | ||
| +} | ||
| + | ||
| +// BASELINE STYLES | ||
| +// --------------- | ||
| + | ||
| +.table { | ||
| + width: 100%; | ||
| + margin-bottom: @baseLineHeight; | ||
| + // Cells | ||
| + th, | ||
| + td { | ||
| + padding: 8px; | ||
| + line-height: @baseLineHeight; | ||
| + text-align: left; | ||
| + vertical-align: top; | ||
| + border-top: 1px solid @tableBorder; | ||
| + } | ||
| + th { | ||
| + font-weight: bold; | ||
| + } | ||
| + // Bottom align for column headings | ||
| + thead th { | ||
| + vertical-align: bottom; | ||
| + } | ||
| + // Remove top border from thead by default | ||
| + caption + thead tr:first-child th, | ||
| + caption + thead tr:first-child td, | ||
| + colgroup + thead tr:first-child th, | ||
| + colgroup + thead tr:first-child td, | ||
| + thead:first-child tr:first-child th, | ||
| + thead:first-child tr:first-child td { | ||
| + border-top: 0; | ||
| + } | ||
| + // Account for multiple tbody instances | ||
| + tbody + tbody { | ||
| + border-top: 2px solid @tableBorder; | ||
| + } | ||
| +} | ||
| + | ||
| + | ||
| + | ||
| +// CONDENSED TABLE W/ HALF PADDING | ||
| +// ------------------------------- | ||
| + | ||
| +.table-condensed { | ||
| + th, | ||
| + td { | ||
| + padding: 4px 5px; | ||
| + } | ||
| +} | ||
| + | ||
| + | ||
| +// BORDERED VERSION | ||
| +// ---------------- | ||
| + | ||
| +.table-bordered { | ||
| + border: 1px solid @tableBorder; | ||
| + border-collapse: separate; // Done so we can round those corners! | ||
| + *border-collapse: collapsed; // IE7 can't round corners anyway | ||
| + border-left: 0; | ||
| + .border-radius(4px); | ||
| + th, | ||
| + td { | ||
| + border-left: 1px solid @tableBorder; | ||
| + } | ||
| + // Prevent a double border | ||
| + caption + thead tr:first-child th, | ||
| + caption + tbody tr:first-child th, | ||
| + caption + tbody tr:first-child td, | ||
| + colgroup + thead tr:first-child th, | ||
| + colgroup + tbody tr:first-child th, | ||
| + colgroup + tbody tr:first-child td, | ||
| + thead:first-child tr:first-child th, | ||
| + tbody:first-child tr:first-child th, | ||
| + tbody:first-child tr:first-child td { | ||
| + border-top: 0; | ||
| + } | ||
| + // For first th or td in the first row in the first thead or tbody | ||
| + thead:first-child tr:first-child th:first-child, | ||
| + tbody:first-child tr:first-child td:first-child { | ||
| + -webkit-border-top-left-radius: 4px; | ||
| + border-top-left-radius: 4px; | ||
| + -moz-border-radius-topleft: 4px; | ||
| + } | ||
| + thead:first-child tr:first-child th:last-child, | ||
| + tbody:first-child tr:first-child td:last-child { | ||
| + -webkit-border-top-right-radius: 4px; | ||
| + border-top-right-radius: 4px; | ||
| + -moz-border-radius-topright: 4px; | ||
| + } | ||
| + // For first th or td in the first row in the first thead or tbody | ||
| + thead:last-child tr:last-child th:first-child, | ||
| + tbody:last-child tr:last-child td:first-child { | ||
| + .border-radius(0 0 0 4px); | ||
| + -webkit-border-bottom-left-radius: 4px; | ||
| + border-bottom-left-radius: 4px; | ||
| + -moz-border-radius-bottomleft: 4px; | ||
| + } | ||
| + thead:last-child tr:last-child th:last-child, | ||
| + tbody:last-child tr:last-child td:last-child { | ||
| + -webkit-border-bottom-right-radius: 4px; | ||
| + border-bottom-right-radius: 4px; | ||
| + -moz-border-radius-bottomright: 4px; | ||
| + } | ||
| +} | ||
| + | ||
| + | ||
| +// ZEBRA-STRIPING | ||
| +// -------------- | ||
| + | ||
| +// Default zebra-stripe styles (alternating gray and transparent backgrounds) | ||
| +.table-striped { | ||
| + tbody { | ||
| + tr:nth-child(odd) td, | ||
| + tr:nth-child(odd) th { | ||
| + background-color: @tableBackgroundAccent; | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| + | ||
| +// HOVER EFFECT | ||
| +// ------------ | ||
| +// Placed here since it has to come after the potential zebra striping | ||
| +.table { | ||
| + tbody tr:hover td, | ||
| + tbody tr:hover th { | ||
| + background-color: @tableBackgroundHover; | ||
| + } | ||
| +} | ||
| + | ||
| + | ||
| +// TABLE CELL SIZING | ||
| +// ----------------- | ||
| + | ||
| +// Change the columns | ||
| +table { | ||
| + .span1 { .tableColumns(1); } | ||
| + .span2 { .tableColumns(2); } | ||
| + .span3 { .tableColumns(3); } | ||
| + .span4 { .tableColumns(4); } | ||
| + .span5 { .tableColumns(5); } | ||
| + .span6 { .tableColumns(6); } | ||
| + .span7 { .tableColumns(7); } | ||
| + .span8 { .tableColumns(8); } | ||
| + .span9 { .tableColumns(9); } | ||
| + .span10 { .tableColumns(10); } | ||
| + .span11 { .tableColumns(11); } | ||
| + .span12 { .tableColumns(12); } | ||
| + .span13 { .tableColumns(13); } | ||
| + .span14 { .tableColumns(14); } | ||
| + .span15 { .tableColumns(15); } | ||
| + .span16 { .tableColumns(16); } | ||
| + .span17 { .tableColumns(17); } | ||
| + .span18 { .tableColumns(18); } | ||
| + .span19 { .tableColumns(19); } | ||
| + .span20 { .tableColumns(20); } | ||
| + .span21 { .tableColumns(21); } | ||
| + .span22 { .tableColumns(22); } | ||
| + .span23 { .tableColumns(23); } | ||
| + .span24 { .tableColumns(24); } | ||
| +} |
| @@ -0,0 +1,126 @@ | ||
| +#navTitle { | ||
| + background-image: url('/images/tba_blue_lamp_navbar.png'); | ||
| + background-repeat: no-repeat; | ||
| + background-position: left center; | ||
| + padding-left: 30px; | ||
| + margin-left: 10px; | ||
| + padding-right: 0; | ||
| +} | ||
| + | ||
| +#subnav { | ||
| + margin-left: 15px; | ||
| +} | ||
| + | ||
| + | ||
| +.social-icons { | ||
| + padding: 0; | ||
| + margin: 9px 0 0 0; | ||
| + float: right; | ||
| + | ||
| + @media (max-width: 980px) and (min-width: 768px) { | ||
| + float: left; | ||
| + margin: 0 0 0 11px; | ||
| + } | ||
| + | ||
| + @media (max-width: 767px) { | ||
| + margin: 0; | ||
| + text-align: center; | ||
| + float: none; | ||
| + | ||
| + .socialIcon { | ||
| + margin: 0 4px; | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| +.socialIcon { | ||
| + width: 24px; | ||
| + height: 24px; | ||
| + display: inline-block; | ||
| + margin: 0 4px 0px 4px; | ||
| + background-repeat: no-repeat; | ||
| + background-position: center center; | ||
| +} | ||
| + | ||
| +#facebook { | ||
| + background-image: url('/images/icons/facebook-24x24.png'); | ||
| +} | ||
| + | ||
| +#twitter { | ||
| + background-image: url('/images/icons/twitter-24x24.png'); | ||
| +} | ||
| + | ||
| +#tumblr { | ||
| + background-image: url('/images/icons/tumblr-24x24.png'); | ||
| +} | ||
| + | ||
| +#footer { | ||
| + margin-top: 50px; | ||
| + text-align: center; | ||
| +} | ||
| + | ||
| +.sponsorImage { | ||
| + width: 130px; | ||
| + height: 30px; | ||
| + text-align: center; | ||
| + display: inline-block; | ||
| + background-position: center center; | ||
| + background-repeat: no-repeat; | ||
| +} | ||
| + | ||
| +.sponsor{ | ||
| + vertical-align: middle; | ||
| + margin: 0px 3px; | ||
| + display: inline-block; | ||
| +} | ||
| + | ||
| +#dotblock { | ||
| + background-image: url('/images/dotblock.png'); | ||
| +} | ||
| + | ||
| +#appengine { | ||
| + background-image: url('/images/appengine.png'); | ||
| +} | ||
| + | ||
| +.container > .end_header { | ||
| + margin-bottom: 15px; | ||
| +} | ||
| + | ||
| +// Inheritance doesn't seme to be working. Copied from navs.less | ||
| +@media (max-width: 767px) { | ||
| + // Stacked tabs and pills | ||
| + .nav-stacked-phone > li { | ||
| + float: none; | ||
| + } | ||
| + .nav-stacked-phone > li > a { | ||
| + margin-right: 0; // no need for the gap between nav items | ||
| + margin-top: 0; | ||
| + } | ||
| + | ||
| + // Tabs | ||
| + .nav-tabs.nav-stacked-phone { | ||
| + border-bottom: 0; | ||
| + } | ||
| + .nav-tabs.nav-stacked-phone > li > a { | ||
| + border: 1px solid #ddd; | ||
| + .border-radius(0); | ||
| + } | ||
| + .nav-tabs.nav-stacked-phone > li:first-child > a { | ||
| + .border-radius(4px 4px 0 0); | ||
| + } | ||
| + .nav-tabs.nav-stacked-phone > li:last-child > a { | ||
| + .border-radius(0 0 4px 4px); | ||
| + } | ||
| + .nav-tabs.nav-stacked-phone > li > a:hover { | ||
| + border-color: #ddd; | ||
| + z-index: 2; | ||
| + } | ||
| + | ||
| + // Pills | ||
| + .nav-pills.nav-stacked-phone > li > a { | ||
| + margin-bottom: 3px; | ||
| + } | ||
| + .nav-pills.nav-stacked-phone > li:last-child > a { | ||
| + margin-bottom: 1px; // decrease margin to match sizing of stacked tabs | ||
| + } | ||
| +} |
| @@ -0,0 +1,52 @@ | ||
| +.brackettable { | ||
| + border: 1px solid black; | ||
| + margin: 0 auto 0 auto; | ||
| + width: 75%; | ||
| +} | ||
| + | ||
| +.brackettable .header { | ||
| + background: #999; | ||
| + color: black; | ||
| + font-size: 18px; | ||
| + font-weight: bold; | ||
| + padding: 4px; | ||
| +} | ||
| + | ||
| +.brackettable tr td { | ||
| + padding: 3px 10px; | ||
| + border: 1px solid black; | ||
| + text-align: center; | ||
| + background-color: #eee; | ||
| +} | ||
| + | ||
| +.brackettable .winnerL { | ||
| + background-image: url(http://dev.thebluealliance.net/tbatv/images/advancedR.png); | ||
| + background-position: center right; | ||
| + background-repeat: no-repeat; | ||
| + background-color: #fff; | ||
| + padding-right: 15px; | ||
| +} | ||
| + | ||
| +.brackettable .winnerR { | ||
| + background-image: url(http://dev.thebluealliance.net/tbatv/images/advancedL.png); | ||
| + background-position: center left; | ||
| + background-repeat: no-repeat; | ||
| + background-color: #fff; | ||
| + padding-left: 15px; | ||
| +} | ||
| + | ||
| +.brackettable .winnerC { | ||
| + background-image: url(http://dev.thebluealliance.net/tbatv/images/firstplace.png); | ||
| + background-position: center 15px; | ||
| + background-repeat: no-repeat; | ||
| + background-color: #fff; | ||
| + padding-top: 25px; | ||
| +} | ||
| + | ||
| +.brackettable .secondC { | ||
| + background-image: url(http://dev.thebluealliance.net/tbatv/images/secondplace.png); | ||
| + background-position: center 15px; | ||
| + background-repeat: no-repeat; | ||
| + background-color: #eee; | ||
| + padding-top: 25px; | ||
| +} |
| @@ -0,0 +1,50 @@ | ||
| +.year_list { | ||
| + padding-bottom: 20px; | ||
| +} | ||
| + | ||
| +.event_block { | ||
| + display: table; | ||
| + float: left; | ||
| + padding: 8px; | ||
| + .box-sizing(border-box); | ||
| +} | ||
| + | ||
| +.event_info { | ||
| + height: 100px; | ||
| + background-color: @grayLighter; | ||
| + padding: 8px; | ||
| + color: @textColor; | ||
| + border: 1px solid #ddd; | ||
| + .border-radius(4px); | ||
| + .box-shadow(0 1px 1px rgba(0,0,0,.075)); | ||
| + display: table-cell; | ||
| + vertical-align: middle; | ||
| + text-align: center; | ||
| +} | ||
| + | ||
| +div.event_info:hover { | ||
| + border-color: @linkColor; | ||
| + .box-shadow(0 1px 4px rgba(0,105,214,.25)); | ||
| +} | ||
| + | ||
| +.no_events > p { | ||
| + margin-left: 20px; | ||
| +} | ||
| +@media (min-width: 1200px) { | ||
| + .event_block { | ||
| + width: 33%; | ||
| + } | ||
| +} | ||
| + | ||
| +@media (max-width: 1199px) and (min-width: 768px) { | ||
| + .event_block { | ||
| + width: 50%; | ||
| + } | ||
| +} | ||
| + | ||
| +@media (max-width: 767px) { | ||
| + .event_block { | ||
| + width: 100%; | ||
| + } | ||
| +} | ||
| + |
| @@ -0,0 +1,37 @@ | ||
| +table.table-center td, | ||
| +table.table-center th, text-center { | ||
| + text-align:center; | ||
| +} | ||
| + | ||
| +.clear-both { | ||
| + clear: both; | ||
| +} | ||
| + | ||
| +td { | ||
| + text-align:center; | ||
| +} | ||
| +th { | ||
| + text-align:center; | ||
| +} | ||
| + | ||
| +td.redcell{ | ||
| + border: 1px solid #ff4444; | ||
| + padding: 2px; | ||
| + color: #000; | ||
| +} | ||
| + | ||
| +td.bluecell { | ||
| + border: 1px solid #4444ff; | ||
| + padding: 2px; | ||
| + color: #000; | ||
| +} | ||
| + | ||
| +tr td.redscorecell { | ||
| + color: #fff; | ||
| + background: #cc2222; | ||
| +} | ||
| + | ||
| +tr td.bluescorecell { | ||
| + color: #fff; | ||
| + background: #2222cc; | ||
| +} |
| @@ -0,0 +1,31 @@ | ||
| +.landing { | ||
| + text-align: center; | ||
| + p { | ||
| + margin: 20px 0; | ||
| + } | ||
| + div { | ||
| + padding: none; | ||
| + display: inline-block; | ||
| + marign-left: auto; | ||
| + margin-right: auto; | ||
| + .btn { | ||
| + margin: 0 10px; | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| +.landing-logo { | ||
| + display: block; | ||
| + margin-right: auto; | ||
| + margin-left: auto; | ||
| +} | ||
| + | ||
| +.landing-logo-phone { | ||
| + margin-bottom: 40px; | ||
| +} | ||
| + | ||
| +@media (max-width: 480px) { | ||
| + .landing-hero-unit { | ||
| + padding: 30px; | ||
| + } | ||
| +} |
| @@ -0,0 +1,84 @@ | ||
| +th.videoIcon{ | ||
| + background-image: url('/images/icons/video.png'); | ||
| + background-repeat: no-repeat; | ||
| + background-position: center center; | ||
| + min-width: 12px; | ||
| +} | ||
| + | ||
| +table.matchTable, table.oprTable { | ||
| + border-bottom: 1px solid #cccccc; | ||
| + padding: 3px 0; | ||
| + margin: 0 0 1em 0; | ||
| + width: 100%; | ||
| + margin-left:auto; | ||
| + | ||
| + @media (min-width: 768px) { | ||
| + tbody tr:hover td, | ||
| + tbody tr:hover th { | ||
| + background-color: @tableBackgroundHover; | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| +table.matchTable tr, table.oprTable tr { | ||
| + border-top: 1px solid #cccccc; | ||
| + border-left: 1px solid #cccccc; | ||
| + padding: 3px 0; | ||
| +} | ||
| + | ||
| +table.matchTable tr.key, table.oprTable tr.key { | ||
| + background-color: #f0f0f0; | ||
| +} | ||
| + | ||
| +table.matchTable th, table.oprTable th { | ||
| + border-right: 1px solid #cccccc; | ||
| + font-weight: bold; | ||
| + text-align: center; | ||
| + vertical-align: middle; | ||
| + padding: 3px; | ||
| +} | ||
| + | ||
| +table.matchTable td, table.oprTable td { | ||
| + border-right: 1px solid #cccccc; | ||
| + text-align: center; | ||
| + vertical-align: middle; | ||
| + padding: 3px; | ||
| +} | ||
| + | ||
| +table.matchTable td.red { | ||
| + background-color: #ffeeee; | ||
| +} | ||
| + | ||
| +table.matchTable td.blue { | ||
| + background-color: #eeeeff; | ||
| +} | ||
| + | ||
| +table.matchTable td.redScore { | ||
| + background-color: #ffdddd; | ||
| +} | ||
| + | ||
| +table.matchTable td.blueScore { | ||
| + background-color: #ddddff; | ||
| +} | ||
| + | ||
| +table.matchTable td.winner { | ||
| + font-weight: bold; | ||
| +} | ||
| + | ||
| +table.matchTable td.icon, table.matchTable th.icon { | ||
| + margin: 0; | ||
| + padding: 3px 0 0 0; | ||
| + font-size: .5em; | ||
| +} | ||
| + | ||
| +table.matchTable td.win{ | ||
| + background-color: #90ee90; | ||
| +} | ||
| + | ||
| +table.matchTable td.lose{ | ||
| + background-color: #f08080; | ||
| +} | ||
| + | ||
| +table.matchTable td.tie{ | ||
| + background-color: #d3d3d3; | ||
| +} |
| @@ -0,0 +1,2 @@ | ||
| +.event-link{margin-left:10px}.no-robot-image{max-width:300px;margin:15px auto}.team-nick{text-overflow:ellipsis;overflow:hidden} | ||
| +/* This beautiful CSS-File has been crafted with LESS (lesscss.org) and compiled by simpLESS (wearekiss.com/simpless) */ |
| @@ -0,0 +1,13 @@ | ||
| +.event-link { | ||
| + margin-left: 10px; | ||
| +} | ||
| + | ||
| +.no-robot-image { | ||
| + max-width: 300px; | ||
| + margin: 15px auto; | ||
| +} | ||
| + | ||
| +.team-nick { | ||
| + text-overflow: ellipsis; | ||
| + overflow: hidden; | ||
| +} |
| @@ -0,0 +1,2 @@ | ||
| +.team-table{table-layout:fixed}.team-table td{text-overflow:ellipsis;overflow:hidden} | ||
| +/* This beautiful CSS-File has been crafted with LESS (lesscss.org) and compiled by simpLESS (wearekiss.com/simpless) */ |
| @@ -0,0 +1,8 @@ | ||
| +.team-table { | ||
| + table-layout: fixed; | ||
| + | ||
| + td { | ||
| + text-overflow: ellipsis; | ||
| + overflow: hidden; | ||
| + } | ||
| +} |
| @@ -0,0 +1,47 @@ | ||
| +// THUMBNAILS | ||
| +// ---------- | ||
| +// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files | ||
| + | ||
| +// Make wrapper ul behave like the grid | ||
| +.thumbnails { | ||
| + margin-left: -@gridGutterWidth; | ||
| + list-style: none; | ||
| + .clearfix(); | ||
| +} | ||
| +// Fluid rows have no left margin | ||
| +.row-fluid .thumbnails { | ||
| + margin-left: 0; | ||
| +} | ||
| + | ||
| +// Float li to make thumbnails appear in a row | ||
| +.thumbnails > li { | ||
| + float: left; // Explicity set the float since we don't require .span* classes | ||
| + margin-bottom: @baseLineHeight; | ||
| + margin-left: @gridGutterWidth; | ||
| +} | ||
| + | ||
| +// The actual thumbnail (can be `a` or `div`) | ||
| +.thumbnail { | ||
| + display: block; | ||
| + padding: 4px; | ||
| + line-height: 1; | ||
| + border: 1px solid #ddd; | ||
| + .border-radius(4px); | ||
| + .box-shadow(0 1px 1px rgba(0,0,0,.075)); | ||
| +} | ||
| +// Add a hover state for linked versions only | ||
| +a.thumbnail:hover { | ||
| + border-color: @linkColor; | ||
| + .box-shadow(0 1px 4px rgba(0,105,214,.25)); | ||
| +} | ||
| + | ||
| +// Images and captions | ||
| +.thumbnail > img { | ||
| + display: block; | ||
| + max-width: 100%; | ||
| + margin-left: auto; | ||
| + margin-right: auto; | ||
| +} | ||
| +.thumbnail .caption { | ||
| + padding: 9px; | ||
| +} |
| @@ -0,0 +1,35 @@ | ||
| +// TOOLTIP | ||
| +// ------= | ||
| + | ||
| +.tooltip { | ||
| + position: absolute; | ||
| + z-index: @zindexTooltip; | ||
| + display: block; | ||
| + visibility: visible; | ||
| + padding: 5px; | ||
| + font-size: 11px; | ||
| + .opacity(0); | ||
| + &.in { .opacity(80); } | ||
| + &.top { margin-top: -2px; } | ||
| + &.right { margin-left: 2px; } | ||
| + &.bottom { margin-top: 2px; } | ||
| + &.left { margin-left: -2px; } | ||
| + &.top .tooltip-arrow { #popoverArrow > .top(); } | ||
| + &.left .tooltip-arrow { #popoverArrow > .left(); } | ||
| + &.bottom .tooltip-arrow { #popoverArrow > .bottom(); } | ||
| + &.right .tooltip-arrow { #popoverArrow > .right(); } | ||
| +} | ||
| +.tooltip-inner { | ||
| + max-width: 200px; | ||
| + padding: 3px 8px; | ||
| + color: @white; | ||
| + text-align: center; | ||
| + text-decoration: none; | ||
| + background-color: @black; | ||
| + .border-radius(4px); | ||
| +} | ||
| +.tooltip-arrow { | ||
| + position: absolute; | ||
| + width: 0; | ||
| + height: 0; | ||
| +} |
| @@ -0,0 +1,232 @@ | ||
| +// Typography.less | ||
| +// Headings, body text, lists, code, and more for a versatile and durable typography system | ||
| +// ---------------------------------------------------------------------------------------- | ||
| + | ||
| + | ||
| +// BODY TEXT | ||
| +// --------- | ||
| + | ||
| +p { | ||
| + margin: 0 0 @baseLineHeight / 2; | ||
| + small { | ||
| + font-size: @baseFontSize - 2; | ||
| + color: @grayLight; | ||
| + } | ||
| +} | ||
| +.lead { | ||
| + margin-bottom: @baseLineHeight; | ||
| + font-size: 20px; | ||
| + font-weight: 200; | ||
| + line-height: @baseLineHeight * 1.5; | ||
| +} | ||
| + | ||
| +// HEADINGS | ||
| +// -------- | ||
| + | ||
| +h1, h2, h3, h4, h5, h6 { | ||
| + margin: 0; | ||
| + font-family: @headingsFontFamily; | ||
| + font-weight: @headingsFontWeight; | ||
| + color: @headingsColor; | ||
| + text-rendering: optimizelegibility; // Fix the character spacing for headings | ||
| + small { | ||
| + font-weight: normal; | ||
| + color: @grayLight; | ||
| + } | ||
| +} | ||
| +h1 { | ||
| + font-size: 30px; | ||
| + line-height: @baseLineHeight * 2; | ||
| + small { | ||
| + font-size: 18px; | ||
| + } | ||
| +} | ||
| +h2 { | ||
| + font-size: 24px; | ||
| + line-height: @baseLineHeight * 2; | ||
| + small { | ||
| + font-size: 18px; | ||
| + } | ||
| +} | ||
| +h3 { | ||
| + font-size: 18px; | ||
| + line-height: @baseLineHeight * 1.5; | ||
| + small { | ||
| + font-size: 14px; | ||
| + } | ||
| +} | ||
| +h4, h5, h6 { | ||
| + line-height: @baseLineHeight; | ||
| +} | ||
| +h4 { | ||
| + font-size: 14px; | ||
| + small { | ||
| + font-size: 12px; | ||
| + } | ||
| +} | ||
| +h5 { | ||
| + font-size: 12px; | ||
| +} | ||
| +h6 { | ||
| + font-size: 11px; | ||
| + color: @grayLight; | ||
| + text-transform: uppercase; | ||
| +} | ||
| + | ||
| +// Page header | ||
| +.page-header { | ||
| + padding-bottom: @baseLineHeight - 1; | ||
| + margin: @baseLineHeight 0; | ||
| + border-bottom: 1px solid @grayLighter; | ||
| +} | ||
| +.page-header h1 { | ||
| + line-height: 1; | ||
| +} | ||
| + | ||
| + | ||
| + | ||
| +// LISTS | ||
| +// ----- | ||
| + | ||
| +// Unordered and Ordered lists | ||
| +ul, ol { | ||
| + padding: 0; | ||
| + margin: 0 0 @baseLineHeight / 2 25px; | ||
| +} | ||
| +ul ul, | ||
| +ul ol, | ||
| +ol ol, | ||
| +ol ul { | ||
| + margin-bottom: 0; | ||
| +} | ||
| +ul { | ||
| + list-style: disc; | ||
| +} | ||
| +ol { | ||
| + list-style: decimal; | ||
| +} | ||
| +li { | ||
| + line-height: @baseLineHeight; | ||
| +} | ||
| +ul.unstyled, | ||
| +ol.unstyled { | ||
| + margin-left: 0; | ||
| + list-style: none; | ||
| +} | ||
| + | ||
| +// Description Lists | ||
| +dl { | ||
| + margin-bottom: @baseLineHeight; | ||
| +} | ||
| +dt, | ||
| +dd { | ||
| + line-height: @baseLineHeight; | ||
| +} | ||
| +dt { | ||
| + font-weight: bold; | ||
| + line-height: @baseLineHeight - 1; // fix jank Helvetica Neue font bug | ||
| +} | ||
| +dd { | ||
| + margin-left: @baseLineHeight / 2; | ||
| +} | ||
| +// Horizontal layout (like forms) | ||
| +.dl-horizontal { | ||
| + dt { | ||
| + float: left; | ||
| + width: 120px; | ||
| + clear: left; | ||
| + text-align: right; | ||
| + .text-overflow(); | ||
| + } | ||
| + dd { | ||
| + margin-left: 130px; | ||
| + } | ||
| +} | ||
| + | ||
| +// MISC | ||
| +// ---- | ||
| + | ||
| +// Horizontal rules | ||
| +hr { | ||
| + margin: @baseLineHeight 0; | ||
| + border: 0; | ||
| + border-top: 1px solid @hrBorder; | ||
| + border-bottom: 1px solid @white; | ||
| +} | ||
| + | ||
| +// Emphasis | ||
| +strong { | ||
| + font-weight: bold; | ||
| +} | ||
| +em { | ||
| + font-style: italic; | ||
| +} | ||
| +.muted { | ||
| + color: @grayLight; | ||
| +} | ||
| + | ||
| +// Abbreviations and acronyms | ||
| +abbr[title] { | ||
| + cursor: help; | ||
| + border-bottom: 1px dotted @grayLight; | ||
| +} | ||
| +abbr.initialism { | ||
| + font-size: 90%; | ||
| + text-transform: uppercase; | ||
| +} | ||
| + | ||
| +// Blockquotes | ||
| +blockquote { | ||
| + padding: 0 0 0 15px; | ||
| + margin: 0 0 @baseLineHeight; | ||
| + border-left: 5px solid @grayLighter; | ||
| + p { | ||
| + margin-bottom: 0; | ||
| + #font > .shorthand(16px,300,@baseLineHeight * 1.25); | ||
| + } | ||
| + small { | ||
| + display: block; | ||
| + line-height: @baseLineHeight; | ||
| + color: @grayLight; | ||
| + &:before { | ||
| + content: '\2014 \00A0'; | ||
| + } | ||
| + } | ||
| + | ||
| + // Float right with text-align: right | ||
| + &.pull-right { | ||
| + float: right; | ||
| + padding-right: 15px; | ||
| + padding-left: 0; | ||
| + border-right: 5px solid @grayLighter; | ||
| + border-left: 0; | ||
| + p, | ||
| + small { | ||
| + text-align: right; | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| +// Quotes | ||
| +q:before, | ||
| +q:after, | ||
| +blockquote:before, | ||
| +blockquote:after { | ||
| + content: ""; | ||
| +} | ||
| + | ||
| +// Addresses | ||
| +address { | ||
| + display: block; | ||
| + margin-bottom: @baseLineHeight; | ||
| + font-style: normal; | ||
| + line-height: @baseLineHeight; | ||
| +} | ||
| + | ||
| +// Misc | ||
| +small { | ||
| + font-size: 100%; | ||
| +} | ||
| +cite { | ||
| + font-style: normal; | ||
| +} |
| @@ -0,0 +1,23 @@ | ||
| +// UTILITY CLASSES | ||
| +// --------------- | ||
| + | ||
| +// Quick floats | ||
| +.pull-right { | ||
| + float: right; | ||
| +} | ||
| +.pull-left { | ||
| + float: left; | ||
| +} | ||
| + | ||
| +// Toggling content | ||
| +.hide { | ||
| + display: none; | ||
| +} | ||
| +.show { | ||
| + display: block; | ||
| +} | ||
| + | ||
| +// Visibility | ||
| +.invisible { | ||
| + visibility: hidden; | ||
| +} |
| @@ -0,0 +1,212 @@ | ||
| +// Variables.less | ||
| +// Variables to customize the look and feel of Bootstrap | ||
| +// ----------------------------------------------------- | ||
| + | ||
| + | ||
| + | ||
| +// GLOBAL VALUES | ||
| +// -------------------------------------------------- | ||
| + | ||
| + | ||
| +// Grays | ||
| +// ------------------------- | ||
| +@black: #000; | ||
| +@grayDarker: #222; | ||
| +@grayDark: #333; | ||
| +@gray: #555; | ||
| +@grayLight: #999; | ||
| +@grayLighter: #eee; | ||
| +@white: #fff; | ||
| + | ||
| +// TBA Blues | ||
| +// ------------------------- | ||
| +@TBAblueDarker: #000044; | ||
| +@TBAblueDark: #000088; | ||
| +@TBAblueLight: #223366; | ||
| + | ||
| + | ||
| +// Accent colors | ||
| +// ------------------------- | ||
| +@blue: #049cdb; | ||
| +@blueDark: #0064cd; | ||
| +@green: #46a546; | ||
| +@red: #9d261d; | ||
| +@yellow: #ffc40d; | ||
| +@orange: #f89406; | ||
| +@pink: #c3325f; | ||
| +@purple: #7a43b6; | ||
| + | ||
| + | ||
| +// Scaffolding | ||
| +// ------------------------- | ||
| +@bodyBackground: @white; | ||
| +@textColor: @grayDark; | ||
| +@bodyPadding: 60px; | ||
| + | ||
| +// Links | ||
| +// ------------------------- | ||
| +@linkColor: #08c; | ||
| +@linkColorHover: darken(@linkColor, 15%); | ||
| + | ||
| + | ||
| +// Typography | ||
| +// ------------------------- | ||
| +@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; | ||
| +@serifFontFamily: Georgia, "Times New Roman", Times, serif; | ||
| +@monoFontFamily: Menlo, Monaco, Consolas, "Courier New", monospace; | ||
| + | ||
| +@baseFontSize: 13px; | ||
| +@baseFontFamily: @sansFontFamily; | ||
| +@baseLineHeight: 18px; | ||
| +@altFontFamily: @serifFontFamily; | ||
| + | ||
| +@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily | ||
| +@headingsFontWeight: bold; // instead of browser default, bold | ||
| +@headingsColor: inherit; // empty to use BS default, @textColor | ||
| + | ||
| + | ||
| +// Tables | ||
| +// ------------------------- | ||
| +@tableBackground: transparent; // overall background-color | ||
| +@tableBackgroundAccent: #f9f9f9; // for striping | ||
| +@tableBackgroundHover: #f5f5f5; // for hover | ||
| +@tableBorder: #ddd; // table and cell border | ||
| + | ||
| + | ||
| +// Buttons | ||
| +// ------------------------- | ||
| +@btnBackground: @white; | ||
| +@btnBackgroundHighlight: darken(@white, 10%); | ||
| +@btnBorder: #ccc; | ||
| + | ||
| +@btnPrimaryBackground: @linkColor; | ||
| +@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 15%); | ||
| + | ||
| +@btnInfoBackground: #5bc0de; | ||
| +@btnInfoBackgroundHighlight: #2f96b4; | ||
| + | ||
| +@btnSuccessBackground: #62c462; | ||
| +@btnSuccessBackgroundHighlight: #51a351; | ||
| + | ||
| +@btnWarningBackground: lighten(@orange, 15%); | ||
| +@btnWarningBackgroundHighlight: @orange; | ||
| + | ||
| +@btnDangerBackground: #ee5f5b; | ||
| +@btnDangerBackgroundHighlight: #bd362f; | ||
| + | ||
| +@btnInverseBackground: @gray; | ||
| +@btnInverseBackgroundHighlight: @grayDarker; | ||
| + | ||
| + | ||
| +// Forms | ||
| +// ------------------------- | ||
| +@inputBackground: @white; | ||
| +@inputBorder: #ccc; | ||
| +@inputBorderRadius: 3px; | ||
| +@inputDisabledBackground: @grayLighter; | ||
| +@formActionsBackground: #f5f5f5; | ||
| + | ||
| +// Dropdowns | ||
| +// ------------------------- | ||
| +@dropdownBackground: @white; | ||
| +@dropdownBorder: rgba(0,0,0,.2); | ||
| +@dropdownLinkColor: @grayDark; | ||
| +@dropdownLinkColorHover: @white; | ||
| +@dropdownLinkBackgroundHover: @linkColor; | ||
| +@dropdownDividerTop: #e5e5e5; | ||
| +@dropdownDividerBottom: @white; | ||
| + | ||
| + | ||
| + | ||
| +// COMPONENT VARIABLES | ||
| +// -------------------------------------------------- | ||
| + | ||
| +// Z-index master list | ||
| +// ------------------------- | ||
| +// Used for a bird's eye view of components dependent on the z-axis | ||
| +// Try to avoid customizing these :) | ||
| +@zindexDropdown: 1000; | ||
| +@zindexPopover: 1010; | ||
| +@zindexTooltip: 1020; | ||
| +@zindexFixedNavbar: 1030; | ||
| +@zindexModalBackdrop: 1040; | ||
| +@zindexModal: 1050; | ||
| + | ||
| + | ||
| +// Sprite icons path | ||
| +// ------------------------- | ||
| +@iconSpritePath: "/images/icons/glyphicons-halflings.png"; | ||
| +@iconWhiteSpritePath: "/images/icons/glyphicons-halflings-white.png"; | ||
| + | ||
| + | ||
| +// Input placeholder text color | ||
| +// ------------------------- | ||
| +@placeholderText: @grayLight; | ||
| + | ||
| + | ||
| +// Hr border color | ||
| +// ------------------------- | ||
| +@hrBorder: @grayLighter; | ||
| + | ||
| + | ||
| +// Navbar | ||
| +// ------------------------- | ||
| +@navbarHeight: 40px; | ||
| +@navbarBackground: @TBAblueLight; | ||
| +@navbarBackgroundHighlight: @TBAblueDark; | ||
| + | ||
| +@navbarText: @grayLight; | ||
| +@navbarLinkColor: @white; | ||
| +@navbarLinkColorHover: @grayLight; | ||
| +@navbarLinkColorActive: @white; | ||
| +@navbarLinkBackgroundHover: transparent; | ||
| +@navbarLinkBackgroundActive: @TBAblueDarker; | ||
| + | ||
| +@navbarSearchBackground: @grayLighter; | ||
| +@navbarSearchBackgroundFocus: @white; | ||
| +@navbarSearchBorder: @grayDarker; | ||
| +@navbarSearchPlaceholderColor: @grayDark; | ||
| +@navbarBrandColor: @navbarLinkColor; | ||
| + | ||
| + | ||
| +// Hero unit | ||
| +// ------------------------- | ||
| +@heroUnitBackground: @grayLighter; | ||
| +@heroUnitHeadingColor: inherit; | ||
| +@heroUnitLeadColor: inherit; | ||
| + | ||
| + | ||
| +// Form states and alerts | ||
| +// ------------------------- | ||
| +@warningText: #c09853; | ||
| +@warningBackground: #fcf8e3; | ||
| +@warningBorder: darken(spin(@warningBackground, -10), 3%); | ||
| + | ||
| +@errorText: #b94a48; | ||
| +@errorBackground: #f2dede; | ||
| +@errorBorder: darken(spin(@errorBackground, -10), 3%); | ||
| + | ||
| +@successText: #468847; | ||
| +@successBackground: #dff0d8; | ||
| +@successBorder: darken(spin(@successBackground, -10), 5%); | ||
| + | ||
| +@infoText: #3a87ad; | ||
| +@infoBackground: #d9edf7; | ||
| +@infoBorder: darken(spin(@infoBackground, -10), 7%); | ||
| + | ||
| + | ||
| + | ||
| +// GRID | ||
| +// -------------------------------------------------- | ||
| + | ||
| +// Default 940px grid | ||
| +// ------------------------- | ||
| +@gridColumns: 12; | ||
| +@gridColumnWidth: 60px; | ||
| +@gridGutterWidth: 20px; | ||
| +@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); | ||
| + | ||
| +// Fluid grid | ||
| +// ------------------------- | ||
| +@fluidGridColumnWidth: 6.382978723%; | ||
| +@fluidGridGutterWidth: 2.127659574%; |
| @@ -0,0 +1,27 @@ | ||
| +// WELLS | ||
| +// ----- | ||
| + | ||
| +.well { | ||
| + min-height: 20px; | ||
| + padding: 19px; | ||
| + margin-bottom: 20px; | ||
| + background-color: #f5f5f5; | ||
| + border: 1px solid #eee; | ||
| + border: 1px solid rgba(0,0,0,.05); | ||
| + .border-radius(4px); | ||
| + .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); | ||
| + blockquote { | ||
| + border-color: #ddd; | ||
| + border-color: rgba(0,0,0,.15); | ||
| + } | ||
| +} | ||
| + | ||
| +// Sizes | ||
| +.well-large { | ||
| + padding: 24px; | ||
| + .border-radius(6px); | ||
| +} | ||
| +.well-small { | ||
| + padding: 9px; | ||
| + .border-radius(3px); | ||
| +} |
| @@ -1,2 +0,0 @@ | ||
| -# I exist to fix Django 1.2 templating as described here: | ||
| -# http://code.google.com/appengine/forum/python-forum.html?place=msg/google-appengine-python/YaqfeygoiaI/WjRY2xTJEIEJ |
| @@ -1,7 +0,0 @@ | ||
| -<div class="contentBlock"> | ||
| - <img src="/images/logo_square_200.png" width="200" class="profileImg" /> | ||
| - <ul class="leftNav"> | ||
| - <li class="event"><a href="/events">Events</a></li> | ||
| - <li class="robot"><a href="/teams">Teams</a></li> | ||
| - </ul> | ||
| -</div> |
| @@ -1,8 +0,0 @@ | ||
| -<div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Brought to you by..</h2> | ||
| - </div> | ||
| - <p><a href="http://www.appspot.com" title="Powered by Google App Engine"><img src="http://code.google.com/appengine/images/appengine-noborder-120x30.gif" alt="Powered by Google App Engine" width="120" height="30" /></a></p> | ||
| - <p>Dotblock <a href="http://www.dotblock.com" title="Dotblock VPS Hosting">VPS Hosting</a></p> | ||
| - <p><a href="/thanks" title="Thanks">and others...</a></p> | ||
| -</div> |
| @@ -0,0 +1,39 @@ | ||
| +{% extends "base.html" %} | ||
| + | ||
| +{% block title %}The Blue Alliance - Contact{% endblock %} | ||
| + | ||
| +{% block meta_description %}How to get in touch with The Blue Alliance.{% endblock %} | ||
| + | ||
| +{% block content %} | ||
| +<div class="container"> | ||
| + <h1 class="end_header">Contact Us</h1> | ||
| + <div class="row"> | ||
| + <div class="span8 offset2"> | ||
| + <div> | ||
| + <div> | ||
| + <h2>Team Name Wrong?</h2> | ||
| + </div> | ||
| + <p>If your team's name or other information is incorrect on The Blue Alliance, please check if it is correct <a href="http://www.usfirst.org/whatsgoingon.aspx">on <em>FIRST</em>'s website</a>. We update our records from <a href="https://my.usfirst.org/frc/tims/site.lasso\"><em>FIRST</em>'s TIMS system</a> twice per month, and are unable to change your team name to anything other than what is listed there.</p> | ||
| + </div> | ||
| + <div> | ||
| + <div> | ||
| + <h2>API Access</h2> | ||
| + </div> | ||
| + <p>The new "dotcom" website brings a new API that doesn't require an API key to use. We're not quite ready to launch it, but please contact us if you are interested in using it.</p> | ||
| + </div> | ||
| + <div> | ||
| + <div> | ||
| + <h2>Problem with the site?</h2> | ||
| + </div> | ||
| + <p>Does the site not look quite right in your browser? <a href="https://spreadsheets.google.com/viewform?formkey=dGJFZWRPVV9OX2p0cXVqbWVQSW5UUlE6MQ">Please let us know!</a></p> | ||
| + </div> | ||
| + <div> | ||
| + <div> | ||
| + <h2>By email</h2> | ||
| + </div> | ||
| + <p>We can be reached by email at <a href="mailto:contact@thebluealliance.com">contact@thebluealliance.com</a>.</p> | ||
| + </div> | ||
| + </div> | ||
| + </div> | ||
| +</div> | ||
| +{% endblock %} |
| @@ -0,0 +1,67 @@ | ||
| +{% extends "base.html" %} | ||
| + | ||
| +{% block title %}The Blue Alliance - Debug Help{% endblock %} | ||
| + | ||
| +{% block content %} | ||
| +<div class="container"> | ||
| + <h1 class="end_header">The Blue Alliance <span class="annotation">Debug and Setup</span></h1> | ||
| + <div class="row"> | ||
| + <div class="span8 offset2"> | ||
| + <div> | ||
| + <div> | ||
| + <h2>The Blue Alliance Developer Page</h2> | ||
| + </div> | ||
| + <p>Hello developer! Welcome to the debug page for The Blue Alliance. This page is full of useful pointers to help you locally develop TBA. It is different from <a href="/admin/">the admin console</a>, which is designed to help fix data in production.</p> | ||
| + <p>To get started, you have to set up some initial test data for your local copy of TBA. We use <a href="http://paver.github.com/paver/">paver</a> scripts in pavement.py to set up this test data in your dev environment. <a href="http://packages.python.org/distribute/easy_install.html">easy_install</a> paver if you don't have it.</p> | ||
| + <p>Run these on the command line in the folder you have the-blue-alliance project in:</p> | ||
| + <ol> | ||
| + <li><a href="/tasks/usfirst_teams_fast_get">/tasks/usfirst_teams_fast_get</a> : Sets up all 2012 teams, fast.</li> | ||
| + <li>$ paver dev_data_setup</li> | ||
| + <li><a href="/tasks/eventteam_update_enqueue">/tasks/eventteam_update_enqueue</a> : Build event attendance information.</li> | ||
| + <li><a href="/tasks/tba_videos_get/2010cmp">/tasks/tba_videos_get/2010cmp</a> : Grab videos for 2010cmp</li> | ||
| + </ol> | ||
| + <p>This test data gives you the <a href="/event/2010cmp">2010 Championship Einstein Field</a> as your main test data.</p> | ||
| + </div> | ||
| + <div> | ||
| + <div> | ||
| + <h2>Prod Setup</h2> | ||
| + </div> | ||
| + <p>If you're setting up a full copy of The Blue Alliance, these will help you create all the data you need. | ||
| + <ol> | ||
| + <li><a href="/tasks/usfirst_events_instantiate?year=2012">UsfirstEventsInstantiate</a>, enqueues Tasks to create Event objects for regional events from USFIRST.</li> | ||
| + <li>Instantiate 2012 Teams: <a href="/tasks/usfirst_teams_instantiate?year=2012&skip=0">UsfirstTeamsInstantiate @0</a> <a href="/tasks/usfirst_teams_instantiate?year=2012&skip=1000">@1000</a> <a href="/tasks/usfirst_teams_instantiate?year=2012&skip=2000">@2000</a> <a href="/tasks/usfirst_teams_instantiate?year=2012&skip=3000">@3000</a></li> | ||
| + <li>Instantiate 2011 Teams: <a href="/tasks/usfirst_teams_instantiate?year=2011&skip=0">UsfirstTeamsInstantiate @0</a> <a href="/tasks/usfirst_teams_instantiate?year=2011&skip=1000">@1000</a> <a href="/tasks/usfirst_teams_instantiate?year=2011&skip=2000">@2000</a></li> | ||
| + <li>Instantiate 2010 Teams: <a href="/tasks/usfirst_teams_instantiate?year=2010&skip=0">UsfirstTeamsInstantiate @0</a> <a href="/tasks/usfirst_teams_instantiate?year=2010&skip=1000">@1000</a> <a href="/tasks/usfirst_teams_instantiate?year=2010&skip=2000">@2000</a></li> | ||
| + <li>Instantiate 2009 Teams: <a href="/tasks/usfirst_teams_instantiate?year=2009&skip=0">UsfirstTeamsInstantiate @0</a> <a href="/tasks/usfirst_teams_instantiate?year=2009&skip=1000">@1000</a> <a href="/tasks/usfirst_teams_instantiate?year=2009&skip=2000">@2000</a></li> | ||
| + <li>Bulkload Old Events:<br />appcfg.py upload_data --config_file=bulkloader.yaml --filename=test_data/events.csv --kind=Event --url=http://tbatv-prod.appspot.com/_ah/remote_api</li> | ||
| + <li>Bulkload Old Matches: <br />appcfg.py upload_data --config_file=bulkloader.yaml --filename=test_data/matches.csv --kind=Match --url=http://tbatv-prod.appspot.com/_ah/remote_api</li> | ||
| + <li><a href="/tasks/eventteam_update_enqueue">Update EventTeams</a>, to build all the event attendance information.</li> | ||
| + </ol> | ||
| + </div> | ||
| + | ||
| + <div> | ||
| + <div> | ||
| + <h2>Updates</h2> | ||
| + </div> | ||
| + <ol> | ||
| + <li><a href="/tasks/usfirst_event_get_enqueue">UsfirstEventGetEnqueue</a>, enqueue tasks to update official Events.</li> | ||
| + <li><a href="/tasks/usfirst_matches_get_enqueue?year=2012">UsfirstMatchesGetEnqueue</a>, enqueue tasks to update match results for 2012 Events</li> | ||
| + <li><a href="/tasks/usfirst_team_get_enqueue?offset=0">UsfirstTeamGetEnqueue @ 0</a>, <a href="/tasks/usfirst_team_get_enqueue?offset=1000">@ 1000</a>, <a href="/tasks/usfirst_team_get_enqueue?offset=2000">@ 2000</a>, <a href="/tasks/usfirst_team_get_enqueue?offset=3000">@ 3000</a>, enqueue tasks to update Team details</li> | ||
| + <li><a href="/tasks/tba_videos_get/2010cmp">TBAVideosGet</a> with an Event key to scrape <a href="http://videos.thebluealliance.net">http://videos.thebluealliance.net</a> for TBAVideos.</li> | ||
| + <li><a href="/tasks/eventteam_update_enqueue">Update EventTeams</a>, to build all the event attendance information.</li> | ||
| + <li><a href="/tasks/event_opr_get_enqueue?year=2012">Update OPRs</a> or <a href="/tasks/event_opr_get/2010cmp">Update One Event's OPRs</a>, to recalculate OPRs.</li> | ||
| + </ol> | ||
| + </div> | ||
| + | ||
| + <div> | ||
| + <div> | ||
| + <h2>Useful Other Commands</h2> | ||
| + </div> | ||
| + <ul> | ||
| + <li>appcfg.py upload_data --config_file=bulkloader.yaml --filename=<em>something</em>.csv --kind=<em>Something</em> --url=http://<em>something</em>/_ah/remote_api</li> | ||
| + </ul> | ||
| + </div> | ||
| + </div> | ||
| + </div> | ||
| +</div> | ||
| +{% endblock %} |
| @@ -0,0 +1,163 @@ | ||
| +{% extends "base.html" %} | ||
| + | ||
| +{% block title %}{{event.name}} ({{event.year}}) - The Blue Alliance{% endblock %} | ||
| + | ||
| +{% block meta_description %}Match results and for the {{event.year}} {{event.name}} FIRST Robotics Competition in {{event.location}}.{% endblock %} | ||
| + | ||
| +{% block more_head_tags %} | ||
| + <meta property="og:title" content="{{event.year}} {{event.name}}" /> | ||
| + <meta property="og:type" content="article" /> | ||
| + <meta property="og:url" content="http://thebluealliance.com/event/{{event.key.name}}" /> | ||
| + <meta property="og:image" content="http://www.thebluealliance.com/images/logo_square_200.png" /> | ||
| + <meta property="og:description" content="The {{event.year}} {{event.name}} FIRST Robotics Competition in {{event.location}}."/> | ||
| + <meta property="og:site_name" content="The Blue Alliance" /> | ||
| + <meta property="og:location" content="{{event.location}}" /> | ||
| + {% if event.start_date %}<meta property="og:start_time" content="{{event.start_date|date:"Y-m-d"}}" /> | ||
| + {% else %}<meta property="og:start_time" content="{{event.year}}" />{% endif %} | ||
| + {% if event.end_date %}<meta property="og:end_time" content="{{event.end_date|date:"Y-m-d"}}" />{% endif %} | ||
| + {% if event.venue %}<meta property="og:fn" content="{{event.venue}}" />{% endif %} | ||
| +{% endblock %} | ||
| + | ||
| +{% block content %} | ||
| + | ||
| +<div class="container"> | ||
| + <h1 class="end_header">{{event.name}} {{event.year}}</h1> | ||
| + <p><a href="/events/{{event.year}}"><i class="icon-chevron-left"></i> {{event.year}} Event List</a></p> | ||
| + | ||
| + <div class="row"> | ||
| + <div class="span6"> | ||
| + <table class="table table-striped table-condensed"> | ||
| + <tbody> | ||
| + <tr><th>Dates</th> | ||
| + {% if event.start_date %} | ||
| + <td>{{ event.start_date|date:"M d, Y" }} to {{ event.end_date|date:"M d, Y" }}</td> | ||
| + {% else %} | ||
| + <td>Unknown</td> | ||
| + {% endif %}</tr> | ||
| + {% if event.location %}<tr> | ||
| + <th>Location</th> | ||
| + <td><a href="http://maps.google.com/maps?q={{ event.location }}">{{ event.location }}</a></td> | ||
| + </tr>{% endif %} | ||
| + {% if event.website %}<tr> | ||
| + <th>Website</th> | ||
| + <td><a href="{{ event.website }}" title="{{ event.name }}">{{ event.website }}</a></td> | ||
| + </tr>{% endif %} | ||
| + {% if event.official %}<tr> | ||
| + <th>Details on <em>FIRST</em></th> | ||
| + <td><a href="https://my.usfirst.org/myarea/index.lasso?page=teamlist&event_type=FRC&sort_teams=number&year={{ event.year }}&event={{ event.event_short }}">{{ event.name }} on usfirst.org</a></td> | ||
| + </tr>{% endif %} | ||
| + {% if event.facebook_eid %}<tr> | ||
| + <th>Facebook</th> | ||
| + <td><a href="{{ event.getFacebookEventUrl }}" title="Facebook Event">RSVP</td> | ||
| + </tr>{% endif %} | ||
| + {% if event.webcast_url %}<tr> | ||
| + <th>Live Webcast</th> | ||
| + <td><a href="{{ event.webcast_url }}" title="">{{ event.webcast_url }}</td> | ||
| + </tr>{% endif %} | ||
| + {% if num_teams %}<tr> | ||
| + <th>Teams</th> | ||
| + <td>{{num_teams}} Team{{num_teams|pluralize}}</td> | ||
| + </tr>{% endif %} | ||
| + {% if matches.num %}<tr> | ||
| + <th>Matches</th> | ||
| + <td>{{matches.num}} Match{{matches.num|pluralize:"es"}} - (<a href="http://www.thebluealliance.com/event/{{ event.get_key_name }}/feed">rss</a>)</td> | ||
| + </tr>{% endif %} | ||
| + </tbody> | ||
| + </table> | ||
| + </div> | ||
| + <div class="span6"> | ||
| + <!-- <h2>Awards Overview:</h2> | ||
| + <p>Regional Chairman's Award:</p> | ||
| + <p>Engineering Inspiration Award:</p> | ||
| + <p>Rookie All-Star Award:</p> | ||
| + <p>Regional Winners:<p> | ||
| + <p>Regional Finalists:</p>--> | ||
| + </div> | ||
| + </div> | ||
| + | ||
| + <ul class="nav nav-tabs nav-stacked-phone"> | ||
| + <li class="active"><a href="#results" data-toggle="tab">Results</a></li> | ||
| + <li><a href="#teams" data-toggle="tab">Teams</a></li> | ||
| + <!-- <li><a href="#awards" data-toggle="tab">Awards</a></li>--> | ||
| + </ul> | ||
| + | ||
| + <div class="tab-content"> | ||
| + | ||
| + <div class="tab-pane active" id="results"> | ||
| + | ||
| + <div class="row"> | ||
| + <div class="span6"> | ||
| + <h3>Qualification Match Results</h3> | ||
| + {% include "match_partials/qual_match_table.html" %} | ||
| + </div> | ||
| + | ||
| + <div class="span6"> | ||
| + <h3>Elimination Match Results</h3> | ||
| + {% include "match_partials/elim_match_table.html" %} | ||
| + | ||
| + {% if oprs|length > 0 %} | ||
| + <h3>OPRs - Top 15 (<a href="/opr">?</a>)</h3> | ||
| + <table class="table table-condensed table-striped table-center"> | ||
| + <tr> | ||
| + <th>Team</th> | ||
| + <th>OPR</th> | ||
| + </tr> | ||
| + {% for opr,opr_team in oprs %} | ||
| + <tr> | ||
| + <td><a href="/team/{{ opr_team }}">{{ opr_team }}</a></td> | ||
| + <td>{{ opr|floatformat:2 }}</td> | ||
| + </tr> | ||
| + {% endfor %} | ||
| + </table> | ||
| + {% endif %} | ||
| + </div> | ||
| + </div> | ||
| + | ||
| + | ||
| + </div> | ||
| + <div class="tab-pane" id="teams"> | ||
| + <div class="row"> | ||
| + {% if teams_a %} | ||
| + <div class="span6"> | ||
| + <table class="table table-striped table-condensed table-center team-table"> | ||
| + <tbody> | ||
| + <tr><th>Team Number</th><th>Team Name</th><th>Location</th></tr> | ||
| + {% for team in teams_a %} | ||
| + <tr> | ||
| + <td><a class="team_table" href="/team/{{ team.team_number }}">{{ team.team_number }}</a></td> | ||
| + <td><a href="/team/{{ team.team_number }}">{% if team.nickname %}{{ team.nickname }}{% else %}--{% endif %}</a></td> | ||
| + <td>{% if team.address %}{{ team.address }}{% else %}--{% endif %}</td> | ||
| + </tr> | ||
| + {% endfor %} | ||
| + </tbody> | ||
| + </table> | ||
| + </div> | ||
| + {% else %} | ||
| + <p>No teams yet.</p> | ||
| + {% endif %} | ||
| + | ||
| + {% if teams_b %} | ||
| + <div class="span6"> | ||
| + <table class="table table-striped table-condensed table-center team-table"> | ||
| + <tbody> | ||
| + <tr><th>Team Number</th><th>Team Name</th><th>Location</th></tr> | ||
| + {% for team in teams_b %} | ||
| + <tr> | ||
| + <td><a class="team_table" href="/team/{{ team.team_number }}">{{ team.team_number }}</a></td> | ||
| + <td><a href="/team/{{ team.team_number }}">{% if team.nickname %}{{ team.nickname }}{% else %}--{% endif %}</a></td> | ||
| + <td>{% if team.address %}{{ team.address }}{% else %}--{% endif %}</td> | ||
| + </tr> | ||
| + {% endfor %} | ||
| + </tbody> | ||
| + </table> | ||
| + </div> | ||
| + {% endif %} | ||
| + </div> | ||
| + <div class="tab-pane" id="awards"><h2>Awards</h2> | ||
| + | ||
| + </div> | ||
| + </div> | ||
| + </div> | ||
| +</div> | ||
| +{% endblock %} | ||
| + |
| @@ -0,0 +1,84 @@ | ||
| +{% extends "base.html" %} | ||
| + | ||
| +{% block title %}Events - The Blue Alliance{% endblock %} | ||
| + | ||
| +{% block meta_description %}FIRST Robotics Competition events{% if explicit_year %} from {{year}}{% endif %}.{% endblock %} | ||
| + | ||
| +{% block events_active %}active{% endblock %} | ||
| + | ||
| +{% block content %} | ||
| +<div class="container"> | ||
| + <h1 class="end_header">Events in {{year}}</h1> | ||
| + <div class="row"> | ||
| + <div class="span2 year_list"> | ||
| + <h2>Year</h2> | ||
| + <div class="btn-group visible-phone"> | ||
| + <a class="btn btn-large dropdown-toggle" data-toggle="dropdown" href="#"> | ||
| + {{year}} | ||
| + <span class="caret"></span> | ||
| + </a> | ||
| + <ul class="dropdown-menu"> | ||
| + <li><a href="/events/2012">2012</a></li> | ||
| + <li><a href="/events/2011">2011</a></li> | ||
| + <li><a href="/events/2010">2010</a></li> | ||
| + <li><a href="/events/2009">2009</a></li> | ||
| + <li><a href="/events/2008">2008</a></li> | ||
| + <li><a href="/events/2007">2007</a></li> | ||
| + <li><a href="/events/2006">2006</a></li> | ||
| + <li><a href="/events/2005">2005</a></li> | ||
| + <li><a href="/events/2004">2004</a></li> | ||
| + <li><a href="/events/2003">2003</a></li> | ||
| + <li><a href="/events/2002">2002</a></li> | ||
| + </ul> | ||
| + </div> | ||
| + <ul class="nav nav-tabs nav-stacked hidden-phone"> | ||
| + <li {% if year == 2012 %}class="active"{% endif %}><a href="/events/2012">2012</a></li> | ||
| + <li {% if year == 2011 %}class="active"{% endif %}><a href="/events/2011">2011</a></li> | ||
| + <li {% if year == 2010 %}class="active"{% endif %}><a href="/events/2010">2010</a></li> | ||
| + <li {% if year == 2009 %}class="active"{% endif %}><a href="/events/2009">2009</a></li> | ||
| + <li {% if year == 2008 %}class="active"{% endif %}><a href="/events/2008">2008</a></li> | ||
| + <li {% if year == 2007 %}class="active"{% endif %}><a href="/events/2007">2007</a></li> | ||
| + <li {% if year == 2006 %}class="active"{% endif %}><a href="/events/2006">2006</a></li> | ||
| + <li {% if year == 2005 %}class="active"{% endif %}><a href="/events/2005">2005</a></li> | ||
| + <li {% if year == 2004 %}class="active"{% endif %}><a href="/events/2004">2004</a></li> | ||
| + <li {% if year == 2003 %}class="active"{% endif %}><a href="/events/2003">2003</a></li> | ||
| + <li {% if year == 2002 %}class="active"{% endif %}><a href="/events/2002">2002</a></li> | ||
| + </ul> | ||
| + </div> | ||
| + <div class="span10"> | ||
| + <h2>This Week's Events</h2> | ||
| + {% for event in upcoming_events %} | ||
| + <a href="/event/{{event.key.name}}"> | ||
| + <div class="event_block"> | ||
| + <div class="event_info"> | ||
| + <h3>{{ event.name }}</h3> | ||
| + <p><em> | ||
| + {% if event.start_date %}{{ event.start_date|date:"M d, Y" }}{% endif %} | ||
| + {% if event.end_date %}- {{ event.end_date|date:"M d, Y" }}{% endif %}</em> | ||
| + </p> | ||
| + </div> | ||
| + </div> | ||
| + </a> | ||
| + {% empty %} | ||
| + <div class="no_events"> | ||
| + <p>There are no upcoming events.</p> | ||
| + <p>If you have an offseason event, <a href="/contact">tell us about it</a>!</p> | ||
| + </div> | ||
| + {% endfor %} | ||
| + <h2>Full Event List ({{ events|length }} Events)</h2> | ||
| + {% for event in events %} | ||
| + <a href="/event/{{event.key.name}}"> | ||
| + <div class="event_block"> | ||
| + <div class="event_info"> | ||
| + <h3>{{ event.name }}</h3> | ||
| + <p><em>{% if event.start_date %}{{ event.start_date|date:"M d, Y" }}{% endif %} | ||
| + {% if event.end_date %}- {{ event.end_date|date:"M d, Y" }}{% endif %}</em> | ||
| + </p> | ||
| + </div> | ||
| + </div> | ||
| + </a> | ||
| + {% endfor %} | ||
| + </div> | ||
| + </div> | ||
| +</div> | ||
| +{% endblock %} |
| @@ -1,167 +0,0 @@ | ||
| -{% extends "base.html" %} | ||
| - | ||
| -{% block title %}{{event.name}} ({{event.year}}) - The Blue Alliance{% endblock %} | ||
| - | ||
| -{% block meta_description %}Match results and for the {{event.year}} {{event.name}} FIRST Robotics Competition in {{event.location}}.{% endblock %} | ||
| - | ||
| -{% block more_head_tags %} | ||
| - <meta property="og:title" content="{{event.year}} {{event.name}}" /> | ||
| - <meta property="og:type" content="article" /> | ||
| - <meta property="og:url" content="http://thebluealliance.com/event/{{event.key.name}}" /> | ||
| - <meta property="og:image" content="http://www.thebluealliance.com/images/logo_square_200.png" /> | ||
| - <meta property="og:description" content="The {{event.year}} {{event.name}} FIRST Robotics Competition in {{event.location}}."/> | ||
| - <meta property="og:site_name" content="The Blue Alliance" /> | ||
| - <meta property="og:location" content="{{event.location}}" /> | ||
| - {% if event.start_date %}<meta property="og:start_time" content="{{event.start_date|date:"Y-m-d"}}" /> | ||
| - {% else %}<meta property="og:start_time" content="{{event.year}}" />{% endif %} | ||
| - {% if event.end_date %}<meta property="og:end_time" content="{{event.end_date|date:"Y-m-d"}}" />{% endif %} | ||
| - {% if event.venue %}<meta property="og:fn" content="{{event.venue}}" />{% endif %} | ||
| -{% endblock %} | ||
| - | ||
| -{% block leftCol %} | ||
| - <ul class="leftNav"> | ||
| - <li class="info"><a href="#info">Information</a></li> | ||
| - <li class="match"><a href="#matches">Matches{% if matches.num %} ({{ matches.num }}){% endif %}</a></li> | ||
| - <li class="robot"><a href="#teams">Teams{% if teams %} ({{ teams|length }}){% endif %}</a></li> | ||
| - </ul> | ||
| - <div class="divider"></div> | ||
| -{% endblock %} | ||
| - | ||
| -{% block content %} | ||
| - | ||
| -<div id="contentTop"> | ||
| - <h1>{{ event.name }} <span class="annotation">{{ event.year }}</span></h1> | ||
| -</div> | ||
| -<div id="contentRight"> | ||
| - {% include "base_partials/right_col.html" %} | ||
| -</div> | ||
| - | ||
| -<div id="contentCenter"> | ||
| - <div id="info" class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Information</h2> | ||
| - </div> | ||
| - <table class="infoTable"> | ||
| - <tr> | ||
| - <th>Dates</th> | ||
| - {% if event.start_date %} | ||
| - <td>{{ event.start_date|date:"M d, Y" }} to {{ event.end_date|date:"M d, Y" }}</th> | ||
| - {% else %} | ||
| - <td>Unknown</td> | ||
| - {% endif %} | ||
| - </tr> | ||
| - {% if event.location %}<tr> | ||
| - <th>Location</th> | ||
| - <td><a href="http://maps.google.com/maps?q={{ event.location }}">{{ event.location }}</a></td> | ||
| - </tr>{% endif %} | ||
| - {% if event.website %}<tr> | ||
| - <th>Website</th> | ||
| - <td><a href="{{ event.website }}" title="{{ event.name }}">{{ event.website }}</a></td> | ||
| - </tr>{% endif %} | ||
| - {% if event.official %}<tr> | ||
| - <th>Details on FIRST</th> | ||
| - <td><a href="https://my.usfirst.org/myarea/index.lasso?page=teamlist&event_type=FRC&sort_teams=number&year={{ event.year }}&event={{ event.event_short }}">{{ event.name }} on usfirst.org</a></td> | ||
| - </tr>{% endif %} | ||
| - {% if event.facebook_eid %}<tr> | ||
| - <th>Facebook</th> | ||
| - <td><a href="{{ event.getFacebookEventUrl }}" title="Facebook Event">RSVP</td> | ||
| - </tr>{% endif %} | ||
| - {% if event.webcast_url %}<tr> | ||
| - <th>Live Webcast</th> | ||
| - <td><a href="{{ event.webcast_url }}" title=" ">{{ event.webcast_url }}</td> | ||
| - </tr>{% endif %} | ||
| - </table> | ||
| - </div> | ||
| - <div id="matches" class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>{% if matches.num %}{{matches.num}} {% endif %}Match{{matches.num|pluralize:"es"}} - (<a href="http://www.thebluealliance.com/event/{{ event.get_key_name }}/feed">rss</a>)</h2> | ||
| - </div> | ||
| - {% if matches.num %} | ||
| - <table class="matchTable"> | ||
| - <tr class="key"> | ||
| - <th class="icon"><img src="/images/icons/video.png" /></th> | ||
| - <th>Match Number</th> | ||
| - <th colspan="3">Red Alliance</th> | ||
| - <th colspan="3">Blue Alliance</th> | ||
| - <th colspan="2">Scores</th> | ||
| - </tr> | ||
| - | ||
| - {% if matches.qm %} | ||
| - <tr class="key"><th colspan="10">Qualifications</th></tr> | ||
| - {% for match in matches.qm %} | ||
| - {% include "matches/partials/match_row.html" %} | ||
| - {% endfor %} | ||
| - {% endif %} | ||
| - | ||
| - {% if matches.ef %} | ||
| - <tr class="key"><th colspan="10">Eighth Finals</th></tr> | ||
| - {% for match in matches.ef %} | ||
| - {% include "matches/partials/match_row.html" %} | ||
| - {% endfor %} | ||
| - {% endif %} | ||
| - | ||
| - {% if matches.qf %} | ||
| - <tr class="key"><th colspan="10">Quarterfinals</th></tr> | ||
| - {% for match in matches.qf %} | ||
| - {% include "matches/partials/match_row.html" %} | ||
| - {% endfor %} | ||
| - {% endif %} | ||
| - | ||
| - {% if matches.sf %} | ||
| - <tr class="key"><th colspan="10">Semifinals</th></tr> | ||
| - {% for match in matches.sf %} | ||
| - {% include "matches/partials/match_row.html" %} | ||
| - {% endfor %} | ||
| - {% endif %} | ||
| - | ||
| - {% if matches.f %} | ||
| - <tr class="key"><th colspan="10">Finals</th></tr> | ||
| - {% for match in matches.f %} | ||
| - {% include "matches/partials/match_row.html" %} | ||
| - {% endfor %} | ||
| - {% endif %} | ||
| - </table> | ||
| - {% else %} | ||
| - <p>No matches yet.</p> | ||
| - {% endif %} | ||
| - </div> | ||
| - {% if oprs|length > 0 %} | ||
| - <div id="opr" class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>OPRs - Top 15 (<a href="/opr">?</a>)</h2> | ||
| - </div> | ||
| - <table class="oprTable"> | ||
| - <tr class="key"> | ||
| - <th>Team</th> | ||
| - <th>OPR</th> | ||
| - </tr> | ||
| - {% for opr,opr_team in oprs %} | ||
| - <tr class="{% cycle 'odd' 'even' %}"> | ||
| - <td><a href="/team/{{ opr_team }}">{{ opr_team }}</a></td> | ||
| - <td>{{ opr|floatformat:2 }}</td> | ||
| - </tr> | ||
| - {% endfor %} | ||
| - </table> | ||
| - </div> | ||
| - {% endif %} | ||
| - <div id="teams" class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>{% if teams %}{{ teams|length}} {% endif %}Team{{teams|length|pluralize}}</h2> | ||
| - </div> | ||
| - {% if teams %} | ||
| - <ul class="infoList"> | ||
| - {% for team in teams %} | ||
| - <li> | ||
| - <h3><a href="/team/{{team.team_number}}">{{ team.team_number }}{% if team.nickname %} <span class="annotation">{{ team.nickname }}</span>{% endif %}</a></h3> | ||
| - {% if team.address %}<p>{{ team.address }}</p>{% endif %} | ||
| - </li> | ||
| - {% endfor %} | ||
| - </ul> | ||
| - {% else %} | ||
| - <p>No teams yet.</p> | ||
| - {% endif %} | ||
| - </div> | ||
| -</div> | ||
| - | ||
| -{% endblock %} | ||
| - |
| @@ -1,51 +0,0 @@ | ||
| -{% extends "base.html" %} | ||
| - | ||
| -{% block title %}Events - The Blue Alliance{% endblock %} | ||
| - | ||
| -{% block meta_description %}FIRST Robotics Competition events{% if explicit_year %} from {{year}}{% endif %}.{% endblock %} | ||
| - | ||
| -{% block leftCol %} | ||
| -<ul class="leftNav"> | ||
| - <li class="event"><a href="/events"><strong>Events</strong></a></li> | ||
| - <li><a href="/events/2012">2012</a></li> | ||
| - <li><a href="/events/2011">2011</a></li> | ||
| - <li><a href="/events/2010">2010</a></li> | ||
| - <li><a href="/events/2009">2009</a></li> | ||
| - <li><a href="/events/2008">2008</a></li> | ||
| - <li><a href="/events/2007">2007</a></li> | ||
| - <li><a href="/events/2006">2006</a></li> | ||
| - <li><a href="/events/2005">2005</a></li> | ||
| - <li><a href="/events/2004">2004</a></li> | ||
| - <li><a href="/events/2003">2003</a></li> | ||
| - <li><a href="/events/2002">2002</a></li> | ||
| -</ul> | ||
| -{% endblock %} | ||
| - | ||
| - | ||
| -{% block content %} | ||
| -<div id="contentTop"> | ||
| - <h1>Events in {{year}}</h1> | ||
| -</div> | ||
| -<div id="contentRight"> | ||
| - {% include "base_partials/right_col.html" %} | ||
| -</div> | ||
| -<div id="contentCenter"> | ||
| - <div id="events" class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>{{ events|length }} Events</h2> | ||
| - </div> | ||
| - <ul class="infoList"> | ||
| - {% for event in events %} | ||
| - <li> | ||
| - <h3><a href="/event/{{event.key.name}}">{{ event.name }}{%if event.location %} <span class="annotation">{{ event.location }}</span>{% endif %}</a></h3> | ||
| - <p> | ||
| - {% if event.start_date %}{{ event.start_date|date:"M d, Y" }}{% endif %} | ||
| - {% if event.end_date %}- {{ event.end_date|date:"M d, Y" }}{% endif %} | ||
| - </p> | ||
| - </li> | ||
| - {% endfor %} | ||
| - </ul> | ||
| - </div> | ||
| -</div> | ||
| - | ||
| -{% endblock %} |
| @@ -0,0 +1,52 @@ | ||
| +{% extends "base.html" %} | ||
| + | ||
| +{% block title %}The Blue Alliance{% endblock %} | ||
| + | ||
| +{% block content %} | ||
| + | ||
| +<div class="container"> | ||
| + <div class="hero-unit landing-hero-unit"> | ||
| + <div class="row-fluid"> | ||
| + <div class="span7 landing"> | ||
| + <img class="landing-logo landing-logo-phone visible-phone" src="images/logo_square_200.png" alt="tbalogo" /> | ||
| + | ||
| + <h1>The Blue Alliance</h1> | ||
| + <p>The one-stop place for <em>FIRST</em> Robotics Competition team information, event results, and video archives</p> | ||
| + <div> | ||
| + <a class="btn btn-large btn-primary" href="/teams">Teams</a> | ||
| + <a class="btn btn-large btn-primary" href="/events">Events</a> | ||
| + </div> | ||
| + </div> | ||
| + <div class="span5 hidden-phone"> | ||
| + <img class="landing-logo" src="images/logo_square_200.png" alt="tbalogo" /> | ||
| + </div> | ||
| + </div> | ||
| + </div> | ||
| +</div> | ||
| + | ||
| +<div class="container"> | ||
| + <div class="row"> | ||
| + <div class="span5 offset2"> | ||
| + <h2>This Week's Events</h2> | ||
| + {% for event in upcoming_events %} | ||
| + <a href="/event/{{event.key.name}}"> | ||
| + <div class="event_block"> | ||
| + <div class="event_info"> | ||
| + <h3>{{ event.name }}</h3> | ||
| + <p><em> | ||
| + {% if event.start_date %}{{ event.start_date|date:"M d, Y" }}{% endif %} | ||
| + {% if event.end_date %}- {{ event.end_date|date:"M d, Y" }}{% endif %}</em> | ||
| + </p> | ||
| + </div> | ||
| + </div> | ||
| + </a> | ||
| + {% empty %} | ||
| + <div class="no_events"> | ||
| + <p>There are no upcoming events.</p> | ||
| + <p>If you have an offseason event, <a href="/contact">tell us about it</a>!</p> | ||
| + </div> | ||
| + {% endfor %} | ||
| + </div> | ||
| + </div> | ||
| +</div> | ||
| +{% endblock %} |
| @@ -1,48 +0,0 @@ | ||
| -{% extends "base.html" %} | ||
| - | ||
| -{% block title %}The Blue Alliance - Contact{% endblock %} | ||
| - | ||
| -{% block meta_description %}How to get in touch with The Blue Alliance.{% endblock %} | ||
| - | ||
| -{% block leftCol %} | ||
| -<img src="/images/logo_square_200.png" width="200" class="profileImg" /> | ||
| -<ul class="leftNav"> | ||
| - <li class="event"><a href="/events/">Events</a></li> | ||
| - <li class="robot"><a href="/teams/">Teams</a></li> | ||
| -</ul> | ||
| -{% endblock %} | ||
| - | ||
| -{% block content %} | ||
| -<div id="contentTop"> | ||
| - <h1>Contact Us</h1> | ||
| -</div> | ||
| -<div id="contentRight"> | ||
| - {% include "base_partials/right_col.html" %} | ||
| -</div> | ||
| -<div id="contentCenter"> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Team Name Wrong?</h2> | ||
| - </div> | ||
| - <p>If your team's name or other information is incorrect on The Blue Alliance, please check if it is correct <a href="http://www.usfirst.org/whatsgoingon.aspx">on FIRST's website</a>. We update our records from <a href="https://my.usfirst.org/frc/tims/site.lasso\">FIRST's TIMS system</a> twice per month, and are unable to change your team name to anything other than what is listed there.</p> | ||
| - </div> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>API Access</h2> | ||
| - </div> | ||
| - <p>The new "dotcom" website brings a new API that doesn't require an API key to use. We're not quite ready to launch it, but please contact us if you are interested in using it.</p> | ||
| - </div> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Problem with the site?</h2> | ||
| - </div> | ||
| - <p>Does the site not look quite right in your browser? <a href="https://spreadsheets.google.com/viewform?formkey=dGJFZWRPVV9OX2p0cXVqbWVQSW5UUlE6MQ">Please let us know!</a></p> | ||
| - </div> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>By email</h2> | ||
| - </div> | ||
| - <p>We can be reached by email at <a href="mailto:contact@thebluealliance.com">contact@thebluealliance.com</a>.</p> | ||
| - </div> | ||
| -</div> | ||
| -{% endblock %} |
| @@ -1,83 +0,0 @@ | ||
| -{% extends "base.html" %} | ||
| - | ||
| -{% block title %}The Blue Alliance - Debug Help{% endblock %} | ||
| - | ||
| -{% block leftCol %} | ||
| - <img src="http://firsthandtechnology.org.uk/blogs/fllteam/WindowsLiveWriter/TSMRoboteam2K7PowerPuzzleWorldFestivalAt_A81D/Opening%20Ceremony%20Georgia%20Dome_2.jpg" width="200" height="160" class="profileImg" /> | ||
| - <ul class="leftNav"> | ||
| - <li class="info"><a href="https://github.com/gregmarra/the-blue-alliance">github</a></li> | ||
| - </ul> | ||
| - <div class="divider"></div> | ||
| -{% endblock %} | ||
| - | ||
| -{% block content %} | ||
| -<div id="contentTop"> | ||
| - <h1>The Blue Alliance <span class="annotation">Debug and Setup</span></h1> | ||
| -</div> | ||
| -<div id="contentRight"> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Admin Tasks</h2> | ||
| - </div> | ||
| - <p>Go <a href="/admin/">admin some stuff</a>.</p> | ||
| - </div> | ||
| - {% include "base_partials/right_col.html" %} | ||
| -</div> | ||
| -<div id="contentCenter"> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>The Blue Alliance Developer Page</h2> | ||
| - </div> | ||
| - <p>Hello developer! Welcome to the debug page for The Blue Alliance. This page is full of useful pointers to help you locally develop TBA. It is different from <a href="/admin/">the admin console</a>, which is designed to help fix data in production.</p> | ||
| - <p>To get started, you have to set up some initial test data for your local copy of TBA. We use <a href="http://paver.github.com/paver/">paver</a> scripts in pavement.py to set up this test data in your dev environment. <a href="http://packages.python.org/distribute/easy_install.html">easy_install</a> paver if you don't have it.</p> | ||
| - <p>Run these on the command line in the folder you have the-blue-alliance project in:</p> | ||
| - <ol> | ||
| - <li><a href="/tasks/usfirst_teams_fast_get">/tasks/usfirst_teams_fast_get</a> : Sets up all 2012 teams, fast.</li> | ||
| - <li>$ paver dev_data_setup</li> | ||
| - <li><a href="/tasks/eventteam_update_enqueue">/tasks/eventteam_update_enqueue</a> : Build event attendance information.</li> | ||
| - <li><a href="/tasks/tba_videos_get/2010cmp">/tasks/tba_videos_get/2010cmp</a> : Grab videos for 2010cmp</li> | ||
| - </ol> | ||
| - <p>This test data gives you the <a href="/event/2010cmp">2010 Championship Einstein Field</a> as your main test data.</p> | ||
| - </div> | ||
| - <div id="moreSetup" class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Prod Setup</h2> | ||
| - </div> | ||
| - <p>If you're setting up a full copy of The Blue Alliance, these will help you create all the data you need. | ||
| - <ol> | ||
| - <li><a href="/tasks/usfirst_events_instantiate?year=2012">UsfirstEventsInstantiate</a>, enqueues Tasks to create Event objects for regional events from USFIRST.</li> | ||
| - <li>Instantiate 2012 Teams: <a href="/tasks/usfirst_teams_instantiate?year=2012&skip=0">UsfirstTeamsInstantiate @0</a> <a href="/tasks/usfirst_teams_instantiate?year=2012&skip=1000">@1000</a> <a href="/tasks/usfirst_teams_instantiate?year=2012&skip=2000">@2000</a> <a href="/tasks/usfirst_teams_instantiate?year=2012&skip=3000">@3000</a></li> | ||
| - <li>Instantiate 2011 Teams: <a href="/tasks/usfirst_teams_instantiate?year=2011&skip=0">UsfirstTeamsInstantiate @0</a> <a href="/tasks/usfirst_teams_instantiate?year=2011&skip=1000">@1000</a> <a href="/tasks/usfirst_teams_instantiate?year=2011&skip=2000">@2000</a></li> | ||
| - <li>Instantiate 2010 Teams: <a href="/tasks/usfirst_teams_instantiate?year=2010&skip=0">UsfirstTeamsInstantiate @0</a> <a href="/tasks/usfirst_teams_instantiate?year=2010&skip=1000">@1000</a> <a href="/tasks/usfirst_teams_instantiate?year=2010&skip=2000">@2000</a></li> | ||
| - <li>Instantiate 2009 Teams: <a href="/tasks/usfirst_teams_instantiate?year=2009&skip=0">UsfirstTeamsInstantiate @0</a> <a href="/tasks/usfirst_teams_instantiate?year=2009&skip=1000">@1000</a> <a href="/tasks/usfirst_teams_instantiate?year=2009&skip=2000">@2000</a></li> | ||
| - <li>Bulkload Old Events:<br />appcfg.py upload_data --config_file=bulkloader.yaml --filename=test_data/events.csv --kind=Event --url=http://tbatv-prod.appspot.com/_ah/remote_api</li> | ||
| - <li>Bulkload Old Matches: <br />appcfg.py upload_data --config_file=bulkloader.yaml --filename=test_data/matches.csv --kind=Match --url=http://tbatv-prod.appspot.com/_ah/remote_api</li> | ||
| - <li><a href="/tasks/eventteam_update_enqueue">Update EventTeams</a>, to build all the event attendance information.</li> | ||
| - </ol> | ||
| - </div> | ||
| - | ||
| - <div id="updates" class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Updates</h2> | ||
| - </div> | ||
| - <ol> | ||
| - <li><a href="/tasks/usfirst_event_get_enqueue">UsfirstEventGetEnqueue</a>, enqueue tasks to update official Events.</li> | ||
| - <li><a href="/tasks/usfirst_matches_get_enqueue?year=2012">UsfirstMatchesGetEnqueue</a>, enqueue tasks to update match results for 2012 Events</li> | ||
| - <li><a href="/tasks/usfirst_team_get_enqueue?offset=0">UsfirstTeamGetEnqueue @ 0</a>, <a href="/tasks/usfirst_team_get_enqueue?offset=1000">@ 1000</a>, <a href="/tasks/usfirst_team_get_enqueue?offset=2000">@ 2000</a>, <a href="/tasks/usfirst_team_get_enqueue?offset=3000">@ 3000</a>, enqueue tasks to update Team details</li> | ||
| - <li><a href="/tasks/tba_videos_get/2010cmp">TBAVideosGet</a> with an Event key to scrape <a href="http://videos.thebluealliance.net">http://videos.thebluealliance.net</a> for TBAVideos.</li> | ||
| - <li><a href="/tasks/eventteam_update_enqueue">Update EventTeams</a>, to build all the event attendance information.</li> | ||
| - <li><a href="/tasks/event_opr_get_enqueue?year=2012">Update OPRs</a> or <a href="/tasks/event_opr_get/2010cmp">Update One Event's OPRs</a>, to recalculate OPRs.</li> | ||
| - </ol> | ||
| - </div> | ||
| - | ||
| - <div id="commands" class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Useful Other Commands</h2> | ||
| - </div> | ||
| - <ul> | ||
| - <li>appcfg.py upload_data --config_file=bulkloader.yaml --filename=<em>something</em>.csv --kind=<em>Something</em> --url=http://<em>something</em>/_ah/remote_api</li> | ||
| - </ul> | ||
| - </div> | ||
| -</div> | ||
| - | ||
| -{% endblock %} |
| @@ -1,31 +0,0 @@ | ||
| -{% extends "base.html" %} | ||
| - | ||
| -{% block title %}The Blue Alliance{% endblock %} | ||
| - | ||
| -{% block leftCol %} | ||
| -<img src="/images/logo_square_200.png" width="200" class="profileImg" /> | ||
| -{% endblock %} | ||
| - | ||
| -{% block content %} | ||
| -<div id="contentRight"> | ||
| - {% include "base_partials/right_col.html" %} | ||
| -</div> | ||
| -<div id="contentCenter"> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Upcoming Events</h2> | ||
| - </div> | ||
| - <ul class="infoList"> | ||
| - {% for event in upcoming_events %} | ||
| - <li> | ||
| - <h3><a href="/event/{{event.key.name}}">{{ event.name }}{%if event.location %} <span class="annotation">{{ event.location }}</span>{% endif %}</a></h3> | ||
| - <p> | ||
| - {% if event.start_date %}{{ event.start_date|date:"M d, Y" }}{% endif %} | ||
| - {% if event.end_date %}- {{ event.end_date|date:"M d, Y" }}{% endif %} | ||
| - </p> | ||
| - </li> | ||
| - {% endfor %} | ||
| - </ul> | ||
| - </div> | ||
| -</div> | ||
| -{% endblock %} |
| @@ -1,31 +0,0 @@ | ||
| -{% extends "base.html" %} | ||
| - | ||
| -{% block title %}The Blue Alliance - OPR{% endblock %} | ||
| - | ||
| -{% block meta_description %}What is OPR?{% endblock %} | ||
| - | ||
| -{% block leftCol %} | ||
| -<img src="/images/logo_square_200.png" width="200" class="profileImg" /> | ||
| -<ul class="leftNav"> | ||
| - <li class="event"><a href="/events/">Events</a></li> | ||
| - <li class="robot"><a href="/teams/">Teams</a></li> | ||
| -</ul> | ||
| -{% endblock %} | ||
| - | ||
| -{% block content %} | ||
| -<div id="contentTop"> | ||
| - <h1>What is OPR?</h1> | ||
| -</div> | ||
| -<div id="contentRight"> | ||
| - {% include "base_partials/right_col.html" %} | ||
| -</div> | ||
| -<div id="contentCenter"> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>What is an OPR?</h2> | ||
| - </div> | ||
| - <p>OPR stands for <strong>Offensive Power Rating</strong>, which is a system to attempt to deduce the average point contribute of a team to an alliance. It is based on <a href="http://en.wikipedia.org/wiki/Sports_rating_system">sports rating systems</a> used in other sports. OPRs are an interesting way to slice the data for teams at particular events, but aren't a perfect system for assessing a team's performance or contribution.</p> | ||
| - <p>The Blue Alliance opts to show the top 15 OPRs for each competition.</p> | ||
| - </div> | ||
| -</div> | ||
| -{% endblock %} |
| @@ -1,38 +0,0 @@ | ||
| -{% extends "base.html" %} | ||
| - | ||
| -{% block title %}The Blue Alliance - Search{% endblock %} | ||
| - | ||
| -{% block meta_description %}Search for FIRST Robotics Competition teams, events, and matches.{% endblock %} | ||
| - | ||
| -{% block leftCol %} | ||
| -<img src="/images/logo_square_200.png" width="200" class="profileImg" /> | ||
| -<ul class="leftNav"> | ||
| - <li class="event"><a href="/events/">Events</a></li> | ||
| - <li class="robot"><a href="/teams/">Teams</a></li> | ||
| -</ul> | ||
| -{% endblock %} | ||
| - | ||
| -{% block content %} | ||
| -<div id="contentTop"> | ||
| - <h1>Search</h1> | ||
| -</div> | ||
| -<div id="contentRight"> | ||
| - {% include "base_partials/right_col.html" %} | ||
| -</div> | ||
| -<div id="contentCenter"> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Search Results</h2> | ||
| - </div> | ||
| - <div id="cse-search-results"></div> | ||
| - <script type="text/javascript"> | ||
| - var googleSearchIframeName = "cse-search-results"; | ||
| - var googleSearchFormName = "cse-search-box"; | ||
| - var googleSearchFrameWidth = 500; | ||
| - var googleSearchDomain = "www.google.com"; | ||
| - var googleSearchPath = "/cse"; | ||
| - </script> | ||
| - <script type="text/javascript" src="http://www.google.com/afsonline/show_afs_search.js"></script> | ||
| - </div> | ||
| -</div> | ||
| -{% endblock %} |
| @@ -1,43 +0,0 @@ | ||
| -{% extends "base.html" %} | ||
| - | ||
| -{% block title %}The Blue Alliance - Thanks{% endblock %} | ||
| - | ||
| -{% block meta_description %}Thanks to all the companies and technologies that make The Blue Alliance possible.{% endblock %} | ||
| - | ||
| -{% block leftCol %} | ||
| -<img src="/images/logo_square_200.png" width="200" class="profileImg" /> | ||
| -<ul class="leftNav"> | ||
| - <li class="event"><a href="/events/">Events</a></li> | ||
| - <li class="robot"><a href="/teams/">Teams</a></li> | ||
| -</ul> | ||
| -{% endblock %} | ||
| - | ||
| -{% block content %} | ||
| -<div id="contentTop"> | ||
| - <h1>Thanks to...</h1> | ||
| -</div> | ||
| -<div id="contentRight"> | ||
| - {% include "base_partials/right_col.html" %} | ||
| -</div> | ||
| -<div id="contentCenter"> | ||
| - <div class="contentBlock"> | ||
| - <div class="contentBlockTopper"> | ||
| - <h2>Thanks to</h2> | ||
| - </div> | ||
| - <ul class="infoList"> | ||
| - <li> | ||
| - <h3><a href="http://www.dotblock.com" title="Dotblock VPS Hosting">Dotblock VPS Hosting</a></h3> | ||
| - <p>For the dedicated server that serves our videos</p> | ||
| - </li> | ||
| - <li> | ||
| - <h3><a href="http://www.appspot.com">Google AppEngine</a></h3> | ||
| - <p>For the webapp platform</p> | ||
| - </li> | ||
| - <li> | ||
| - <h3><a href="http://www.komodomedia.com/download/#social-network-icon-pack">Komodo Media</a></h3> | ||
| - <p>For the wonderful social media icons</p> | ||
| - </li> | ||
| - </ul> | ||
| - </div> | ||
| -</div> | ||
| -{% endblock %} |
| @@ -0,0 +1,59 @@ | ||
| +{% extends "base.html" %} | ||
| + | ||
| +{% block title %}{{match.verbose_name}} - {{match.event.year}} {{match.event.name}} - The Blue Alliance{% endblock %} | ||
| + | ||
| +{% block meta_description %}Match results and video for {{match.verbose_name}} at the {{match.event.year}} {{match.event.name}} FIRST Robotics Competition in {{match.event.location}}.{% endblock %} | ||
| + | ||
| +{% block more_head_tags %} | ||
| + <meta property="og:title" content="{{match.verbose_name}} - {{match.event.year}} {{match.event.name}}" /> | ||
| + <meta property="og:type" content="article" /> | ||
| + <meta property="og:url" content="http://thebluealliance.com/match/{{match.key.name}}" /> | ||
| + {% if tbavideo.getThumbnailPath %} | ||
| + <meta property="og:image" content="{{tbavideo.getThumbnailPath}}" /> | ||
| + {% else %} | ||
| + <meta property="og:image" content="http://www.thebluealliance.com/images/logo_square_200.png" /> | ||
| + {% endif %} | ||
| + <meta property="og:description" content="{{match.verbose_name}} at the {{match.event.year}} {{match.event.name}} FIRST Robotics Competition in {{match.event.location}}."/> | ||
| + <meta property="og:site_name" content="The Blue Alliance" /> | ||
| + {% if tbavideo.getStreamablePath %}<meta property="og:video" content="{{ tbavideo.getStreamablePath }}" />{% endif %} | ||
| +{% endblock %} | ||
| + | ||
| +{% block content %} | ||
| +<div class="container"> | ||
| + <h1>{{match.verbose_name}}</h1> | ||
| + <h3 class="end_header">{{ match.event.year }} {{ match.event.name }}</h3> | ||
| + <p><a href="/event/{{match.event.key.name}}"><i class="icon-chevron-left"></i> Back to Event Page</a></p> | ||
| + | ||
| + <div class="row"> | ||
| + <div class="span6 offset3"> | ||
| + <table class="matchTable"> | ||
| + <tr class="key"> | ||
| + <th colspan="{{match.alliances.items.0.1.teams|length}}">Teams</th> | ||
| + <th>Score</th> | ||
| + </tr> | ||
| + {% for items in match.alliances.items reversed %} | ||
| + <tr> | ||
| + {% for team in items.1.teams %} | ||
| + <td class="{{ items.0 }}{% ifequal match.winning_alliance items.0 %} winner{% endifequal %}"><a href="/team/{{ team|slice:"3:" }}">{{ team|slice:"3:" }}</a></td> | ||
| + {% endfor %} | ||
| + <td class="{{items.0}}Score{% ifequal match.winning_alliance items.0 %} winner{% endifequal %}">{% ifequal items.1.score "-1" %}?{% else %}{{ items.1.score }}{% endifequal %}</td> | ||
| + </tr> | ||
| + {% endfor %} | ||
| + </table> | ||
| + </div> | ||
| + </div> | ||
| + <div class="row"> | ||
| + <div class="span6 offset3"> | ||
| + {% if tbavideo %} | ||
| + {% include "videos/partials/tbavideo_player.html" %} | ||
| + {% endif %} | ||
| + {% for youtube_video in match.youtube_videos %} | ||
| + {% include "videos/partials/youtube_video_player.html" %} | ||
| + {% endfor %} | ||
| + {% if not tbavideo and not match.youtube_videos %} | ||
| + <p>No video available. Have one? <a href="/contact">Contact us!</a></p> | ||
| + {% endif %} | ||
| + </div> | ||
| + </div> | ||
| +</div> | ||
| +{% endblock %} |
| @@ -0,0 +1,48 @@ | ||
| +<table class="table-condensed matchTable"> | ||
| + <tr class="key hidden-phone"> | ||
| + <th class="videoIcon"></th> | ||
| + <th>Match Num.</th> | ||
| + <th colspan="3">Red Alliance</th> | ||
| + <th colspan="3">Blue Alliance</th> | ||
| + <th colspan="2">Scores</th> | ||
| + </tr> | ||
| + | ||
| + <tr class="key visible-phone"> | ||
| + <th class="videoIcon" rowspan="2"></th> | ||
| + <th rowspan="2">Match Num.</th> | ||
| + <th colspan="6">Red Alliance</th> | ||
| + <th colspan="2">Red Score</th> | ||
| + </tr> | ||
| + <tr class="key visible-phone"> | ||
| + <th colspan="6">Blue Alliance</th> | ||
| + <th colspan="2">Blue Score</th> | ||
| + </tr> | ||
| + | ||
| + {% if matches.ef %} | ||
| + <tr class="key"><th colspan="10">Eighth Finals</th></tr> | ||
| + {% for match in matches.ef %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| + | ||
| + {% if matches.qf %} | ||
| + <tr class="key"><th colspan="10">Quarterfinals</th></tr> | ||
| + {% for match in matches.qf %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| + | ||
| + {% if matches.sf %} | ||
| + <tr class="key"><th colspan="10">Semifinals</th></tr> | ||
| + {% for match in matches.sf %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| + | ||
| + {% if matches.f %} | ||
| + <tr class="key"><th colspan="10">Finals</th></tr> | ||
| + {% for match in matches.f %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| +</table> |
| @@ -0,0 +1,55 @@ | ||
| +<table class="table-condensed matchTable"> | ||
| + <tr class="key hidden-phone"> | ||
| + <th class="videoIcon"></th> | ||
| + <th>Match Num.</th> | ||
| + <th colspan="3">Red Alliance</th> | ||
| + <th colspan="3">Blue Alliance</th> | ||
| + <th colspan="2">Scores</th> | ||
| + </tr> | ||
| + | ||
| + <tr class="key visible-phone"> | ||
| + <th class="videoIcon" rowspan="2"></th> | ||
| + <th rowspan="2">Match Num.</th> | ||
| + <th colspan="6">Red Alliance</th> | ||
| + <th colspan="2">Red Score</th> | ||
| + </tr> | ||
| + <tr class="key visible-phone"> | ||
| + <th colspan="6">Blue Alliance</th> | ||
| + <th colspan="2">Blue Score</th> | ||
| + </tr> | ||
| + | ||
| + {% if matches.qm %} | ||
| + <tr class="key"><th colspan="10">Qualifications</th></tr> | ||
| + {% for match in matches.qm %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| + | ||
| + {% if matches.ef %} | ||
| + <tr class="key"><th colspan="10">Eighth Finals</th></tr> | ||
| + {% for match in matches.ef %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| + | ||
| + {% if matches.qf %} | ||
| + <tr class="key"><th colspan="10">Quarterfinals</th></tr> | ||
| + {% for match in matches.qf %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| + | ||
| + {% if matches.sf %} | ||
| + <tr class="key"><th colspan="10">Semifinals</th></tr> | ||
| + {% for match in matches.sf %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| + | ||
| + {% if matches.f %} | ||
| + <tr class="key"><th colspan="10">Finals</th></tr> | ||
| + {% for match in matches.f %} | ||
| + {% include "match_partials/match_row.html" %} | ||
| + {% endfor %} | ||
| + {% endif %} | ||
| +</table> |