Merge remote-tracking branch 'origin/peon'
Conflicts: Dockerfile
This commit is contained in:
commit
56a19aa24e
19 changed files with 170 additions and 28833 deletions
.gitignoreDockerfile
endpoints
grunt
static
directives
js
lib
standalonelib
templates
test
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -3,3 +3,7 @@ venv
|
||||||
static/snapshots/
|
static/snapshots/
|
||||||
screenshots/screenshots/
|
screenshots/screenshots/
|
||||||
stack
|
stack
|
||||||
|
grunt/node_modules
|
||||||
|
dist
|
||||||
|
dest
|
||||||
|
node_modules
|
||||||
|
|
13
Dockerfile
13
Dockerfile
|
@ -3,10 +3,17 @@ FROM phusion/baseimage:0.9.9
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
ENV HOME /root
|
ENV HOME /root
|
||||||
|
|
||||||
|
# Needed for this fix: http://stackoverflow.com/a/21715730
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -y software-properties-common python-software-properties
|
||||||
|
RUN add-apt-repository ppa:chris-lea/node.js
|
||||||
|
|
||||||
|
# Install the dependencies.
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
|
|
||||||
# New ubuntu packages should be added as their own apt-get install lines below the existing install commands
|
# New ubuntu packages should be added as their own apt-get install lines below the existing install commands
|
||||||
RUN apt-get install -y git python-virtualenv python-dev phantomjs libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev libevent-dev gdebi-core g++ libmagic1
|
RUN apt-get install -y git python-virtualenv python-dev phantomjs libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev libevent-dev gdebi-core g++ libmagic1 nodejs
|
||||||
|
RUN npm install -g grunt-cli
|
||||||
|
|
||||||
ADD binary_dependencies binary_dependencies
|
ADD binary_dependencies binary_dependencies
|
||||||
RUN gdebi --n binary_dependencies/*.deb
|
RUN gdebi --n binary_dependencies/*.deb
|
||||||
|
@ -23,6 +30,7 @@ ADD conf conf
|
||||||
ADD data data
|
ADD data data
|
||||||
ADD endpoints endpoints
|
ADD endpoints endpoints
|
||||||
ADD features features
|
ADD features features
|
||||||
|
ADD grunt grunt
|
||||||
ADD screenshots screenshots
|
ADD screenshots screenshots
|
||||||
ADD static static
|
ADD static static
|
||||||
ADD storage storage
|
ADD storage storage
|
||||||
|
@ -42,6 +50,9 @@ ADD conf/init/nginx.sh /etc/service/nginx/run
|
||||||
ADD conf/init/diffsworker.sh /etc/service/diffsworker/run
|
ADD conf/init/diffsworker.sh /etc/service/diffsworker/run
|
||||||
ADD conf/init/webhookworker.sh /etc/service/webhookworker/run
|
ADD conf/init/webhookworker.sh /etc/service/webhookworker/run
|
||||||
|
|
||||||
|
RUN cd grunt && npm install
|
||||||
|
RUN cd grunt && grunt
|
||||||
|
|
||||||
RUN TEST=true venv/bin/python -m unittest discover
|
RUN TEST=true venv/bin/python -m unittest discover
|
||||||
|
|
||||||
RUN rm -rf /conf/stack
|
RUN rm -rf /conf/stack
|
||||||
|
|
|
@ -115,14 +115,49 @@ def random_string():
|
||||||
random = SystemRandom()
|
random = SystemRandom()
|
||||||
return ''.join([random.choice(string.ascii_uppercase + string.digits) for _ in range(8)])
|
return ''.join([random.choice(string.ascii_uppercase + string.digits) for _ in range(8)])
|
||||||
|
|
||||||
|
def list_files(path, extension):
|
||||||
|
import os
|
||||||
|
def matches(f):
|
||||||
|
return os.path.splitext(f)[1] == '.' + extension
|
||||||
|
|
||||||
|
def join_path(dp, f):
|
||||||
|
# Remove the static/ prefix. It is added in the template.
|
||||||
|
return os.path.join(dp, f)[len('static/'):]
|
||||||
|
|
||||||
|
filepath = 'static/' + path
|
||||||
|
return [join_path(dp, f) for dp, dn, files in os.walk(filepath) for f in files if matches(f)]
|
||||||
|
|
||||||
def render_page_template(name, **kwargs):
|
def render_page_template(name, **kwargs):
|
||||||
|
if app.config.get('DEBUGGING', False):
|
||||||
|
# If DEBUGGING is enabled, then we load the full set of individual JS and CSS files
|
||||||
|
# from the file system.
|
||||||
|
library_styles = list_files('lib', 'css')
|
||||||
|
main_styles = list_files('css', 'css')
|
||||||
|
library_scripts = list_files('lib', 'js')
|
||||||
|
main_scripts = list_files('js', 'js')
|
||||||
|
cache_buster = 'debugging'
|
||||||
|
|
||||||
|
file_lists = [library_styles, main_styles, library_scripts, main_scripts]
|
||||||
|
for file_list in file_lists:
|
||||||
|
file_list.sort()
|
||||||
|
else:
|
||||||
|
library_styles = []
|
||||||
|
main_styles = ['dist/quay-frontend.css']
|
||||||
|
library_scripts = []
|
||||||
|
main_scripts = ['dist/quay-frontend.min.js']
|
||||||
|
cache_buster = random_string()
|
||||||
|
|
||||||
resp = make_response(render_template(name, route_data=json.dumps(get_route_data()),
|
resp = make_response(render_template(name, route_data=json.dumps(get_route_data()),
|
||||||
|
main_styles=main_styles,
|
||||||
|
library_styles=library_styles,
|
||||||
|
main_scripts=main_scripts,
|
||||||
|
library_scripts=library_scripts,
|
||||||
feature_set=json.dumps(features.get_features()),
|
feature_set=json.dumps(features.get_features()),
|
||||||
config_set=json.dumps(getFrontendVisibleConfig(app.config)),
|
config_set=json.dumps(getFrontendVisibleConfig(app.config)),
|
||||||
mixpanel_key=app.config.get('MIXPANEL_KEY', ''),
|
mixpanel_key=app.config.get('MIXPANEL_KEY', ''),
|
||||||
is_debug=str(app.config.get('DEBUGGING', False)).lower(),
|
is_debug=str(app.config.get('DEBUGGING', False)).lower(),
|
||||||
show_chat=features.OLARK_CHAT,
|
show_chat=features.OLARK_CHAT,
|
||||||
cache_buster=random_string(),
|
cache_buster=cache_buster,
|
||||||
**kwargs))
|
**kwargs))
|
||||||
|
|
||||||
resp.headers['X-FRAME-OPTIONS'] = 'DENY'
|
resp.headers['X-FRAME-OPTIONS'] = 'DENY'
|
||||||
|
|
80
grunt/Gruntfile.js
Normal file
80
grunt/Gruntfile.js
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
|
// Project configuration.
|
||||||
|
grunt.initConfig({
|
||||||
|
pkg: grunt.file.readJSON('package.json'),
|
||||||
|
concat: {
|
||||||
|
options: {
|
||||||
|
process: function(src, filepath) {
|
||||||
|
var unwraps = ['/js/'];
|
||||||
|
|
||||||
|
var shouldWrap = true;
|
||||||
|
for (var i = 0; i < unwraps.length; ++i) {
|
||||||
|
if (filepath.indexOf(unwraps[i]) >= 0) {
|
||||||
|
shouldWrap = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldWrap) {
|
||||||
|
return '// Source: ' + filepath + '\n' +
|
||||||
|
'(function() {\n' + src + '\n})();\n';
|
||||||
|
} else {
|
||||||
|
return '// Source: ' + filepath + '\n' + src + '\n\n';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
src: ['../static/lib/**/*.js', '../static/js/*.js', '../static/dist/template-cache.js'],
|
||||||
|
dest: '../static/dist/<%= pkg.name %>.js'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
cssmin: {
|
||||||
|
'../static/dist/<%= pkg.name %>.css': ['../static/lib/**/*.css', '../static/css/*.css']
|
||||||
|
},
|
||||||
|
|
||||||
|
uglify: {
|
||||||
|
options: {
|
||||||
|
mangle: false,
|
||||||
|
sourceMap: true,
|
||||||
|
sourceMapName: '../static/dist/<%= pkg.name %>.min.map'
|
||||||
|
},
|
||||||
|
js_min: {
|
||||||
|
files: {
|
||||||
|
'../static/dist/<%= pkg.name %>.min.js': ['../static/dist/<%= pkg.name %>.js']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
ngtemplates: {
|
||||||
|
options: {
|
||||||
|
url: function(path) {
|
||||||
|
return '/' + path.substr(3); // remove the ../
|
||||||
|
},
|
||||||
|
htmlmin: {
|
||||||
|
collapseBooleanAttributes: true,
|
||||||
|
collapseWhitespace: true,
|
||||||
|
removeAttributeQuotes: true,
|
||||||
|
removeComments: true, // Only if you don't use comment directives!
|
||||||
|
removeEmptyAttributes: true,
|
||||||
|
removeRedundantAttributes: true,
|
||||||
|
removeScriptTypeAttributes: true,
|
||||||
|
removeStyleLinkTypeAttributes: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
quay: {
|
||||||
|
src: ['../static/partials/*.html', '../static/directives/*.html'],
|
||||||
|
dest: '../static/dist/template-cache.js'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-cssmin');
|
||||||
|
grunt.loadNpmTasks('grunt-angular-templates');
|
||||||
|
|
||||||
|
// Default task(s).
|
||||||
|
grunt.registerTask('default', ['ngtemplates', 'concat', 'cssmin', 'uglify']);
|
||||||
|
};
|
11
grunt/package.json
Normal file
11
grunt/package.json
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"name": "quay-frontend",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"devDependencies": {
|
||||||
|
"grunt": "~0.4.4",
|
||||||
|
"grunt-contrib-concat": "~0.4.0",
|
||||||
|
"grunt-contrib-cssmin": "~0.9.0",
|
||||||
|
"grunt-angular-templates": "~0.5.4",
|
||||||
|
"grunt-contrib-uglify": "~0.4.0"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
<button class="btn btn-success" data-trigger="click"
|
<button class="btn btn-success" data-trigger="click"
|
||||||
data-content-template="static/directives/popup-input-dialog.html"
|
data-content-template="/static/directives/popup-input-dialog.html"
|
||||||
data-placement="bottom" ng-click="popupShown()" bs-popover>
|
data-placement="bottom" ng-click="popupShown()" bs-popover>
|
||||||
<span ng-transclude></span>
|
<span ng-transclude></span>
|
||||||
</button>
|
</button>
|
||||||
|
|
13
static/js/bootstrap.js
vendored
13
static/js/bootstrap.js
vendored
|
@ -1,13 +0,0 @@
|
||||||
$.ajax({
|
|
||||||
type: 'GET',
|
|
||||||
async: false,
|
|
||||||
url: '/api/discovery',
|
|
||||||
success: function(data) {
|
|
||||||
window.__endpoints = data.endpoints;
|
|
||||||
},
|
|
||||||
error: function() {
|
|
||||||
setTimeout(function() {
|
|
||||||
$('#couldnotloadModal').modal({});
|
|
||||||
}, 250);
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -1718,7 +1718,7 @@ LogUsageChart.prototype.draw = function(container, logData, startDate, endDate)
|
||||||
.duration(500)
|
.duration(500)
|
||||||
.call(chart);
|
.call(chart);
|
||||||
|
|
||||||
nv.utils.windoweResize(chart.update);
|
nv.utils.windowResize(chart.update);
|
||||||
|
|
||||||
chart.multibar.dispatch.on('elementClick', function(e) { that.handleElementClicked_(e); });
|
chart.multibar.dispatch.on('elementClick', function(e) { that.handleElementClicked_(e); });
|
||||||
chart.dispatch.on('stateChange', function(e) { that.handleStateChange_(e); });
|
chart.dispatch.on('stateChange', function(e) { that.handleStateChange_(e); });
|
||||||
|
|
3543
static/lib/angular-strap.js
vendored
3543
static/lib/angular-strap.js
vendored
File diff suppressed because it is too large
Load diff
9275
static/lib/d3.js
vendored
9275
static/lib/d3.js
vendored
File diff suppressed because it is too large
Load diff
5
static/lib/d3.v3.min.js
vendored
5
static/lib/d3.v3.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,790 +0,0 @@
|
||||||
/*!
|
|
||||||
* Datepicker for Bootstrap
|
|
||||||
*
|
|
||||||
* Copyright 2012 Stefan Petre
|
|
||||||
* Improvements by Andrew Rowls
|
|
||||||
* Licensed under the Apache License v2.0
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
.datepicker {
|
|
||||||
padding: 4px;
|
|
||||||
border-radius: 4px;
|
|
||||||
direction: ltr;
|
|
||||||
/*.dow {
|
|
||||||
border-top: 1px solid #ddd !important;
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
.datepicker-inline {
|
|
||||||
width: 220px;
|
|
||||||
}
|
|
||||||
.datepicker.datepicker-rtl {
|
|
||||||
direction: rtl;
|
|
||||||
}
|
|
||||||
.datepicker.datepicker-rtl table tr td span {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown {
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown:before {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 7px solid transparent;
|
|
||||||
border-right: 7px solid transparent;
|
|
||||||
border-bottom: 7px solid #ccc;
|
|
||||||
border-top: 0;
|
|
||||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown:after {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 6px solid transparent;
|
|
||||||
border-right: 6px solid transparent;
|
|
||||||
border-bottom: 6px solid #fff;
|
|
||||||
border-top: 0;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown.datepicker-orient-left:before {
|
|
||||||
left: 6px;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown.datepicker-orient-left:after {
|
|
||||||
left: 7px;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown.datepicker-orient-right:before {
|
|
||||||
right: 6px;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown.datepicker-orient-right:after {
|
|
||||||
right: 7px;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown.datepicker-orient-top:before {
|
|
||||||
top: -7px;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown.datepicker-orient-top:after {
|
|
||||||
top: -6px;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown.datepicker-orient-bottom:before {
|
|
||||||
bottom: -7px;
|
|
||||||
border-bottom: 0;
|
|
||||||
border-top: 7px solid #999;
|
|
||||||
}
|
|
||||||
.datepicker-dropdown.datepicker-orient-bottom:after {
|
|
||||||
bottom: -6px;
|
|
||||||
border-bottom: 0;
|
|
||||||
border-top: 6px solid #fff;
|
|
||||||
}
|
|
||||||
.datepicker > div {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.datepicker.days div.datepicker-days {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.datepicker.months div.datepicker-months {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.datepicker.years div.datepicker-years {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.datepicker table {
|
|
||||||
margin: 0;
|
|
||||||
-webkit-touch-callout: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-khtml-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
.datepicker table tr td,
|
|
||||||
.datepicker table tr th {
|
|
||||||
text-align: center;
|
|
||||||
width: 30px;
|
|
||||||
height: 30px;
|
|
||||||
border-radius: 4px;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
.table-striped .datepicker table tr td,
|
|
||||||
.table-striped .datepicker table tr th {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.day:hover,
|
|
||||||
.datepicker table tr td.day.focused {
|
|
||||||
background: #eeeeee;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.old,
|
|
||||||
.datepicker table tr td.new {
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.disabled,
|
|
||||||
.datepicker table tr td.disabled:hover {
|
|
||||||
background: none;
|
|
||||||
color: #999999;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.today,
|
|
||||||
.datepicker table tr td.today:hover,
|
|
||||||
.datepicker table tr td.today.disabled,
|
|
||||||
.datepicker table tr td.today.disabled:hover {
|
|
||||||
color: #000000;
|
|
||||||
background-color: #ffdb99;
|
|
||||||
border-color: #ffb733;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.today:hover,
|
|
||||||
.datepicker table tr td.today:hover:hover,
|
|
||||||
.datepicker table tr td.today.disabled:hover,
|
|
||||||
.datepicker table tr td.today.disabled:hover:hover,
|
|
||||||
.datepicker table tr td.today:focus,
|
|
||||||
.datepicker table tr td.today:hover:focus,
|
|
||||||
.datepicker table tr td.today.disabled:focus,
|
|
||||||
.datepicker table tr td.today.disabled:hover:focus,
|
|
||||||
.datepicker table tr td.today:active,
|
|
||||||
.datepicker table tr td.today:hover:active,
|
|
||||||
.datepicker table tr td.today.disabled:active,
|
|
||||||
.datepicker table tr td.today.disabled:hover:active,
|
|
||||||
.datepicker table tr td.today.active,
|
|
||||||
.datepicker table tr td.today:hover.active,
|
|
||||||
.datepicker table tr td.today.disabled.active,
|
|
||||||
.datepicker table tr td.today.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.today,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.today:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.today.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
|
|
||||||
color: #000000;
|
|
||||||
background-color: #ffcd70;
|
|
||||||
border-color: #f59e00;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.today:active,
|
|
||||||
.datepicker table tr td.today:hover:active,
|
|
||||||
.datepicker table tr td.today.disabled:active,
|
|
||||||
.datepicker table tr td.today.disabled:hover:active,
|
|
||||||
.datepicker table tr td.today.active,
|
|
||||||
.datepicker table tr td.today:hover.active,
|
|
||||||
.datepicker table tr td.today.disabled.active,
|
|
||||||
.datepicker table tr td.today.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.today,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.today:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.today.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.today.disabled,
|
|
||||||
.datepicker table tr td.today:hover.disabled,
|
|
||||||
.datepicker table tr td.today.disabled.disabled,
|
|
||||||
.datepicker table tr td.today.disabled:hover.disabled,
|
|
||||||
.datepicker table tr td.today[disabled],
|
|
||||||
.datepicker table tr td.today:hover[disabled],
|
|
||||||
.datepicker table tr td.today.disabled[disabled],
|
|
||||||
.datepicker table tr td.today.disabled:hover[disabled],
|
|
||||||
fieldset[disabled] .datepicker table tr td.today,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover,
|
|
||||||
.datepicker table tr td.today.disabled:hover,
|
|
||||||
.datepicker table tr td.today:hover.disabled:hover,
|
|
||||||
.datepicker table tr td.today.disabled.disabled:hover,
|
|
||||||
.datepicker table tr td.today.disabled:hover.disabled:hover,
|
|
||||||
.datepicker table tr td.today[disabled]:hover,
|
|
||||||
.datepicker table tr td.today:hover[disabled]:hover,
|
|
||||||
.datepicker table tr td.today.disabled[disabled]:hover,
|
|
||||||
.datepicker table tr td.today.disabled:hover[disabled]:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today:hover:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,
|
|
||||||
.datepicker table tr td.today.disabled:focus,
|
|
||||||
.datepicker table tr td.today:hover.disabled:focus,
|
|
||||||
.datepicker table tr td.today.disabled.disabled:focus,
|
|
||||||
.datepicker table tr td.today.disabled:hover.disabled:focus,
|
|
||||||
.datepicker table tr td.today[disabled]:focus,
|
|
||||||
.datepicker table tr td.today:hover[disabled]:focus,
|
|
||||||
.datepicker table tr td.today.disabled[disabled]:focus,
|
|
||||||
.datepicker table tr td.today.disabled:hover[disabled]:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today:hover:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,
|
|
||||||
.datepicker table tr td.today.disabled:active,
|
|
||||||
.datepicker table tr td.today:hover.disabled:active,
|
|
||||||
.datepicker table tr td.today.disabled.disabled:active,
|
|
||||||
.datepicker table tr td.today.disabled:hover.disabled:active,
|
|
||||||
.datepicker table tr td.today[disabled]:active,
|
|
||||||
.datepicker table tr td.today:hover[disabled]:active,
|
|
||||||
.datepicker table tr td.today.disabled[disabled]:active,
|
|
||||||
.datepicker table tr td.today.disabled:hover[disabled]:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today:hover:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover:active,
|
|
||||||
.datepicker table tr td.today.disabled.active,
|
|
||||||
.datepicker table tr td.today:hover.disabled.active,
|
|
||||||
.datepicker table tr td.today.disabled.disabled.active,
|
|
||||||
.datepicker table tr td.today.disabled:hover.disabled.active,
|
|
||||||
.datepicker table tr td.today[disabled].active,
|
|
||||||
.datepicker table tr td.today:hover[disabled].active,
|
|
||||||
.datepicker table tr td.today.disabled[disabled].active,
|
|
||||||
.datepicker table tr td.today.disabled:hover[disabled].active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today:hover.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.today.disabled:hover.active {
|
|
||||||
background-color: #ffdb99;
|
|
||||||
border-color: #ffb733;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.today:hover:hover {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.today.active:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.range,
|
|
||||||
.datepicker table tr td.range:hover,
|
|
||||||
.datepicker table tr td.range.disabled,
|
|
||||||
.datepicker table tr td.range.disabled:hover {
|
|
||||||
background: #eeeeee;
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.range.today,
|
|
||||||
.datepicker table tr td.range.today:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover {
|
|
||||||
color: #000000;
|
|
||||||
background-color: #f7ca77;
|
|
||||||
border-color: #f1a417;
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.range.today:hover,
|
|
||||||
.datepicker table tr td.range.today:hover:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover:hover,
|
|
||||||
.datepicker table tr td.range.today:focus,
|
|
||||||
.datepicker table tr td.range.today:hover:focus,
|
|
||||||
.datepicker table tr td.range.today.disabled:focus,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover:focus,
|
|
||||||
.datepicker table tr td.range.today:active,
|
|
||||||
.datepicker table tr td.range.today:hover:active,
|
|
||||||
.datepicker table tr td.range.today.disabled:active,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover:active,
|
|
||||||
.datepicker table tr td.range.today.active,
|
|
||||||
.datepicker table tr td.range.today:hover.active,
|
|
||||||
.datepicker table tr td.range.today.disabled.active,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.range.today,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
|
|
||||||
color: #000000;
|
|
||||||
background-color: #f4bb51;
|
|
||||||
border-color: #bf800c;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.range.today:active,
|
|
||||||
.datepicker table tr td.range.today:hover:active,
|
|
||||||
.datepicker table tr td.range.today.disabled:active,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover:active,
|
|
||||||
.datepicker table tr td.range.today.active,
|
|
||||||
.datepicker table tr td.range.today:hover.active,
|
|
||||||
.datepicker table tr td.range.today.disabled.active,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.range.today,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.range.today:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.range.today.disabled,
|
|
||||||
.datepicker table tr td.range.today:hover.disabled,
|
|
||||||
.datepicker table tr td.range.today.disabled.disabled,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover.disabled,
|
|
||||||
.datepicker table tr td.range.today[disabled],
|
|
||||||
.datepicker table tr td.range.today:hover[disabled],
|
|
||||||
.datepicker table tr td.range.today.disabled[disabled],
|
|
||||||
.datepicker table tr td.range.today.disabled:hover[disabled],
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover,
|
|
||||||
.datepicker table tr td.range.today:hover.disabled:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled.disabled:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover.disabled:hover,
|
|
||||||
.datepicker table tr td.range.today[disabled]:hover,
|
|
||||||
.datepicker table tr td.range.today:hover[disabled]:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled[disabled]:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover[disabled]:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today:hover:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,
|
|
||||||
.datepicker table tr td.range.today.disabled:focus,
|
|
||||||
.datepicker table tr td.range.today:hover.disabled:focus,
|
|
||||||
.datepicker table tr td.range.today.disabled.disabled:focus,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover.disabled:focus,
|
|
||||||
.datepicker table tr td.range.today[disabled]:focus,
|
|
||||||
.datepicker table tr td.range.today:hover[disabled]:focus,
|
|
||||||
.datepicker table tr td.range.today.disabled[disabled]:focus,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover[disabled]:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today:hover:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,
|
|
||||||
.datepicker table tr td.range.today.disabled:active,
|
|
||||||
.datepicker table tr td.range.today:hover.disabled:active,
|
|
||||||
.datepicker table tr td.range.today.disabled.disabled:active,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover.disabled:active,
|
|
||||||
.datepicker table tr td.range.today[disabled]:active,
|
|
||||||
.datepicker table tr td.range.today:hover[disabled]:active,
|
|
||||||
.datepicker table tr td.range.today.disabled[disabled]:active,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover[disabled]:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today:hover:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,
|
|
||||||
.datepicker table tr td.range.today.disabled.active,
|
|
||||||
.datepicker table tr td.range.today:hover.disabled.active,
|
|
||||||
.datepicker table tr td.range.today.disabled.disabled.active,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover.disabled.active,
|
|
||||||
.datepicker table tr td.range.today[disabled].active,
|
|
||||||
.datepicker table tr td.range.today:hover[disabled].active,
|
|
||||||
.datepicker table tr td.range.today.disabled[disabled].active,
|
|
||||||
.datepicker table tr td.range.today.disabled:hover[disabled].active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today:hover.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {
|
|
||||||
background-color: #f7ca77;
|
|
||||||
border-color: #f1a417;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.selected,
|
|
||||||
.datepicker table tr td.selected:hover,
|
|
||||||
.datepicker table tr td.selected.disabled,
|
|
||||||
.datepicker table tr td.selected.disabled:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #999999;
|
|
||||||
border-color: #555555;
|
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
||||||
}
|
|
||||||
.datepicker table tr td.selected:hover,
|
|
||||||
.datepicker table tr td.selected:hover:hover,
|
|
||||||
.datepicker table tr td.selected.disabled:hover,
|
|
||||||
.datepicker table tr td.selected.disabled:hover:hover,
|
|
||||||
.datepicker table tr td.selected:focus,
|
|
||||||
.datepicker table tr td.selected:hover:focus,
|
|
||||||
.datepicker table tr td.selected.disabled:focus,
|
|
||||||
.datepicker table tr td.selected.disabled:hover:focus,
|
|
||||||
.datepicker table tr td.selected:active,
|
|
||||||
.datepicker table tr td.selected:hover:active,
|
|
||||||
.datepicker table tr td.selected.disabled:active,
|
|
||||||
.datepicker table tr td.selected.disabled:hover:active,
|
|
||||||
.datepicker table tr td.selected.active,
|
|
||||||
.datepicker table tr td.selected:hover.active,
|
|
||||||
.datepicker table tr td.selected.disabled.active,
|
|
||||||
.datepicker table tr td.selected.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.selected,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.selected:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #858585;
|
|
||||||
border-color: #373737;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.selected:active,
|
|
||||||
.datepicker table tr td.selected:hover:active,
|
|
||||||
.datepicker table tr td.selected.disabled:active,
|
|
||||||
.datepicker table tr td.selected.disabled:hover:active,
|
|
||||||
.datepicker table tr td.selected.active,
|
|
||||||
.datepicker table tr td.selected:hover.active,
|
|
||||||
.datepicker table tr td.selected.disabled.active,
|
|
||||||
.datepicker table tr td.selected.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.selected,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.selected:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.selected.disabled,
|
|
||||||
.datepicker table tr td.selected:hover.disabled,
|
|
||||||
.datepicker table tr td.selected.disabled.disabled,
|
|
||||||
.datepicker table tr td.selected.disabled:hover.disabled,
|
|
||||||
.datepicker table tr td.selected[disabled],
|
|
||||||
.datepicker table tr td.selected:hover[disabled],
|
|
||||||
.datepicker table tr td.selected.disabled[disabled],
|
|
||||||
.datepicker table tr td.selected.disabled:hover[disabled],
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
|
|
||||||
.datepicker table tr td.selected.disabled:hover,
|
|
||||||
.datepicker table tr td.selected:hover.disabled:hover,
|
|
||||||
.datepicker table tr td.selected.disabled.disabled:hover,
|
|
||||||
.datepicker table tr td.selected.disabled:hover.disabled:hover,
|
|
||||||
.datepicker table tr td.selected[disabled]:hover,
|
|
||||||
.datepicker table tr td.selected:hover[disabled]:hover,
|
|
||||||
.datepicker table tr td.selected.disabled[disabled]:hover,
|
|
||||||
.datepicker table tr td.selected.disabled:hover[disabled]:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected:hover:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,
|
|
||||||
.datepicker table tr td.selected.disabled:focus,
|
|
||||||
.datepicker table tr td.selected:hover.disabled:focus,
|
|
||||||
.datepicker table tr td.selected.disabled.disabled:focus,
|
|
||||||
.datepicker table tr td.selected.disabled:hover.disabled:focus,
|
|
||||||
.datepicker table tr td.selected[disabled]:focus,
|
|
||||||
.datepicker table tr td.selected:hover[disabled]:focus,
|
|
||||||
.datepicker table tr td.selected.disabled[disabled]:focus,
|
|
||||||
.datepicker table tr td.selected.disabled:hover[disabled]:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected:hover:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,
|
|
||||||
.datepicker table tr td.selected.disabled:active,
|
|
||||||
.datepicker table tr td.selected:hover.disabled:active,
|
|
||||||
.datepicker table tr td.selected.disabled.disabled:active,
|
|
||||||
.datepicker table tr td.selected.disabled:hover.disabled:active,
|
|
||||||
.datepicker table tr td.selected[disabled]:active,
|
|
||||||
.datepicker table tr td.selected:hover[disabled]:active,
|
|
||||||
.datepicker table tr td.selected.disabled[disabled]:active,
|
|
||||||
.datepicker table tr td.selected.disabled:hover[disabled]:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected:hover:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,
|
|
||||||
.datepicker table tr td.selected.disabled.active,
|
|
||||||
.datepicker table tr td.selected:hover.disabled.active,
|
|
||||||
.datepicker table tr td.selected.disabled.disabled.active,
|
|
||||||
.datepicker table tr td.selected.disabled:hover.disabled.active,
|
|
||||||
.datepicker table tr td.selected[disabled].active,
|
|
||||||
.datepicker table tr td.selected:hover[disabled].active,
|
|
||||||
.datepicker table tr td.selected.disabled[disabled].active,
|
|
||||||
.datepicker table tr td.selected.disabled:hover[disabled].active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected:hover.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {
|
|
||||||
background-color: #999999;
|
|
||||||
border-color: #555555;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.active,
|
|
||||||
.datepicker table tr td.active:hover,
|
|
||||||
.datepicker table tr td.active.disabled,
|
|
||||||
.datepicker table tr td.active.disabled:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #428bca;
|
|
||||||
border-color: #357ebd;
|
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
||||||
}
|
|
||||||
.datepicker table tr td.active:hover,
|
|
||||||
.datepicker table tr td.active:hover:hover,
|
|
||||||
.datepicker table tr td.active.disabled:hover,
|
|
||||||
.datepicker table tr td.active.disabled:hover:hover,
|
|
||||||
.datepicker table tr td.active:focus,
|
|
||||||
.datepicker table tr td.active:hover:focus,
|
|
||||||
.datepicker table tr td.active.disabled:focus,
|
|
||||||
.datepicker table tr td.active.disabled:hover:focus,
|
|
||||||
.datepicker table tr td.active:active,
|
|
||||||
.datepicker table tr td.active:hover:active,
|
|
||||||
.datepicker table tr td.active.disabled:active,
|
|
||||||
.datepicker table tr td.active.disabled:hover:active,
|
|
||||||
.datepicker table tr td.active.active,
|
|
||||||
.datepicker table tr td.active:hover.active,
|
|
||||||
.datepicker table tr td.active.disabled.active,
|
|
||||||
.datepicker table tr td.active.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.active:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.active.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #3276b1;
|
|
||||||
border-color: #285e8e;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.active:active,
|
|
||||||
.datepicker table tr td.active:hover:active,
|
|
||||||
.datepicker table tr td.active.disabled:active,
|
|
||||||
.datepicker table tr td.active.disabled:hover:active,
|
|
||||||
.datepicker table tr td.active.active,
|
|
||||||
.datepicker table tr td.active:hover.active,
|
|
||||||
.datepicker table tr td.active.disabled.active,
|
|
||||||
.datepicker table tr td.active.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.active:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.active.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.datepicker table tr td.active.disabled,
|
|
||||||
.datepicker table tr td.active:hover.disabled,
|
|
||||||
.datepicker table tr td.active.disabled.disabled,
|
|
||||||
.datepicker table tr td.active.disabled:hover.disabled,
|
|
||||||
.datepicker table tr td.active[disabled],
|
|
||||||
.datepicker table tr td.active:hover[disabled],
|
|
||||||
.datepicker table tr td.active.disabled[disabled],
|
|
||||||
.datepicker table tr td.active.disabled:hover[disabled],
|
|
||||||
fieldset[disabled] .datepicker table tr td.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover,
|
|
||||||
.datepicker table tr td.active.disabled:hover,
|
|
||||||
.datepicker table tr td.active:hover.disabled:hover,
|
|
||||||
.datepicker table tr td.active.disabled.disabled:hover,
|
|
||||||
.datepicker table tr td.active.disabled:hover.disabled:hover,
|
|
||||||
.datepicker table tr td.active[disabled]:hover,
|
|
||||||
.datepicker table tr td.active:hover[disabled]:hover,
|
|
||||||
.datepicker table tr td.active.disabled[disabled]:hover,
|
|
||||||
.datepicker table tr td.active.disabled:hover[disabled]:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active:hover:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,
|
|
||||||
.datepicker table tr td.active.disabled:focus,
|
|
||||||
.datepicker table tr td.active:hover.disabled:focus,
|
|
||||||
.datepicker table tr td.active.disabled.disabled:focus,
|
|
||||||
.datepicker table tr td.active.disabled:hover.disabled:focus,
|
|
||||||
.datepicker table tr td.active[disabled]:focus,
|
|
||||||
.datepicker table tr td.active:hover[disabled]:focus,
|
|
||||||
.datepicker table tr td.active.disabled[disabled]:focus,
|
|
||||||
.datepicker table tr td.active.disabled:hover[disabled]:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active:hover:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,
|
|
||||||
.datepicker table tr td.active.disabled:active,
|
|
||||||
.datepicker table tr td.active:hover.disabled:active,
|
|
||||||
.datepicker table tr td.active.disabled.disabled:active,
|
|
||||||
.datepicker table tr td.active.disabled:hover.disabled:active,
|
|
||||||
.datepicker table tr td.active[disabled]:active,
|
|
||||||
.datepicker table tr td.active:hover[disabled]:active,
|
|
||||||
.datepicker table tr td.active.disabled[disabled]:active,
|
|
||||||
.datepicker table tr td.active.disabled:hover[disabled]:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active:hover:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover:active,
|
|
||||||
.datepicker table tr td.active.disabled.active,
|
|
||||||
.datepicker table tr td.active:hover.disabled.active,
|
|
||||||
.datepicker table tr td.active.disabled.disabled.active,
|
|
||||||
.datepicker table tr td.active.disabled:hover.disabled.active,
|
|
||||||
.datepicker table tr td.active[disabled].active,
|
|
||||||
.datepicker table tr td.active:hover[disabled].active,
|
|
||||||
.datepicker table tr td.active.disabled[disabled].active,
|
|
||||||
.datepicker table tr td.active.disabled:hover[disabled].active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active:hover.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td.active.disabled:hover.active {
|
|
||||||
background-color: #428bca;
|
|
||||||
border-color: #357ebd;
|
|
||||||
}
|
|
||||||
.datepicker table tr td span {
|
|
||||||
display: block;
|
|
||||||
width: 23%;
|
|
||||||
height: 54px;
|
|
||||||
line-height: 54px;
|
|
||||||
float: left;
|
|
||||||
margin: 1%;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.datepicker table tr td span:hover {
|
|
||||||
background: #eeeeee;
|
|
||||||
}
|
|
||||||
.datepicker table tr td span.disabled,
|
|
||||||
.datepicker table tr td span.disabled:hover {
|
|
||||||
background: none;
|
|
||||||
color: #999999;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
.datepicker table tr td span.active,
|
|
||||||
.datepicker table tr td span.active:hover,
|
|
||||||
.datepicker table tr td span.active.disabled,
|
|
||||||
.datepicker table tr td span.active.disabled:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #428bca;
|
|
||||||
border-color: #357ebd;
|
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
||||||
}
|
|
||||||
.datepicker table tr td span.active:hover,
|
|
||||||
.datepicker table tr td span.active:hover:hover,
|
|
||||||
.datepicker table tr td span.active.disabled:hover,
|
|
||||||
.datepicker table tr td span.active.disabled:hover:hover,
|
|
||||||
.datepicker table tr td span.active:focus,
|
|
||||||
.datepicker table tr td span.active:hover:focus,
|
|
||||||
.datepicker table tr td span.active.disabled:focus,
|
|
||||||
.datepicker table tr td span.active.disabled:hover:focus,
|
|
||||||
.datepicker table tr td span.active:active,
|
|
||||||
.datepicker table tr td span.active:hover:active,
|
|
||||||
.datepicker table tr td span.active.disabled:active,
|
|
||||||
.datepicker table tr td span.active.disabled:hover:active,
|
|
||||||
.datepicker table tr td span.active.active,
|
|
||||||
.datepicker table tr td span.active:hover.active,
|
|
||||||
.datepicker table tr td span.active.disabled.active,
|
|
||||||
.datepicker table tr td span.active.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td span.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td span.active:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
background-color: #3276b1;
|
|
||||||
border-color: #285e8e;
|
|
||||||
}
|
|
||||||
.datepicker table tr td span.active:active,
|
|
||||||
.datepicker table tr td span.active:hover:active,
|
|
||||||
.datepicker table tr td span.active.disabled:active,
|
|
||||||
.datepicker table tr td span.active.disabled:hover:active,
|
|
||||||
.datepicker table tr td span.active.active,
|
|
||||||
.datepicker table tr td span.active:hover.active,
|
|
||||||
.datepicker table tr td span.active.disabled.active,
|
|
||||||
.datepicker table tr td span.active.disabled:hover.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td span.active,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td span.active:hover,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled,
|
|
||||||
.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {
|
|
||||||
background-image: none;
|
|
||||||
}
|
|
||||||
.datepicker table tr td span.active.disabled,
|
|
||||||
.datepicker table tr td span.active:hover.disabled,
|
|
||||||
.datepicker table tr td span.active.disabled.disabled,
|
|
||||||
.datepicker table tr td span.active.disabled:hover.disabled,
|
|
||||||
.datepicker table tr td span.active[disabled],
|
|
||||||
.datepicker table tr td span.active:hover[disabled],
|
|
||||||
.datepicker table tr td span.active.disabled[disabled],
|
|
||||||
.datepicker table tr td span.active.disabled:hover[disabled],
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
|
|
||||||
.datepicker table tr td span.active.disabled:hover,
|
|
||||||
.datepicker table tr td span.active:hover.disabled:hover,
|
|
||||||
.datepicker table tr td span.active.disabled.disabled:hover,
|
|
||||||
.datepicker table tr td span.active.disabled:hover.disabled:hover,
|
|
||||||
.datepicker table tr td span.active[disabled]:hover,
|
|
||||||
.datepicker table tr td span.active:hover[disabled]:hover,
|
|
||||||
.datepicker table tr td span.active.disabled[disabled]:hover,
|
|
||||||
.datepicker table tr td span.active.disabled:hover[disabled]:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active:hover:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
|
|
||||||
.datepicker table tr td span.active.disabled:focus,
|
|
||||||
.datepicker table tr td span.active:hover.disabled:focus,
|
|
||||||
.datepicker table tr td span.active.disabled.disabled:focus,
|
|
||||||
.datepicker table tr td span.active.disabled:hover.disabled:focus,
|
|
||||||
.datepicker table tr td span.active[disabled]:focus,
|
|
||||||
.datepicker table tr td span.active:hover[disabled]:focus,
|
|
||||||
.datepicker table tr td span.active.disabled[disabled]:focus,
|
|
||||||
.datepicker table tr td span.active.disabled:hover[disabled]:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active:hover:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
|
|
||||||
.datepicker table tr td span.active.disabled:active,
|
|
||||||
.datepicker table tr td span.active:hover.disabled:active,
|
|
||||||
.datepicker table tr td span.active.disabled.disabled:active,
|
|
||||||
.datepicker table tr td span.active.disabled:hover.disabled:active,
|
|
||||||
.datepicker table tr td span.active[disabled]:active,
|
|
||||||
.datepicker table tr td span.active:hover[disabled]:active,
|
|
||||||
.datepicker table tr td span.active.disabled[disabled]:active,
|
|
||||||
.datepicker table tr td span.active.disabled:hover[disabled]:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active:hover:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled:active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,
|
|
||||||
.datepicker table tr td span.active.disabled.active,
|
|
||||||
.datepicker table tr td span.active:hover.disabled.active,
|
|
||||||
.datepicker table tr td span.active.disabled.disabled.active,
|
|
||||||
.datepicker table tr td span.active.disabled:hover.disabled.active,
|
|
||||||
.datepicker table tr td span.active[disabled].active,
|
|
||||||
.datepicker table tr td span.active:hover[disabled].active,
|
|
||||||
.datepicker table tr td span.active.disabled[disabled].active,
|
|
||||||
.datepicker table tr td span.active.disabled:hover[disabled].active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active:hover.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled.active,
|
|
||||||
fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {
|
|
||||||
background-color: #428bca;
|
|
||||||
border-color: #357ebd;
|
|
||||||
}
|
|
||||||
.datepicker table tr td span.old,
|
|
||||||
.datepicker table tr td span.new {
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
.datepicker th.datepicker-switch {
|
|
||||||
width: 145px;
|
|
||||||
}
|
|
||||||
.datepicker thead tr:first-child th,
|
|
||||||
.datepicker tfoot tr th {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.datepicker thead tr:first-child th:hover,
|
|
||||||
.datepicker tfoot tr th:hover {
|
|
||||||
background: #eeeeee;
|
|
||||||
}
|
|
||||||
.datepicker .cw {
|
|
||||||
font-size: 10px;
|
|
||||||
width: 12px;
|
|
||||||
padding: 0 2px 0 5px;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
.datepicker thead tr:first-child th.cw {
|
|
||||||
cursor: default;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
.input-group.date .input-group-addon i {
|
|
||||||
cursor: pointer;
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
.input-daterange input {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.input-daterange input:first-child {
|
|
||||||
border-radius: 3px 0 0 3px;
|
|
||||||
}
|
|
||||||
.input-daterange input:last-child {
|
|
||||||
border-radius: 0 3px 3px 0;
|
|
||||||
}
|
|
||||||
.input-daterange .input-group-addon {
|
|
||||||
width: auto;
|
|
||||||
min-width: 16px;
|
|
||||||
padding: 4px 5px;
|
|
||||||
font-weight: normal;
|
|
||||||
line-height: 1.428571429;
|
|
||||||
text-align: center;
|
|
||||||
text-shadow: 0 1px 0 #fff;
|
|
||||||
vertical-align: middle;
|
|
||||||
background-color: #eeeeee;
|
|
||||||
border: solid #cccccc;
|
|
||||||
border-width: 1px 0;
|
|
||||||
margin-left: -5px;
|
|
||||||
margin-right: -5px;
|
|
||||||
}
|
|
||||||
.datepicker.dropdown-menu {
|
|
||||||
position: absolute;
|
|
||||||
top: 100%;
|
|
||||||
left: 0;
|
|
||||||
z-index: 1000;
|
|
||||||
float: left;
|
|
||||||
display: none;
|
|
||||||
min-width: 160px;
|
|
||||||
list-style: none;
|
|
||||||
background-color: #ffffff;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
|
||||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
|
||||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
|
||||||
-webkit-background-clip: padding-box;
|
|
||||||
-moz-background-clip: padding;
|
|
||||||
background-clip: padding-box;
|
|
||||||
*border-right-width: 2px;
|
|
||||||
*border-bottom-width: 2px;
|
|
||||||
color: #333333;
|
|
||||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
||||||
font-size: 13px;
|
|
||||||
line-height: 1.428571429;
|
|
||||||
}
|
|
||||||
.datepicker.dropdown-menu th,
|
|
||||||
.datepicker.dropdown-menu td {
|
|
||||||
padding: 4px 5px;
|
|
||||||
}
|
|
|
@ -1,793 +0,0 @@
|
||||||
/**
|
|
||||||
* Overscroll v1.7.3
|
|
||||||
* A jQuery Plugin that emulates the iPhone scrolling experience in a browser.
|
|
||||||
* http://azoffdesign.com/overscroll
|
|
||||||
*
|
|
||||||
* Intended for use with the latest jQuery
|
|
||||||
* http://code.jquery.com/jquery-latest.js
|
|
||||||
*
|
|
||||||
* Copyright 2013, Jonathan Azoff
|
|
||||||
* Licensed under the MIT license.
|
|
||||||
* https://github.com/azoff/overscroll/blob/master/mit.license
|
|
||||||
*
|
|
||||||
* For API documentation, see the README file
|
|
||||||
* http://azof.fr/pYCzuM
|
|
||||||
*
|
|
||||||
* Date: Tuesday, March 18th 2013
|
|
||||||
*/
|
|
||||||
(function(global, dom, browser, math, wait, cancel, namespace, $, none){
|
|
||||||
|
|
||||||
// We want to run this plug-in in strict-mode
|
|
||||||
// so that we may benefit from its optimizations
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// The key used to bind-instance specific data to an object
|
|
||||||
var datakey = 'overscroll';
|
|
||||||
|
|
||||||
// create <body> node if there's not one present (e.g., for test runners)
|
|
||||||
if (dom.body === null) {
|
|
||||||
dom.documentElement.appendChild(
|
|
||||||
dom.createElement('body')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// quick fix for IE 8 and below since getComputedStyle() is not supported
|
|
||||||
// TODO: find a better solution
|
|
||||||
if (!global.getComputedStyle) {
|
|
||||||
global.getComputedStyle = function (el, pseudo) {
|
|
||||||
this.el = el;
|
|
||||||
this.getPropertyValue = function (prop) {
|
|
||||||
var re = /(\-([a-z]){1})/g;
|
|
||||||
if (prop == 'float') prop = 'styleFloat';
|
|
||||||
if (re.test(prop)) {
|
|
||||||
prop = prop.replace(re, function () {
|
|
||||||
return arguments[2].toUpperCase();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return el.currentStyle[prop] ? el.currentStyle[prop] : null;
|
|
||||||
};
|
|
||||||
return this;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// runs feature detection for overscroll
|
|
||||||
var compat = {
|
|
||||||
animate: (function(){
|
|
||||||
var fn = global.requestAnimationFrame ||
|
|
||||||
global.webkitRequestAnimationFrame ||
|
|
||||||
global.mozRequestAnimationFrame ||
|
|
||||||
global.oRequestAnimationFrame ||
|
|
||||||
global.msRequestAnimationFrame ||
|
|
||||||
function(callback) { wait(callback, 1000/60); };
|
|
||||||
return function(callback) {
|
|
||||||
fn.call(global, callback);
|
|
||||||
};
|
|
||||||
})(),
|
|
||||||
overflowScrolling: (function(){
|
|
||||||
var style = '';
|
|
||||||
var div = dom.createElement('div');
|
|
||||||
var prefixes = ['webkit', 'moz', 'o', 'ms'];
|
|
||||||
dom.body.appendChild(div);
|
|
||||||
$.each(prefixes, function(i, prefix){
|
|
||||||
div.style[prefix + 'OverflowScrolling'] = 'touch';
|
|
||||||
});
|
|
||||||
div.style.overflowScrolling = 'touch';
|
|
||||||
var computedStyle = global.getComputedStyle(div);
|
|
||||||
if (!!computedStyle.overflowScrolling) {
|
|
||||||
style = 'overflow-scrolling';
|
|
||||||
} else {
|
|
||||||
$.each(prefixes, function(i, prefix){
|
|
||||||
if (!!computedStyle[prefix + 'OverflowScrolling']) {
|
|
||||||
style = '-' + prefix + '-overflow-scrolling';
|
|
||||||
}
|
|
||||||
return !style;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
div.parentNode.removeChild(div);
|
|
||||||
return style;
|
|
||||||
})(),
|
|
||||||
cursor: (function() {
|
|
||||||
var div = dom.createElement('div');
|
|
||||||
var prefixes = ['webkit', 'moz'];
|
|
||||||
var gmail = 'https://mail.google.com/mail/images/2/';
|
|
||||||
var style = {
|
|
||||||
grab: 'url('+gmail+'openhand.cur), move',
|
|
||||||
grabbing: 'url('+gmail+'closedhand.cur), move'
|
|
||||||
};
|
|
||||||
dom.body.appendChild(div);
|
|
||||||
$.each(prefixes, function(i, prefix){
|
|
||||||
var found, cursor = '-' + prefix + '-grab';
|
|
||||||
div.style.cursor = cursor;
|
|
||||||
var computedStyle = global.getComputedStyle(div);
|
|
||||||
found = computedStyle.cursor === cursor;
|
|
||||||
if (found) {
|
|
||||||
style = {
|
|
||||||
grab: '-' + prefix + '-grab',
|
|
||||||
grabbing: '-' + prefix + '-grabbing'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return !found;
|
|
||||||
});
|
|
||||||
div.parentNode.removeChild(div);
|
|
||||||
return style;
|
|
||||||
})()
|
|
||||||
};
|
|
||||||
|
|
||||||
// These are all the events that could possibly
|
|
||||||
// be used by the plug-in
|
|
||||||
var events = {
|
|
||||||
drag: 'mousemove touchmove',
|
|
||||||
end: 'mouseup mouseleave click touchend touchcancel',
|
|
||||||
hover: 'mouseenter mouseleave',
|
|
||||||
ignored: 'select dragstart drag',
|
|
||||||
scroll: 'scroll',
|
|
||||||
start: 'mousedown touchstart',
|
|
||||||
wheel: 'mousewheel DOMMouseScroll'
|
|
||||||
};
|
|
||||||
|
|
||||||
// These settings are used to tweak drift settings
|
|
||||||
// for the plug-in
|
|
||||||
var settings = {
|
|
||||||
captureThreshold: 3,
|
|
||||||
driftDecay: 1.1,
|
|
||||||
driftSequences: 22,
|
|
||||||
driftTimeout: 100,
|
|
||||||
scrollDelta: 15,
|
|
||||||
thumbOpacity: 0.7,
|
|
||||||
thumbThickness: 6,
|
|
||||||
thumbTimeout: 400,
|
|
||||||
wheelDelta: 20,
|
|
||||||
wheelTicks: 120
|
|
||||||
};
|
|
||||||
|
|
||||||
// These defaults are used to complement any options
|
|
||||||
// passed into the plug-in entry point
|
|
||||||
var defaults = {
|
|
||||||
cancelOn: 'select,input,textarea',
|
|
||||||
direction: 'multi',
|
|
||||||
dragHold: false,
|
|
||||||
hoverThumbs: false,
|
|
||||||
scrollDelta: settings.scrollDelta,
|
|
||||||
showThumbs: true,
|
|
||||||
persistThumbs: false,
|
|
||||||
captureWheel: true,
|
|
||||||
wheelDelta: settings.wheelDelta,
|
|
||||||
wheelDirection: 'multi',
|
|
||||||
zIndex: 999,
|
|
||||||
ignoreSizing: false
|
|
||||||
};
|
|
||||||
|
|
||||||
// Triggers a DOM event on the overscrolled element.
|
|
||||||
// All events are namespaced under the overscroll name
|
|
||||||
function triggerEvent(event, target) {
|
|
||||||
target.trigger('overscroll:' + event);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Utility function to return a timestamp
|
|
||||||
function time() {
|
|
||||||
return (new Date()).getTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Captures the position from an event, modifies the properties
|
|
||||||
// of the second argument to persist the position, and then
|
|
||||||
// returns the modified object
|
|
||||||
function capturePosition(event, position, index) {
|
|
||||||
position.x = event.pageX;
|
|
||||||
position.y = event.pageY;
|
|
||||||
position.time = time();
|
|
||||||
position.index = index;
|
|
||||||
return position;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used to move the thumbs around an overscrolled element
|
|
||||||
function moveThumbs(thumbs, sizing, left, top) {
|
|
||||||
|
|
||||||
var ml, mt;
|
|
||||||
|
|
||||||
if (thumbs && thumbs.added) {
|
|
||||||
if (thumbs.horizontal) {
|
|
||||||
ml = left * (1 + sizing.container.width / sizing.container.scrollWidth);
|
|
||||||
mt = top + sizing.thumbs.horizontal.top;
|
|
||||||
thumbs.horizontal.css('margin', mt + 'px 0 0 ' + ml + 'px');
|
|
||||||
}
|
|
||||||
if (thumbs.vertical) {
|
|
||||||
ml = left + sizing.thumbs.vertical.left;
|
|
||||||
mt = top * (1 + sizing.container.height / sizing.container.scrollHeight);
|
|
||||||
thumbs.vertical.css('margin', mt + 'px 0 0 ' + ml + 'px');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used to toggle the thumbs on and off
|
|
||||||
// of an overscrolled element
|
|
||||||
function toggleThumbs(thumbs, options, dragging) {
|
|
||||||
if (thumbs && thumbs.added && !options.persistThumbs) {
|
|
||||||
if (dragging) {
|
|
||||||
if (thumbs.vertical) {
|
|
||||||
thumbs.vertical.stop(true, true).fadeTo('fast', settings.thumbOpacity);
|
|
||||||
}
|
|
||||||
if (thumbs.horizontal) {
|
|
||||||
thumbs.horizontal.stop(true, true).fadeTo('fast', settings.thumbOpacity);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (thumbs.vertical) {
|
|
||||||
thumbs.vertical.fadeTo('fast', 0);
|
|
||||||
}
|
|
||||||
if (thumbs.horizontal) {
|
|
||||||
thumbs.horizontal.fadeTo('fast', 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Defers click event listeners to after a mouseup event.
|
|
||||||
// Used to avoid unintentional clicks
|
|
||||||
function deferClick(target) {
|
|
||||||
var clicks, key = 'events';
|
|
||||||
var events = $._data ? $._data(target[0], key) : target.data(key);
|
|
||||||
if (events && events.click) {
|
|
||||||
clicks = events.click.slice();
|
|
||||||
target.off('click').one('click', function(){
|
|
||||||
$.each(clicks, function(i, click){
|
|
||||||
target.click(click);
|
|
||||||
}); return false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Toggles thumbs on hover. This event is only triggered
|
|
||||||
// if the hoverThumbs option is set
|
|
||||||
function hover(event) {
|
|
||||||
var data = event.data,
|
|
||||||
thumbs = data.thumbs,
|
|
||||||
options = data.options,
|
|
||||||
dragging = event.type === 'mouseenter';
|
|
||||||
toggleThumbs(thumbs, options, dragging);
|
|
||||||
}
|
|
||||||
|
|
||||||
// This function is only ever used when the overscrolled element
|
|
||||||
// scrolled outside of the scope of this plugin.
|
|
||||||
function scroll(event) {
|
|
||||||
var data = event.data;
|
|
||||||
if (!data.flags.dragged) {
|
|
||||||
/*jshint validthis:true */
|
|
||||||
moveThumbs(data.thumbs, data.sizing, this.scrollLeft, this.scrollTop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// handles mouse wheel scroll events
|
|
||||||
function wheel(event) {
|
|
||||||
|
|
||||||
// prevent any default wheel behavior
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
var data = event.data,
|
|
||||||
options = data.options,
|
|
||||||
sizing = data.sizing,
|
|
||||||
thumbs = data.thumbs,
|
|
||||||
dwheel = data.wheel,
|
|
||||||
flags = data.flags,
|
|
||||||
original = event.originalEvent,
|
|
||||||
delta = 0, deltaX = 0, deltaY = 0;
|
|
||||||
|
|
||||||
// stop any drifts
|
|
||||||
flags.drifting = false;
|
|
||||||
|
|
||||||
// normalize the wheel ticks
|
|
||||||
if (original.detail) {
|
|
||||||
delta = -original.detail;
|
|
||||||
if (original.detailX) {
|
|
||||||
deltaX = -original.detailX;
|
|
||||||
}
|
|
||||||
if (original.detailY) {
|
|
||||||
deltaY = -original.detailY;
|
|
||||||
}
|
|
||||||
} else if (original.wheelDelta) {
|
|
||||||
delta = original.wheelDelta / settings.wheelTicks;
|
|
||||||
if (original.wheelDeltaX) {
|
|
||||||
deltaX = original.wheelDeltaX / settings.wheelTicks;
|
|
||||||
}
|
|
||||||
if (original.wheelDeltaY) {
|
|
||||||
deltaY = original.wheelDeltaY / settings.wheelTicks;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// apply a pixel delta to each tick
|
|
||||||
delta *= options.wheelDelta;
|
|
||||||
deltaX *= options.wheelDelta;
|
|
||||||
deltaY *= options.wheelDelta;
|
|
||||||
|
|
||||||
// initialize flags if this is the first tick
|
|
||||||
if (!dwheel) {
|
|
||||||
data.target.data(datakey).dragging = flags.dragging = true;
|
|
||||||
data.wheel = dwheel = { timeout: null };
|
|
||||||
toggleThumbs(thumbs, options, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// actually modify scroll offsets
|
|
||||||
if (options.wheelDirection === 'vertical'){
|
|
||||||
/*jshint validthis:true */
|
|
||||||
this.scrollTop -= delta;
|
|
||||||
} else if ( options.wheelDirection === 'horizontal') {
|
|
||||||
this.scrollLeft -= delta;
|
|
||||||
} else {
|
|
||||||
this.scrollLeft -= deltaX;
|
|
||||||
this.scrollTop -= deltaY || delta;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dwheel.timeout) { cancel(dwheel.timeout); }
|
|
||||||
|
|
||||||
moveThumbs(thumbs, sizing, this.scrollLeft, this.scrollTop);
|
|
||||||
|
|
||||||
dwheel.timeout = wait(function() {
|
|
||||||
data.target.data(datakey).dragging = flags.dragging = false;
|
|
||||||
toggleThumbs(thumbs, options, data.wheel = null);
|
|
||||||
}, settings.thumbTimeout);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// updates the current scroll offset during a mouse move
|
|
||||||
function drag(event) {
|
|
||||||
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
var data = event.data,
|
|
||||||
touches = event.originalEvent.touches,
|
|
||||||
options = data.options,
|
|
||||||
sizing = data.sizing,
|
|
||||||
thumbs = data.thumbs,
|
|
||||||
position = data.position,
|
|
||||||
flags = data.flags,
|
|
||||||
target = data.target.get(0);
|
|
||||||
|
|
||||||
|
|
||||||
// correct page coordinates for touch devices
|
|
||||||
if (touches && touches.length) {
|
|
||||||
event = touches[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!flags.dragged) {
|
|
||||||
toggleThumbs(thumbs, options, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
flags.dragged = true;
|
|
||||||
|
|
||||||
if (options.direction !== 'vertical') {
|
|
||||||
target.scrollLeft -= (event.pageX - position.x);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.options.direction !== 'horizontal') {
|
|
||||||
target.scrollTop -= (event.pageY - position.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
capturePosition(event, data.position);
|
|
||||||
|
|
||||||
if (--data.capture.index <= 0) {
|
|
||||||
data.target.data(datakey).dragging = flags.dragging = true;
|
|
||||||
capturePosition(event, data.capture, settings.captureThreshold);
|
|
||||||
}
|
|
||||||
|
|
||||||
moveThumbs(thumbs, sizing, target.scrollLeft, target.scrollTop);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// sends the overscrolled element into a drift
|
|
||||||
function drift(target, event, callback) {
|
|
||||||
|
|
||||||
var data = event.data, dx, dy, xMod, yMod,
|
|
||||||
capture = data.capture,
|
|
||||||
options = data.options,
|
|
||||||
sizing = data.sizing,
|
|
||||||
thumbs = data.thumbs,
|
|
||||||
elapsed = time() - capture.time,
|
|
||||||
scrollLeft = target.scrollLeft,
|
|
||||||
scrollTop = target.scrollTop,
|
|
||||||
decay = settings.driftDecay;
|
|
||||||
|
|
||||||
// only drift if enough time has passed since
|
|
||||||
// the last capture event
|
|
||||||
if (elapsed > settings.driftTimeout) {
|
|
||||||
callback(data); return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// determine offset between last capture and current time
|
|
||||||
dx = options.scrollDelta * (event.pageX - capture.x);
|
|
||||||
dy = options.scrollDelta * (event.pageY - capture.y);
|
|
||||||
|
|
||||||
// update target scroll offsets
|
|
||||||
if (options.direction !== 'vertical') {
|
|
||||||
scrollLeft -= dx;
|
|
||||||
} if (options.direction !== 'horizontal') {
|
|
||||||
scrollTop -= dy;
|
|
||||||
}
|
|
||||||
|
|
||||||
// split the distance to travel into a set of sequences
|
|
||||||
xMod = dx / settings.driftSequences;
|
|
||||||
yMod = dy / settings.driftSequences;
|
|
||||||
|
|
||||||
triggerEvent('driftstart', data.target);
|
|
||||||
|
|
||||||
data.drifting = true;
|
|
||||||
|
|
||||||
// animate the drift sequence
|
|
||||||
compat.animate(function render() {
|
|
||||||
if (data.drifting) {
|
|
||||||
var min = 1, max = -1;
|
|
||||||
data.drifting = false;
|
|
||||||
if (yMod > min && target.scrollTop > scrollTop || yMod < max && target.scrollTop < scrollTop) {
|
|
||||||
data.drifting = true;
|
|
||||||
target.scrollTop -= yMod;
|
|
||||||
yMod /= decay;
|
|
||||||
}
|
|
||||||
if (xMod > min && target.scrollLeft > scrollLeft || xMod < max && target.scrollLeft < scrollLeft) {
|
|
||||||
data.drifting = true;
|
|
||||||
target.scrollLeft -= xMod;
|
|
||||||
xMod /= decay;
|
|
||||||
}
|
|
||||||
moveThumbs(thumbs, sizing, target.scrollLeft, target.scrollTop);
|
|
||||||
compat.animate(render);
|
|
||||||
} else {
|
|
||||||
triggerEvent('driftend', data.target);
|
|
||||||
callback(data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// starts the drag operation and binds the mouse move handler
|
|
||||||
function start(event) {
|
|
||||||
|
|
||||||
var data = event.data,
|
|
||||||
touches = event.originalEvent.touches,
|
|
||||||
target = data.target,
|
|
||||||
dstart = data.start = $(event.target),
|
|
||||||
flags = data.flags;
|
|
||||||
|
|
||||||
// stop any drifts
|
|
||||||
flags.drifting = false;
|
|
||||||
|
|
||||||
// only start drag if the user has not explictly banned it.
|
|
||||||
if (dstart.size() && !dstart.is(data.options.cancelOn)) {
|
|
||||||
|
|
||||||
// without this the simple "click" event won't be recognized on touch clients
|
|
||||||
if (!touches) { event.preventDefault(); }
|
|
||||||
|
|
||||||
if (!compat.overflowScrolling) {
|
|
||||||
target.css('cursor', compat.cursor.grabbing);
|
|
||||||
target.data(datakey).dragging = flags.dragging = flags.dragged = false;
|
|
||||||
|
|
||||||
// apply the drag listeners to the doc or target
|
|
||||||
if(data.options.dragHold) {
|
|
||||||
$(document).on(events.drag, data, drag);
|
|
||||||
} else {
|
|
||||||
target.on(events.drag, data, drag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data.position = capturePosition(event, {});
|
|
||||||
data.capture = capturePosition(event, {}, settings.captureThreshold);
|
|
||||||
triggerEvent('dragstart', target);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ends the drag operation and unbinds the mouse move handler
|
|
||||||
function stop(event) {
|
|
||||||
|
|
||||||
var data = event.data,
|
|
||||||
target = data.target,
|
|
||||||
options = data.options,
|
|
||||||
flags = data.flags,
|
|
||||||
thumbs = data.thumbs,
|
|
||||||
|
|
||||||
// hides the thumbs after the animation is done
|
|
||||||
done = function () {
|
|
||||||
if (thumbs && !options.hoverThumbs) {
|
|
||||||
toggleThumbs(thumbs, options, false);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// remove drag listeners from doc or target
|
|
||||||
if(options.dragHold) {
|
|
||||||
$(document).unbind(events.drag, drag);
|
|
||||||
} else {
|
|
||||||
target.unbind(events.drag, drag);
|
|
||||||
}
|
|
||||||
|
|
||||||
// only fire events and drift if we started with a
|
|
||||||
// valid position
|
|
||||||
if (data.position) {
|
|
||||||
|
|
||||||
triggerEvent('dragend', target);
|
|
||||||
|
|
||||||
// only drift if a drag passed our threshold
|
|
||||||
if (flags.dragging && !compat.overflowScrolling) {
|
|
||||||
drift(target.get(0), event, done);
|
|
||||||
} else {
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// only if we moved, and the mouse down is the same as
|
|
||||||
// the mouse up target do we defer the event
|
|
||||||
if (flags.dragging && !compat.overflowScrolling && data.start && data.start.is(event.target)) {
|
|
||||||
deferClick(data.start);
|
|
||||||
}
|
|
||||||
|
|
||||||
// clear all internal flags and settings
|
|
||||||
target.data(datakey).dragging =
|
|
||||||
data.start =
|
|
||||||
data.capture =
|
|
||||||
data.position =
|
|
||||||
flags.dragged =
|
|
||||||
flags.dragging = false;
|
|
||||||
|
|
||||||
// set the cursor back to normal
|
|
||||||
target.css('cursor', compat.cursor.grab);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensures that a full set of options are provided
|
|
||||||
// for the plug-in. Also does some validation
|
|
||||||
function getOptions(options) {
|
|
||||||
|
|
||||||
// fill in missing values with defaults
|
|
||||||
options = $.extend({}, defaults, options);
|
|
||||||
|
|
||||||
// check for inconsistent directional restrictions
|
|
||||||
if (options.direction !== 'multi' && options.direction !== options.wheelDirection) {
|
|
||||||
options.wheelDirection = options.direction;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ensure positive values for deltas
|
|
||||||
options.scrollDelta = math.abs(parseFloat(options.scrollDelta));
|
|
||||||
options.wheelDelta = math.abs(parseFloat(options.wheelDelta));
|
|
||||||
|
|
||||||
// fix values for scroll offset
|
|
||||||
options.scrollLeft = options.scrollLeft === none ? null : math.abs(parseFloat(options.scrollLeft));
|
|
||||||
options.scrollTop = options.scrollTop === none ? null : math.abs(parseFloat(options.scrollTop));
|
|
||||||
|
|
||||||
return options;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns the sizing information (bounding box) for the
|
|
||||||
// target DOM element
|
|
||||||
function getSizing(target) {
|
|
||||||
|
|
||||||
var $target = $(target),
|
|
||||||
width = $target.width(),
|
|
||||||
height = $target.height(),
|
|
||||||
scrollWidth = width >= target.scrollWidth ? width : target.scrollWidth,
|
|
||||||
scrollHeight = height >= target.scrollHeight ? height : target.scrollHeight,
|
|
||||||
hasScroll = scrollWidth > width || scrollHeight > height;
|
|
||||||
|
|
||||||
return {
|
|
||||||
valid: hasScroll,
|
|
||||||
container: {
|
|
||||||
width: width,
|
|
||||||
height: height,
|
|
||||||
scrollWidth: scrollWidth,
|
|
||||||
scrollHeight: scrollHeight
|
|
||||||
},
|
|
||||||
thumbs: {
|
|
||||||
horizontal: {
|
|
||||||
width: width * width / scrollWidth,
|
|
||||||
height: settings.thumbThickness,
|
|
||||||
corner: settings.thumbThickness / 2,
|
|
||||||
left: 0,
|
|
||||||
top: height - settings.thumbThickness
|
|
||||||
},
|
|
||||||
vertical: {
|
|
||||||
width: settings.thumbThickness,
|
|
||||||
height: height * height / scrollHeight,
|
|
||||||
corner: settings.thumbThickness / 2,
|
|
||||||
left: width - settings.thumbThickness,
|
|
||||||
top: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attempts to get (or implicitly creates) the
|
|
||||||
// remover function for the target passed
|
|
||||||
// in as an argument
|
|
||||||
function getRemover(target, orCreate) {
|
|
||||||
|
|
||||||
var $target = $(target), thumbs,
|
|
||||||
data = $target.data(datakey) || {},
|
|
||||||
style = $target.attr('style'),
|
|
||||||
fallback = orCreate ? function () {
|
|
||||||
|
|
||||||
data = $target.data(datakey);
|
|
||||||
thumbs = data.thumbs;
|
|
||||||
|
|
||||||
// restore original styles (if any)
|
|
||||||
if (style) {
|
|
||||||
$target.attr('style', style);
|
|
||||||
} else {
|
|
||||||
$target.removeAttr('style');
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove any created thumbs
|
|
||||||
if (thumbs) {
|
|
||||||
if (thumbs.horizontal) { thumbs.horizontal.remove(); }
|
|
||||||
if (thumbs.vertical) { thumbs.vertical.remove(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove any bound overscroll events and data
|
|
||||||
$target
|
|
||||||
.removeData(datakey)
|
|
||||||
.off(events.wheel, wheel)
|
|
||||||
.off(events.start, start)
|
|
||||||
.off(events.end, stop)
|
|
||||||
.off(events.ignored, ignore);
|
|
||||||
|
|
||||||
} : $.noop;
|
|
||||||
|
|
||||||
return $.isFunction(data.remover) ? data.remover : fallback;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Genterates CSS specific to a particular thumb.
|
|
||||||
// It requires sizing data and options
|
|
||||||
function getThumbCss(size, options) {
|
|
||||||
return {
|
|
||||||
position: 'absolute',
|
|
||||||
opacity: options.persistThumbs ? settings.thumbOpacity : 0,
|
|
||||||
'background-color': 'black',
|
|
||||||
width: size.width + 'px',
|
|
||||||
height: size.height + 'px',
|
|
||||||
'border-radius': size.corner + 'px',
|
|
||||||
'margin': size.top + 'px 0 0 ' + size.left + 'px',
|
|
||||||
'z-index': options.zIndex
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creates the DOM elements used as "thumbs" within
|
|
||||||
// the target container.
|
|
||||||
function createThumbs(target, sizing, options) {
|
|
||||||
|
|
||||||
var div = '<div/>',
|
|
||||||
thumbs = {},
|
|
||||||
css = false;
|
|
||||||
|
|
||||||
if (sizing.container.scrollWidth > 0 && options.direction !== 'vertical') {
|
|
||||||
css = getThumbCss(sizing.thumbs.horizontal, options);
|
|
||||||
thumbs.horizontal = $(div).css(css).prependTo(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sizing.container.scrollHeight > 0 && options.direction !== 'horizontal') {
|
|
||||||
css = getThumbCss(sizing.thumbs.vertical, options);
|
|
||||||
thumbs.vertical = $(div).css(css).prependTo(target);
|
|
||||||
}
|
|
||||||
|
|
||||||
thumbs.added = !!css;
|
|
||||||
|
|
||||||
return thumbs;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ignores events on the overscroll element
|
|
||||||
function ignore(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
// This function takes a jQuery element, some
|
|
||||||
// (optional) options, and sets up event metadata
|
|
||||||
// for each instance the plug-in affects
|
|
||||||
function setup(target, options) {
|
|
||||||
|
|
||||||
// create initial data properties for this instance
|
|
||||||
options = getOptions(options);
|
|
||||||
var sizing = getSizing(target),
|
|
||||||
thumbs, data = {
|
|
||||||
options: options, sizing: sizing,
|
|
||||||
flags: { dragging: false },
|
|
||||||
remover: getRemover(target, true)
|
|
||||||
};
|
|
||||||
|
|
||||||
// only apply handlers if the overscrolled element
|
|
||||||
// actually has an area to scroll
|
|
||||||
if (sizing.valid || options.ignoreSizing) {
|
|
||||||
// provide a circular-reference, enable events, and
|
|
||||||
// apply any required CSS
|
|
||||||
data.target = target = $(target).css({
|
|
||||||
position: 'relative',
|
|
||||||
cursor: compat.cursor.grab
|
|
||||||
}).on(events.start, data, start)
|
|
||||||
.on(events.end, data, stop)
|
|
||||||
.on(events.ignored, data, ignore);
|
|
||||||
|
|
||||||
// apply the stop listeners for drag end
|
|
||||||
if(options.dragHold) {
|
|
||||||
$(document).on(events.end, data, stop);
|
|
||||||
} else {
|
|
||||||
data.target.on(events.end, data, stop);
|
|
||||||
}
|
|
||||||
|
|
||||||
// apply any user-provided scroll offsets
|
|
||||||
if (options.scrollLeft !== null) {
|
|
||||||
target.scrollLeft(options.scrollLeft);
|
|
||||||
} if (options.scrollTop !== null) {
|
|
||||||
target.scrollTop(options.scrollTop);
|
|
||||||
}
|
|
||||||
|
|
||||||
// use native oversroll, if it exists
|
|
||||||
if (compat.overflowScrolling) {
|
|
||||||
target.css(compat.overflowScrolling, 'touch');
|
|
||||||
} else {
|
|
||||||
target.on(events.scroll, data, scroll);
|
|
||||||
}
|
|
||||||
|
|
||||||
// check to see if the user would like mousewheel support
|
|
||||||
if (options.captureWheel) {
|
|
||||||
target.on(events.wheel, data, wheel);
|
|
||||||
}
|
|
||||||
|
|
||||||
// add thumbs and listeners (if we're showing them)
|
|
||||||
if (options.showThumbs) {
|
|
||||||
if (compat.overflowScrolling) {
|
|
||||||
target.css('overflow', 'scroll');
|
|
||||||
} else {
|
|
||||||
target.css('overflow', 'hidden');
|
|
||||||
data.thumbs = thumbs = createThumbs(target, sizing, options);
|
|
||||||
if (thumbs.added) {
|
|
||||||
moveThumbs(thumbs, sizing, target.scrollLeft(), target.scrollTop());
|
|
||||||
if (options.hoverThumbs) {
|
|
||||||
target.on(events.hover, data, hover);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
target.css('overflow', 'hidden');
|
|
||||||
}
|
|
||||||
|
|
||||||
target.data(datakey, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removes any event listeners and other instance-specific
|
|
||||||
// data from the target. It attempts to leave the target
|
|
||||||
// at the state it found it.
|
|
||||||
function teardown(target) {
|
|
||||||
getRemover(target)();
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is the entry-point for enabling the plug-in;
|
|
||||||
// You can find it's exposure point at the end
|
|
||||||
// of this closure
|
|
||||||
function overscroll(options) {
|
|
||||||
/*jshint validthis:true */
|
|
||||||
return this.removeOverscroll().each(function() {
|
|
||||||
setup(this, options);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is the entry-point for disabling the plug-in;
|
|
||||||
// You can find it's exposure point at the end
|
|
||||||
// of this closure
|
|
||||||
function removeOverscroll() {
|
|
||||||
/*jshint validthis:true */
|
|
||||||
return this.each(function () {
|
|
||||||
teardown(this);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extend overscroll to expose settings to the user
|
|
||||||
overscroll.settings = settings;
|
|
||||||
|
|
||||||
// Extend jQuery's prototype to expose the plug-in.
|
|
||||||
// If the supports native overflowScrolling, overscroll will not
|
|
||||||
// attempt to override the browser's built in support
|
|
||||||
$.extend(namespace, {
|
|
||||||
overscroll: overscroll,
|
|
||||||
removeOverscroll: removeOverscroll
|
|
||||||
});
|
|
||||||
|
|
||||||
})(window, document, navigator, Math, setTimeout, clearTimeout, jQuery.fn, jQuery);
|
|
14346
static/lib/nv.d3.js
14346
static/lib/nv.d3.js
File diff suppressed because it is too large
Load diff
|
@ -4,6 +4,8 @@ if (typeof exports === "object" && typeof require === "function") // we're in a
|
||||||
Markdown = exports;
|
Markdown = exports;
|
||||||
else
|
else
|
||||||
Markdown = {};
|
Markdown = {};
|
||||||
|
|
||||||
|
window.Markdown = Markdown;
|
||||||
|
|
||||||
// The following text is included for historical reasons, but should
|
// The following text is included for historical reasons, but should
|
||||||
// be taken with a pinch of salt; it's not all true anymore.
|
// be taken with a pinch of salt; it's not all true anymore.
|
||||||
|
|
|
@ -11,16 +11,10 @@
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/lib/loading-bar.css">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
|
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
|
||||||
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.no-icons.min.css">
|
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.no-icons.min.css">
|
||||||
<link href='//fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
|
<link href='//fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/css/quay.css?v={{ cache_buster }}">
|
|
||||||
<link rel="stylesheet" href="/static/lib/angular-motion.min.css">
|
|
||||||
<link rel="stylesheet" href="/static/lib/bootstrap-additions.min.css">
|
|
||||||
|
|
||||||
<!-- Icons -->
|
<!-- Icons -->
|
||||||
<link rel="shortcut icon" href="/static/img/favicon.ico" type="image/x-icon" />
|
<link rel="shortcut icon" href="/static/img/favicon.ico" type="image/x-icon" />
|
||||||
<link rel="apple-touch-icon" href="/static/img/apple-touch-icon.png" />
|
<link rel="apple-touch-icon" href="/static/img/apple-touch-icon.png" />
|
||||||
|
@ -34,6 +28,14 @@
|
||||||
<link rel="apple-touch-icon" sizes="152x152" href="/static/img/apple-touch-icon-152x152.png" />
|
<link rel="apple-touch-icon" sizes="152x152" href="/static/img/apple-touch-icon-152x152.png" />
|
||||||
<!-- /Icons -->
|
<!-- /Icons -->
|
||||||
|
|
||||||
|
{% for style_path in main_styles %}
|
||||||
|
<link rel="stylesheet" href="/static/{{ style_path }}?v={{ cache_buster }}" type="text/css">
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for style_path in library_styles %}
|
||||||
|
<link rel="stylesheet" href="/static/{{ style_path }}?v={{ cache_buster }}" type="text/css">
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
{% block added_stylesheets %}
|
{% block added_stylesheets %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -53,38 +55,21 @@
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular-sanitize.min.js"></script>
|
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular-sanitize.min.js"></script>
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular-animate.min.js"></script>
|
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular-animate.min.js"></script>
|
||||||
|
|
||||||
<script src="//cdn.jsdelivr.net/g/bootbox@4.1.0,underscorejs@1.5.2,restangular@1.2.0"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.2.0/js/bootstrap-datepicker.min.js"></script>
|
||||||
<!-- ,typeahead.js@0.10.1 -->
|
|
||||||
|
|
||||||
<script src="/static/lib/loading-bar.js"></script>
|
<script src="//cdn.jsdelivr.net/g/bootbox@4.1.0,underscorejs@1.5.2,restangular@1.2.0,d3js@3.3.3,momentjs"></script>
|
||||||
<script src="/static/lib/angular-strap.js"></script>
|
|
||||||
<script src="/static/lib/angular-strap.tpl.min.js"></script>
|
|
||||||
|
|
||||||
{% if mixpanel_key %}
|
{% for script_path in library_scripts %}
|
||||||
<script src="/static/lib/angulartics.js"></script>
|
<script src="/static/{{ script_path }}?v={{ cache_buster }}"></script>
|
||||||
<script src="/static/lib/angulartics-mixpanel.js"></script>
|
{% endfor %}
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<script src="/static/lib/angular-md5.js"></script>
|
|
||||||
<script src="/static/lib/bindonce.min.js"></script>
|
|
||||||
<script src="/static/lib/ansi2html.js"></script>
|
|
||||||
<script src="/static/lib/typeahead.bundle.min.js"></script>
|
|
||||||
|
|
||||||
<script src="/static/lib/angular-moment.min.js"></script>
|
|
||||||
<script src="/static/lib/angular-cookies.min.js"></script>
|
|
||||||
|
|
||||||
<script src="/static/lib/pagedown/Markdown.Converter.js"></script>
|
|
||||||
<script src="/static/lib/pagedown/Markdown.Editor.js"></script>
|
|
||||||
<script src="/static/lib/pagedown/Markdown.Sanitizer.js"></script>
|
|
||||||
|
|
||||||
{% block added_dependencies %}
|
{% block added_dependencies %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
<script src="/static/js/tour.js?v={{ cache_buster }}"></script>
|
{% for script_path in main_scripts %}
|
||||||
<script src="/static/js/app.js?v={{ cache_buster }}"></script>
|
<script src="/static/{{ script_path }}?v={{ cache_buster }}"></script>
|
||||||
<script src="/static/js/controllers.js?v={{ cache_buster }}"></script>
|
{% endfor %}
|
||||||
<script src="/static/js/graphing.js?v={{ cache_buster }}"></script>
|
|
||||||
|
|
||||||
{% if mixpanel_key %}
|
{% if mixpanel_key %}
|
||||||
<!-- start Mixpanel --><script type="text/javascript">
|
<!-- start Mixpanel --><script type="text/javascript">
|
||||||
|
|
|
@ -12,37 +12,9 @@
|
||||||
<meta name="fragment" content="!" />
|
<meta name="fragment" content="!" />
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block added_stylesheets %}
|
|
||||||
<link rel="stylesheet" href="/static/lib/browser-chrome.css">
|
|
||||||
<link rel="stylesheet" href="/static/lib/nv.d3.css">
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block added_dependencies %}
|
|
||||||
<script src="https://checkout.stripe.com/checkout.js"></script>
|
|
||||||
|
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.2.1/moment.min.js"></script>
|
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.2.0/js/bootstrap-datepicker.min.js"></script>
|
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.3.3/d3.min.js"></script>
|
|
||||||
|
|
||||||
<script src="static/lib/nv.d3.min.js"></script>
|
|
||||||
|
|
||||||
<script src="static/lib/ZeroClipboard.min.js"></script>
|
|
||||||
|
|
||||||
<script src="static/lib/d3-tip.js" charset="utf-8"></script>
|
|
||||||
<script src="static/lib/browser-chrome.js"></script>
|
|
||||||
|
|
||||||
<script src="static/lib/jszip.min.js"></script>
|
|
||||||
<script src="static/lib/Blob.js"></script>
|
|
||||||
<script src="static/lib/FileSaver.js"></script>
|
|
||||||
<script src="static/lib/multifile.js"></script>
|
|
||||||
<script src="static/lib/zlib.js"></script>
|
|
||||||
<script src="static/lib/jquery.base64.min.js"></script>
|
|
||||||
<script src="static/lib/jquery.spotlight.js"></script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block body_content %}
|
{% block body_content %}
|
||||||
<!-- Note: Must be in the <body> tag -->
|
<!-- Note: Must be in the <body> tag -->
|
||||||
<script src="static/lib/jquery.overscroll.min.js"></script>
|
<script src="static/standalonelib/jquery.overscroll.min.js"></script>
|
||||||
|
|
||||||
<div ng-view></div>
|
<div ng-view></div>
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,11 @@ from endpoints.api.repository import RepositoryList, RepositoryVisibility, Repos
|
||||||
from endpoints.api.permission import (RepositoryUserPermission, RepositoryTeamPermission,
|
from endpoints.api.permission import (RepositoryUserPermission, RepositoryTeamPermission,
|
||||||
RepositoryTeamPermissionList, RepositoryUserPermissionList)
|
RepositoryTeamPermissionList, RepositoryUserPermissionList)
|
||||||
|
|
||||||
|
try:
|
||||||
app.register_blueprint(api_bp, url_prefix='/api')
|
app.register_blueprint(api_bp, url_prefix='/api')
|
||||||
|
except ValueError:
|
||||||
|
# This blueprint was already registered
|
||||||
|
pass
|
||||||
|
|
||||||
CSRF_TOKEN_KEY = '_csrf_token'
|
CSRF_TOKEN_KEY = '_csrf_token'
|
||||||
CSRF_TOKEN = '123csrfforme'
|
CSRF_TOKEN = '123csrfforme'
|
||||||
|
|
Reference in a new issue