sports_db 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/clients/android/client.js +53 -0
- data/app/assets/javascripts/clients/ios/client.js +58 -0
- data/app/assets/javascripts/core/Application.js +173 -0
- data/app/assets/javascripts/core/BaseView.js +117 -0
- data/app/assets/javascripts/core/History.js +45 -0
- data/app/assets/javascripts/core/Mock.js +90 -0
- data/app/assets/javascripts/core/Timer.js +18 -0
- data/app/assets/javascripts/core/View.js +56 -0
- data/app/assets/javascripts/core/utilities.js +81 -0
- data/app/assets/javascripts/libs/SimpleInheritance.js +53 -0
- data/app/assets/javascripts/libs/microjungle.zepto.js +45 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/ajax.js +279 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/assets.js +21 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/data.js +66 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/detect.js +40 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/event.js +224 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/form.js +40 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/fx.js +91 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/fx_methods.js +72 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/gesture.js +35 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/polyfill.js +36 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/selector.js +70 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/stack.js +22 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/touch.js +85 -0
- data/app/assets/javascripts/libs/zepto-v1.0rc1/zepto.js +591 -0
- data/app/assets/javascripts/libs/zepto_0.8.js +1213 -0
- data/app/assets/javascripts/plugins/assert.js +11 -0
- data/app/assets/javascripts/plugins/calnav.js +18 -0
- data/app/assets/javascripts/plugins/detect.js +16 -0
- data/app/assets/javascripts/plugins/filterable.js +12 -0
- data/app/assets/javascripts/plugins/flash.js +15 -0
- data/app/assets/javascripts/plugins/jquery.zumobi-0.2.js +57 -0
- data/app/assets/javascripts/plugins/loading.js +47 -0
- data/app/assets/javascripts/plugins/params.js +27 -0
- data/app/assets/javascripts/plugins/resizeable.js +40 -0
- data/app/assets/stylesheets/_base.css.scss +42 -0
- data/app/assets/stylesheets/_filterable.css.scss +19 -0
- data/app/assets/stylesheets/_flash.css.scss +9 -0
- data/app/assets/stylesheets/_loading.css.scss +28 -0
- data/app/assets/stylesheets/_play.css.scss +38 -0
- data/app/assets/stylesheets/_reset.css.scss +33 -0
- data/app/assets/stylesheets/_table_base.scss +121 -0
- data/app/assets/stylesheets/mock.css.scss +52 -0
- data/app/controllers/application_controller.rb +39 -0
- data/app/views/application/load.html.erb +1 -0
- data/app/views/layouts/application.html.erb +27 -0
- data/lib/sports_db/version.rb +1 -1
- metadata +90 -5
@@ -0,0 +1,18 @@
|
|
1
|
+
// Behavior for calendar (schedule) navigation.
|
2
|
+
(function($){
|
3
|
+
$.calnav = function(){
|
4
|
+
$('calnav item')
|
5
|
+
.unbind()
|
6
|
+
.bind('click', function(e) {
|
7
|
+
var el = $(e.target)
|
8
|
+
if (!el.attr('href')) {
|
9
|
+
el = el.closest('item');
|
10
|
+
}
|
11
|
+
if (!el.attr('href')) return ;
|
12
|
+
Application.showView(
|
13
|
+
el.attr('href').toParameters()
|
14
|
+
);
|
15
|
+
})
|
16
|
+
.pressable();
|
17
|
+
}
|
18
|
+
})(Zepto);
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// Rather than analyze user agents strings, the client places query params in the url:
|
2
|
+
// - client
|
3
|
+
// - version (ex: 1.2)
|
4
|
+
(function($){
|
5
|
+
var q = $.queryStrToObj();
|
6
|
+
|
7
|
+
$.assert(q.client, "`client` param is required.");
|
8
|
+
$.assert(q.version, "`version` param is required.");
|
9
|
+
|
10
|
+
$.client = {};
|
11
|
+
$.client[q.client] = true;
|
12
|
+
$.client.version_major = q.version.split('.')[0];
|
13
|
+
$.client.version_minor = q.version.split('.')[1];
|
14
|
+
|
15
|
+
$(document.body).addClass(q.client);
|
16
|
+
})(Zepto);
|
@@ -0,0 +1,12 @@
|
|
1
|
+
// ### Allows a view to retrieve a new view via a `<select>`.
|
2
|
+
(function($){
|
3
|
+
$.fn.filterable = function() {
|
4
|
+
this
|
5
|
+
.unbind()
|
6
|
+
.bind('change', function(e) {
|
7
|
+
// Prevents history from being created
|
8
|
+
Application.showView( e.target.value.substring(1).toParameters() );
|
9
|
+
})
|
10
|
+
.pressable();
|
11
|
+
};
|
12
|
+
})(Zepto);
|
@@ -0,0 +1,15 @@
|
|
1
|
+
(function($){
|
2
|
+
$.flash = function(msg, params, force) {
|
3
|
+
params = params || {};
|
4
|
+
if (force) params.flashed = false;
|
5
|
+
|
6
|
+
if (!params.flashed) {
|
7
|
+
$('#flash').html(msg);
|
8
|
+
$('#flash').show();
|
9
|
+
setTimeout(function() {
|
10
|
+
$('#flash').hide();
|
11
|
+
}, 5000);
|
12
|
+
params.flashed = true;
|
13
|
+
}
|
14
|
+
};
|
15
|
+
})(Zepto);
|
@@ -0,0 +1,57 @@
|
|
1
|
+
// This was taken from //webclient.
|
2
|
+
|
3
|
+
/**
|
4
|
+
* jQuery plug-in.
|
5
|
+
*/
|
6
|
+
(function($) {
|
7
|
+
|
8
|
+
/**
|
9
|
+
* IE9 does not support touch events, only mouse events. We need to adjust appropriately.
|
10
|
+
* Also, some methods for getting the right target and right coordinates of the event.
|
11
|
+
*/
|
12
|
+
var touch = ("ontouchstart" in document.body);
|
13
|
+
$.touchEvents = {
|
14
|
+
isTouch: touch,
|
15
|
+
start: (touch) ? "touchstart" : "mousedown",
|
16
|
+
move: (touch) ? "touchmove" : "mousemove",
|
17
|
+
end: (touch) ? "touchend" : "mouseup mouseout",
|
18
|
+
endOnly:(touch) ? "touchend touchcancel" : "mouseup",
|
19
|
+
cancel: (touch) ? "touchend touchcancel touchmove" : "mouseup mousemove mouseout",
|
20
|
+
getTarget: function(e) {
|
21
|
+
return touch ?
|
22
|
+
$(e.originalEvent.touches[0].target) :
|
23
|
+
$(e.target);
|
24
|
+
},
|
25
|
+
getCoord: function(e) {
|
26
|
+
// e.originalEvent is necessary because you are using jQuery.
|
27
|
+
return touch ?
|
28
|
+
{x: e.originalEvent.touches[0].pageX, y: e.originalEvent.touches[0].pageY} :
|
29
|
+
{x: e.pageX, y: e.pageY};
|
30
|
+
}
|
31
|
+
};
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Make the provided elements "pressable" (give them a press state when touched). If
|
35
|
+
* the element has a class token of "disabled", then the press effect will not
|
36
|
+
* be applied.
|
37
|
+
*
|
38
|
+
* DO NOT use pressable() to emulate list selection behavior. It won't work when
|
39
|
+
* you then try and embed an actionable control within the list (e.g. a play button
|
40
|
+
* for a video, or a favoriting star). Instead, use the List mixin behavior.
|
41
|
+
*
|
42
|
+
*/
|
43
|
+
// Modified from //webclient version. Simplified.
|
44
|
+
$.fn.pressable = function() {
|
45
|
+
var HL_CLASS = 'hl';
|
46
|
+
return this
|
47
|
+
.on($.touchEvents.start, function(e) {
|
48
|
+
var $this = $(this);
|
49
|
+
if (!$this.hasClass("disabled")) {
|
50
|
+
$this.addClass(HL_CLASS);
|
51
|
+
}
|
52
|
+
})
|
53
|
+
.on($.touchEvents.cancel, function(e) {
|
54
|
+
$(this).removeClass(HL_CLASS);
|
55
|
+
});
|
56
|
+
};
|
57
|
+
}(Zepto));
|
@@ -0,0 +1,47 @@
|
|
1
|
+
(function($){
|
2
|
+
var load_timer;
|
3
|
+
var LOADING_TEXT = 'Loading…';
|
4
|
+
function prevent(e) {
|
5
|
+
e.preventDefault();
|
6
|
+
}
|
7
|
+
function freeze() {
|
8
|
+
$(document.body).bind("touchmove", prevent);
|
9
|
+
}
|
10
|
+
function thaw() {
|
11
|
+
$(document.body).unbind('touchmove', prevent);
|
12
|
+
}
|
13
|
+
function showLoaderNow() {
|
14
|
+
$('#app_load_loader').remove();
|
15
|
+
freeze();
|
16
|
+
loading_text = LOADING_TEXT;
|
17
|
+
if (Application.currentView && Application.currentView.params.loading_text) {
|
18
|
+
loading_text = Application.currentView.params.loading_text;
|
19
|
+
}
|
20
|
+
$('#loading_text').html(loading_text);
|
21
|
+
|
22
|
+
$('#loading').css({'height': document.documentElement.clientHeight + 'px'});
|
23
|
+
$.alignLoader();
|
24
|
+
|
25
|
+
$('#loading').show();
|
26
|
+
}
|
27
|
+
$.alignLoader = function() {
|
28
|
+
$('#loading').css({'top': window.scrollY + 'px'});
|
29
|
+
};
|
30
|
+
$.showLoader = function(loader_text) {
|
31
|
+
if (load_timer) {
|
32
|
+
load_timer.stop();
|
33
|
+
load_timer = undefined;
|
34
|
+
}
|
35
|
+
load_timer = new Timer(showLoaderNow, 222);
|
36
|
+
load_timer.start();
|
37
|
+
};
|
38
|
+
$.hideLoader = function() {
|
39
|
+
load_timer.stop();
|
40
|
+
thaw();
|
41
|
+
$('#loading').hide();
|
42
|
+
$('#app_load_loader').remove();
|
43
|
+
if (Application.currentView && Application.currentView.params.loading_text) {
|
44
|
+
Application.currentView.params.loading_text = LOADING_TEXT;
|
45
|
+
}
|
46
|
+
};
|
47
|
+
})(Zepto);
|
@@ -0,0 +1,27 @@
|
|
1
|
+
;(function($){
|
2
|
+
$.strToObj = function(str) {
|
3
|
+
var obj = {};
|
4
|
+
str.split("&").forEach(
|
5
|
+
function(p) {
|
6
|
+
var s = p.split("=");
|
7
|
+
obj[s[0].replace(/^\?/, '')] = decodeURIComponent(s[1]);
|
8
|
+
}
|
9
|
+
);
|
10
|
+
return obj;
|
11
|
+
};
|
12
|
+
$.objToQueryStr = function(obj) {
|
13
|
+
var arr = [];
|
14
|
+
for (var prop in obj) {
|
15
|
+
if (typeof obj[prop] !== "function") {
|
16
|
+
arr.push( encodeURIComponent(prop) +"="+ encodeURIComponent(obj[prop]) );
|
17
|
+
}
|
18
|
+
}
|
19
|
+
return arr.join("&")+'';
|
20
|
+
};
|
21
|
+
$.queryStrToObj = function() {
|
22
|
+
return $.strToObj( window.location.search.substring(1) );
|
23
|
+
};
|
24
|
+
$.hashStrToObj = function() {
|
25
|
+
return $.strToObj( window.location.hash.substring(1) );
|
26
|
+
};
|
27
|
+
})(Zepto);
|
@@ -0,0 +1,40 @@
|
|
1
|
+
;(function($){
|
2
|
+
var MIN = 13;
|
3
|
+
var MAX = 17;
|
4
|
+
var DEFAULT = 15;
|
5
|
+
var p = Application.params.font_size;
|
6
|
+
var pi = parseInt(p);
|
7
|
+
var size = ((!isNaN(p) && pi <= MAX && pi >= MIN)) ? pi : DEFAULT;
|
8
|
+
|
9
|
+
$.fn.resizeable = function() {
|
10
|
+
function set(size, notify) {
|
11
|
+
// set size
|
12
|
+
$('.resizeable_text').css('font-size', get_px(size) + "px");
|
13
|
+
|
14
|
+
// reset disabled state
|
15
|
+
$('.resizeable').removeClass('disabled');
|
16
|
+
// set disabled state
|
17
|
+
if (size === MIN) $('.resizeable.down').addClass('disabled');
|
18
|
+
if (size === MAX) $('.resizeable.up').addClass('disabled');
|
19
|
+
|
20
|
+
// notify the client of the size
|
21
|
+
if (notify) Client.notify({ 'font_size': size });
|
22
|
+
return size;
|
23
|
+
}
|
24
|
+
function handlers(el) {
|
25
|
+
el
|
26
|
+
.unbind("click")
|
27
|
+
.bind("click", function() {
|
28
|
+
var new_size = size + parseInt($(this).data('dir'), 10);
|
29
|
+
if (new_size <= MAX && new_size >= MIN) {
|
30
|
+
size = set(new_size, true);
|
31
|
+
}
|
32
|
+
});
|
33
|
+
}
|
34
|
+
|
35
|
+
set(size, false);
|
36
|
+
handlers(this);
|
37
|
+
|
38
|
+
return this;
|
39
|
+
};
|
40
|
+
})(Zepto);
|
@@ -0,0 +1,42 @@
|
|
1
|
+
html,body {
|
2
|
+
height: 100%;
|
3
|
+
background-color: $page_bg;
|
4
|
+
}
|
5
|
+
* {
|
6
|
+
-webkit-box-sizing: border-box;
|
7
|
+
box-sizing: border-box;
|
8
|
+
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
9
|
+
-webkit-user-select: none;
|
10
|
+
-webkit-user-modify: read-only;
|
11
|
+
-webkit-touch-callout: none;
|
12
|
+
background-repeat: no-repeat;
|
13
|
+
}
|
14
|
+
html { font-size: 10px; }
|
15
|
+
@media (min-width: 460px) and (-webkit-min-device-pixel-ratio: 1.5) {
|
16
|
+
html { font-size: 15px; }
|
17
|
+
}
|
18
|
+
@media (min-width: 520px) and (-webkit-min-device-pixel-ratio: 1.5) {
|
19
|
+
html { font-size: 16.8px; }
|
20
|
+
}
|
21
|
+
@media (min-width: 580px) and (-webkit-min-device-pixel-ratio: 1.5) {
|
22
|
+
html { font-size: 18.7px; }
|
23
|
+
}
|
24
|
+
@media (min-width: 700px) and (-webkit-min-device-pixel-ratio: 1.5) {
|
25
|
+
html { font-size: 22.4px; }
|
26
|
+
}
|
27
|
+
@media (min-device-width: 760px) {
|
28
|
+
html { font-size: 10px; }
|
29
|
+
}
|
30
|
+
|
31
|
+
body {
|
32
|
+
font-size: $default_font_size;
|
33
|
+
color: $txt_gray;
|
34
|
+
margin: 0 auto;
|
35
|
+
}
|
36
|
+
body.ios {
|
37
|
+
font-family: helvetica, sans-serif;
|
38
|
+
text-rendering: optimizeLegibility;
|
39
|
+
}
|
40
|
+
body.android {
|
41
|
+
font-family: sans-serif;
|
42
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#filter {
|
2
|
+
-webkit-appearance: button;
|
3
|
+
display: block;
|
4
|
+
width: 31rem;
|
5
|
+
height: 4.8rem;
|
6
|
+
-webkit-background-size: 31rem 19.2rem;
|
7
|
+
font-weight: bold;
|
8
|
+
border: 0;
|
9
|
+
padding-left: 1rem;
|
10
|
+
color: #666;
|
11
|
+
margin: 0 auto .5rem;
|
12
|
+
font-size: 1.8rem;
|
13
|
+
|
14
|
+
background-image: url(#{$imghost}dropdown_sprite@2x.png);
|
15
|
+
|
16
|
+
&.hl {
|
17
|
+
background-position: 0 -4.8rem;
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
loading{
|
2
|
+
display: block;
|
3
|
+
z-index:99999;
|
4
|
+
position:absolute;
|
5
|
+
top:0;
|
6
|
+
left:0;
|
7
|
+
right:0;
|
8
|
+
bottom: 0;
|
9
|
+
text-align: center;
|
10
|
+
background-color:rgba(20,20,20,.1);
|
11
|
+
color:#fff;
|
12
|
+
}
|
13
|
+
loading_text{
|
14
|
+
padding: .4rem 1rem;
|
15
|
+
display: inline-block;
|
16
|
+
border: .1rem solid #777;
|
17
|
+
margin-top: 8rem;
|
18
|
+
text-align: center;
|
19
|
+
font-size: 1.8rem;
|
20
|
+
line-height: 1;
|
21
|
+
font-family: "Helvetica Neue",Helvetica,sans-serif;
|
22
|
+
color: #fff;
|
23
|
+
background-color:rgba(10,10,10,.8);
|
24
|
+
-webkit-border-radius: .4rem;
|
25
|
+
-webkit-background-clip: padding-box;
|
26
|
+
-webkit-box-shadow: .1rem .1rem .5rem #000;
|
27
|
+
-webkit-user-select: none;
|
28
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
.play {
|
2
|
+
@extend .overlay;
|
3
|
+
|
4
|
+
// ## Play Button
|
5
|
+
//
|
6
|
+
// - the image is centered
|
7
|
+
// - and the height is 40% of the parent elem height
|
8
|
+
// - the width is set by the browser automatically
|
9
|
+
// - because the height is set to a percentage of the parent elem,
|
10
|
+
// the parent elem height must match if you want the play button
|
11
|
+
// size to match.
|
12
|
+
// - NOTE the .play class is added to a parent element of the <img>,
|
13
|
+
// not the <img> itself, because <img>s do not allow psuedo elements.
|
14
|
+
&::after {
|
15
|
+
// This url will not work from an app autogen/ file.
|
16
|
+
background: transparent url(#{$imghost}playbutton@2x.png) no-repeat center;
|
17
|
+
-webkit-background-size: auto 50%;
|
18
|
+
background-size: auto 50%;
|
19
|
+
}
|
20
|
+
// Add a class of `tl, tr, bl, br` to position the play btn in the top left, etc.
|
21
|
+
// The image will also be sized at 30% of the height instead of 40%.
|
22
|
+
&.tl::after, &.tr::after, &.bl::after, &.br::after {
|
23
|
+
-webkit-background-size: auto 30%;
|
24
|
+
background-size: auto 30%;
|
25
|
+
}
|
26
|
+
&.tl::after {
|
27
|
+
background-position: 10% 10%;
|
28
|
+
}
|
29
|
+
&.tr::after {
|
30
|
+
background-position: 90% 10%;
|
31
|
+
}
|
32
|
+
&.bl::after {
|
33
|
+
background-position: 10% 90%;
|
34
|
+
}
|
35
|
+
&.br::after {
|
36
|
+
background-position: 90% 90%;
|
37
|
+
}
|
38
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
/*
|
2
|
+
Copyright (c) 2010, Yahoo! Inc. All rights reserved.
|
3
|
+
Code licensed under the BSD License:
|
4
|
+
http://developer.yahoo.com/yui/license.html
|
5
|
+
version: 3.2.0
|
6
|
+
build: 2676
|
7
|
+
*/
|
8
|
+
html{color:#000;background:#FFF;}
|
9
|
+
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}
|
10
|
+
table{border-collapse:collapse;border-spacing:0;}
|
11
|
+
fieldset,img{border:0;}
|
12
|
+
address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
|
13
|
+
li{list-style:none;}
|
14
|
+
caption,th{text-align:left;}
|
15
|
+
h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}
|
16
|
+
q:before,q:after{content:'';}
|
17
|
+
abbr,acronym{border:0;font-variant:normal;}
|
18
|
+
sup{vertical-align:text-top;}
|
19
|
+
sub{vertical-align:text-bottom;}
|
20
|
+
input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}
|
21
|
+
input,textarea,select{*font-size:100%;}
|
22
|
+
legend{color:#000;}
|
23
|
+
|
24
|
+
/* MODIFICATIONS */
|
25
|
+
item,news,summaries,summary,tabs,tab_content {
|
26
|
+
display: block;
|
27
|
+
}
|
28
|
+
a {
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
strong,b {
|
32
|
+
font-weight: bold;
|
33
|
+
}
|
@@ -0,0 +1,121 @@
|
|
1
|
+
.base_table {
|
2
|
+
width: 100%;
|
3
|
+
margin: 0 auto;
|
4
|
+
background-color: $zebra_strip_odd;
|
5
|
+
border-collapse: collapse;
|
6
|
+
|
7
|
+
&.nested_table {
|
8
|
+
background-color: transparent;
|
9
|
+
}
|
10
|
+
&.wrapper_table {
|
11
|
+
> tbody > tr > td {
|
12
|
+
padding: 0 !important;
|
13
|
+
}
|
14
|
+
}
|
15
|
+
&.centered_table {
|
16
|
+
th, td { text-align: center; }
|
17
|
+
}
|
18
|
+
th, td {
|
19
|
+
&.left {
|
20
|
+
text-align: left;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
th, td {
|
24
|
+
&.stat {
|
25
|
+
width: 3rem;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
tbody tr.hl td {
|
30
|
+
background-color: #ccc !important;
|
31
|
+
}
|
32
|
+
|
33
|
+
td.has_logo { padding-left: .5rem; padding-right: .5rem; }
|
34
|
+
td.has_logo.size_65x65 { width: 6.5rem; }
|
35
|
+
td.has_logo.size_45x45 { width: 4.5rem; }
|
36
|
+
td.has_logo.size_25x25 { width: 2.5rem; }
|
37
|
+
thead th {
|
38
|
+
padding-top: .5rem !important;
|
39
|
+
padding-bottom: .4rem !important;
|
40
|
+
text-align: left;
|
41
|
+
vertical-align: top;
|
42
|
+
font-size: 1.2rem;
|
43
|
+
font-weight: bold;
|
44
|
+
background-color: $zebra_strip_even;
|
45
|
+
}
|
46
|
+
thead.has_gradient th {
|
47
|
+
@extend .primary_gradient;
|
48
|
+
@extend .txt_shadow;
|
49
|
+
color: #fff;
|
50
|
+
}
|
51
|
+
thead.has_dark_bg th {
|
52
|
+
background-color: $txt_gray;
|
53
|
+
color: #fff;
|
54
|
+
text-shadow: $h3_bg;
|
55
|
+
}
|
56
|
+
tbody {
|
57
|
+
tr.winning_team td { font-weight: bold; }
|
58
|
+
tr.winning_team td[rowspan] { font-weight: normal; }
|
59
|
+
td { vertical-align: middle; }
|
60
|
+
p { margin-bottom: .4rem; }
|
61
|
+
}
|
62
|
+
tbody td,
|
63
|
+
thead th {
|
64
|
+
padding: .7rem .2rem .7rem 0;
|
65
|
+
}
|
66
|
+
thead th.upcase {
|
67
|
+
text-transform: uppercase;
|
68
|
+
}
|
69
|
+
tbody td:first-child,
|
70
|
+
thead th:first-child {
|
71
|
+
padding-left: .5rem;
|
72
|
+
}
|
73
|
+
td.goto {
|
74
|
+
background: transparent url(#{$imghost}disclosureIndicator@2x.png) no-repeat center center;
|
75
|
+
-webkit-background-size: .8rem 1.2rem;
|
76
|
+
background-size: .8rem 1.2rem;
|
77
|
+
width: 1.6rem;
|
78
|
+
padding-right: 2.8rem;
|
79
|
+
}
|
80
|
+
td[rowspan] { vertical-align: middle; }
|
81
|
+
tfoot td.spacer {
|
82
|
+
height: .8rem;
|
83
|
+
line-height: 1;
|
84
|
+
background-color: #f2f2f2;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
.base_table.has_stripes {
|
88
|
+
> tbody > tr:nth-of-type(2n) td {
|
89
|
+
background-color: $zebra_strip_even;
|
90
|
+
}
|
91
|
+
> tbody > tr > td {
|
92
|
+
border: .1rem solid #DDD;
|
93
|
+
border-width: .1rem 0;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
//.clip {
|
97
|
+
// text-overflow: ellipsis;
|
98
|
+
// overflow: hidden;
|
99
|
+
// white-space: nowrap;
|
100
|
+
//}
|
101
|
+
body.android .base_table {
|
102
|
+
tbody td,
|
103
|
+
thead th {
|
104
|
+
padding-top: 1rem;
|
105
|
+
padding-bottom: 1rem;
|
106
|
+
}
|
107
|
+
}
|
108
|
+
.base_table {
|
109
|
+
&.scoreboard_table {
|
110
|
+
td,th {
|
111
|
+
text-align: center;
|
112
|
+
}
|
113
|
+
.team_name,.has_logo {
|
114
|
+
text-align: left;
|
115
|
+
}
|
116
|
+
tbody td {
|
117
|
+
padding-top: .4rem;
|
118
|
+
padding-bottom: .4rem;
|
119
|
+
}
|
120
|
+
}
|
121
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
$txt_shadow: .1rem .1rem 0 rgba(10, 10, 10, .2);
|
2
|
+
|
3
|
+
#mock-toolbar-container {
|
4
|
+
-webkit-user-select: none;
|
5
|
+
margin:0;
|
6
|
+
padding:0;
|
7
|
+
width: auto;
|
8
|
+
overflow: hidden;
|
9
|
+
position: relative;
|
10
|
+
}
|
11
|
+
#mock-toolbar {
|
12
|
+
font-weight: bold;
|
13
|
+
background-color: #111;
|
14
|
+
color: white !important;
|
15
|
+
margin: 0;
|
16
|
+
height: 4.4rem;
|
17
|
+
-webkit-box-sizing: border-box;
|
18
|
+
border-collapse: collapse;
|
19
|
+
border:0.1rem solid #111;
|
20
|
+
background: -webkit-gradient(linear,left top,left bottom,color-stop(0, #2a2a2a),color-stop(1, #0a0a0a));
|
21
|
+
}
|
22
|
+
#mock-center {
|
23
|
+
text-align: center;
|
24
|
+
color:#fff;
|
25
|
+
font-size: 1.8rem;
|
26
|
+
font-weight: bold;
|
27
|
+
line-height: 2.3;
|
28
|
+
text-shadow: $txt_shadow;
|
29
|
+
}
|
30
|
+
#mock-left, #mock-right {
|
31
|
+
display: block;
|
32
|
+
position: absolute;
|
33
|
+
top: .3rem;
|
34
|
+
}
|
35
|
+
#mock-left {
|
36
|
+
left: .8rem;
|
37
|
+
}
|
38
|
+
#mock-right {
|
39
|
+
right: .8rem;
|
40
|
+
}
|
41
|
+
action {
|
42
|
+
display: block;
|
43
|
+
float: left;
|
44
|
+
padding: .6rem .8rem;
|
45
|
+
cursor: pointer;
|
46
|
+
border: .1rem solid #111;
|
47
|
+
border-color:#111 #222 #1a1a1a #111;
|
48
|
+
-webkit-border-radius: .4rem;
|
49
|
+
font-size: 1.6rem;
|
50
|
+
background: -webkit-gradient(linear,left top,left bottom,color-stop(0, #555),color-stop(.05, #444),color-stop(1, #111));
|
51
|
+
color: #fff;
|
52
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class ApplicationController < ActionController::Base
|
2
|
+
protect_from_forgery
|
3
|
+
|
4
|
+
helper :all
|
5
|
+
before_filter :translate_entity_keys
|
6
|
+
layout 'application', :only => :load
|
7
|
+
|
8
|
+
caches_page :load, :client_notify
|
9
|
+
|
10
|
+
def load
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
# this should not make it to the server, but if it does, don't throw an error.
|
15
|
+
# this makes Jonas happy.
|
16
|
+
def client_notify
|
17
|
+
render :text => 'say yah to da up, eh?'
|
18
|
+
end
|
19
|
+
|
20
|
+
# http://www.treyconnell.com/automatically-raise-recordnotfound-exceptions-rails/
|
21
|
+
# any time we get a RecordNotFound Exception we're going to rescue from it and throw a 404
|
22
|
+
# rescue_from ActiveRecord::RecordNotFound, :with => :not_found
|
23
|
+
|
24
|
+
# Used to take the user to a 404 page
|
25
|
+
# def throw_404
|
26
|
+
# @browser_title = "Page Not Found"
|
27
|
+
# render_optional_error_file("404")
|
28
|
+
# true
|
29
|
+
# end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
# TSN's entity keys contain periods which confuse Rails' page caching system. These are converted
|
34
|
+
# on the client to underscores and translated here, back into periods, so that they match the
|
35
|
+
# TSN IDs. For example, l_nfl_com-t_9 is converted back to l.nfl.com-t.9.
|
36
|
+
def translate_entity_keys
|
37
|
+
params[:key].gsub!(/_/, ".") if params[:key]
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<loading id="app_load_loader"><loading_text>Loading…</loading_text></loading>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title><%= CONFIG.app_path.downcase %></title>
|
5
|
+
<meta id="meta_viewport" name="viewport" content="user-scalable=no, initial-scale=1, target-densityDpi=device-dpi">
|
6
|
+
<%= stylesheet_link_tag "index" %>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<%= yield %>
|
10
|
+
<loading id="loading" style="display: none;"><loading_text id="loading_text">Loading…</loading_text></loading>
|
11
|
+
<div id="flash" style="display: none;"></div>
|
12
|
+
<div id="buffer" style="display: none;"></div>
|
13
|
+
<div id="tmp" style="display: none;"></div>
|
14
|
+
<%= javascript_include_tag "index" %>
|
15
|
+
<%# Allows us to use mock on test or production without screwing up caching of page. %>
|
16
|
+
<script>
|
17
|
+
if (Application.params.mock) {
|
18
|
+
document.write("<link rel='stylesheet' href='/<%= CONFIG.app_path %>/assets/mock.css'>");
|
19
|
+
document.write("<script src='/<%= CONFIG.app_path %>/assets/core/Mock.js'><\/script>");
|
20
|
+
}
|
21
|
+
</script>
|
22
|
+
<% if request.host == 'localhost' %>
|
23
|
+
<link rel='stylesheet' href='/<%= CONFIG.app_path %>/assets/mock.css'>
|
24
|
+
<script src='/<%= CONFIG.app_path %>/assets/core/Mock.js'></script>
|
25
|
+
<% end %>
|
26
|
+
</body>
|
27
|
+
</html>
|
data/lib/sports_db/version.rb
CHANGED