├── .gitignore ├── lib ├── wembley.jpg ├── stade_de_france.jpg ├── jquery-ui │ └── themes │ │ ├── base │ │ ├── images │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ ├── ui-icons_454545_256x240.png │ │ │ ├── ui-icons_888888_256x240.png │ │ │ ├── ui-icons_cd0a0a_256x240.png │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ └── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ ├── jquery.ui.all.css │ │ ├── jquery.ui.base.css │ │ ├── jquery.ui.selectable.css │ │ ├── jquery.ui.progressbar.css │ │ ├── jquery.ui.accordion.css │ │ ├── jquery.ui.slider.css │ │ ├── jquery.ui.resizable.css │ │ ├── jquery.ui.dialog.css │ │ ├── jquery.ui.tabs.css │ │ ├── jquery.ui.core.css │ │ ├── jquery.ui.datepicker.css │ │ └── jquery.ui.theme.css │ │ └── ui-lightness │ │ ├── images │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_228ef1_256x240.png │ │ ├── ui-icons_ef8c08_256x240.png │ │ ├── ui-icons_ffd27a_256x240.png │ │ ├── ui-icons_ffffff_256x240.png │ │ ├── ui-bg_flat_10_000000_40x100.png │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ ├── ui-bg_glass_100_f6f6f6_1x400.png │ │ ├── ui-bg_glass_100_fdf5ce_1x400.png │ │ ├── ui-bg_gloss-wave_35_f6a828_500x100.png │ │ ├── ui-bg_diagonals-thick_18_b81900_40x40.png │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png │ │ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png │ │ └── ui-bg_highlight-soft_75_ffe45c_1x100.png │ │ └── jquery-ui-1.8.16.custom.css ├── jquery.mousewheel.min.js ├── jquery.mousewheel.js └── qunit.css ├── .travis.yml ├── extra-methods ├── farRight │ ├── kinetic.farRight.js │ └── demo.html └── jumpTo │ ├── kinetic.jumpTo.js │ └── demo.html ├── .jshintrc ├── bower.json ├── package.json ├── test ├── selenium │ ├── local.vows.js │ ├── sauce.vows.js │ ├── makeSuite.js │ └── selenium.vows.js ├── test.css ├── specs │ ├── basic.html │ ├── helpers.js │ └── basic.spec.js ├── jquery.html ├── nested.html ├── zepto.html ├── mousewheel.html ├── lotsofelements.html └── ui-draggable.html ├── LICENSE ├── Gruntfile.js ├── demo.html ├── jquery.kinetic.min.js ├── readme.mkd ├── jquery.kinetic.js └── demos └── body-html └── demo.html /.gitignore: -------------------------------------------------------------------------------- 1 | .svn 2 | node_modules 3 | bower_components 4 | -------------------------------------------------------------------------------- /lib/wembley.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/wembley.jpg -------------------------------------------------------------------------------- /lib/stade_de_france.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/stade_de_france.jpg -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.10 4 | before_script: 5 | - npm install -g grunt-cli 6 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-icons_228ef1_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-icons_228ef1_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/download/jquery.kinetic/HEAD/lib/jquery-ui/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png -------------------------------------------------------------------------------- /extra-methods/farRight/kinetic.farRight.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Kinetic method to jump to far right 3 | */ 4 | (function($){ 5 | 6 | $.Kinetic.prototype.farRight = function(options){ 7 | this.scrollLeft = this.scrollWidth; 8 | }; 9 | 10 | }(jQuery)); 11 | -------------------------------------------------------------------------------- /extra-methods/jumpTo/kinetic.jumpTo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Kinetic method to jump to far right 3 | */ 4 | (function($){ 5 | 'use strict'; 6 | 7 | $.Kinetic.prototype.jumpTo = function(options){ 8 | this.stop(); 9 | this.el.scrollLeft = options.x; 10 | this.el.scrollTop = options.y; 11 | }; 12 | 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.all.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI CSS Framework 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming 9 | */ 10 | @import "jquery.ui.base.css"; 11 | @import "jquery.ui.theme.css"; 12 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "curly": true, 3 | "eqeqeq": true, 4 | "immed": true, 5 | "latedef": true, 6 | "newcap": true, 7 | "noarg": true, 8 | "sub": true, 9 | "undef": true, 10 | "boss": true, 11 | "eqnull": true, 12 | "node": true, 13 | "browser": true, 14 | "quotmark": "single", 15 | "camelcase": true, 16 | 17 | "globals": { 18 | "jQuery": true 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.base.css: -------------------------------------------------------------------------------- 1 | @import url("jquery.ui.core.css"); 2 | @import url("jquery.ui.resizable.css"); 3 | @import url("jquery.ui.selectable.css"); 4 | @import url("jquery.ui.accordion.css"); 5 | @import url("jquery.ui.dialog.css"); 6 | @import url("jquery.ui.slider.css"); 7 | @import url("jquery.ui.tabs.css"); 8 | @import url("jquery.ui.datepicker.css"); 9 | @import url("jquery.ui.progressbar.css"); -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.selectable.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI Selectable 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Selectable#theming 9 | */ 10 | .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } 11 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.progressbar.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI Progressbar 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Progressbar#theming 9 | */ 10 | .ui-progressbar { height:2em; text-align: left; } 11 | .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery.kinetic", 3 | "main": "jquery.kinetic.js", 4 | "version": "2.0.1", 5 | "homepage": "http://davetayls.me/jquery.kinetic", 6 | "authors": [ 7 | "davetayls " 8 | ], 9 | "description": "smooth drag scrolling with gradual deceleration to containers", 10 | "keywords": [ 11 | "jquery", 12 | "kinetic", 13 | "touch", 14 | "drag", 15 | "decelerate" 16 | ], 17 | "license": "MIT", 18 | "ignore": [ 19 | "**/.*", 20 | "node_modules", 21 | "bower_components", 22 | "test", 23 | "tests", 24 | "Gruntfile.js" 25 | ], 26 | "dependencies": { 27 | "jquery": ">1.8.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery.kinetic", 3 | "version": "2.0.5", 4 | "description": "adds smooth drag scrolling with gradual deceleration to containers", 5 | "homepage": "http://the-taylors.org/jquery.kinetic", 6 | "author": { 7 | "name": "Dave Taylor" 8 | }, 9 | "license": "MIT", 10 | "devDependencies": { 11 | "grunt": "0.4.x", 12 | "wd": "0.x.x", 13 | "vows": "0.7.x", 14 | "underscore": "1.7.x", 15 | "grunt-vows": "0.4.x", 16 | "grunt-bump": "0.0.x", 17 | "grunt-string-replace": "0.2.x", 18 | "grunt-contrib-jshint": "0.10.x", 19 | "grunt-contrib-qunit": "0.5.x", 20 | "grunt-contrib-uglify": "0.5.x", 21 | "grunt-contrib-watch": "0.6.x" 22 | }, 23 | "scripts": { 24 | "test": "grunt --verbose" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /test/selenium/local.vows.js: -------------------------------------------------------------------------------- 1 | /* 2 | Selenium Vows testing taken from 3 | https://github.com/jlipps/sauce-node-demo 4 | */ 5 | var vows = require('vows'), 6 | _ = require('underscore')._, 7 | makeSuite = require('./makeSuite.js').makeSuite; 8 | 9 | // define different service configurations 10 | 11 | var conf = { 12 | processes: 4, 13 | maxTests: false, 14 | serviceName: 'local', 15 | caps: [ 16 | // {browserName: "chrome", version: '', platform: "MAC", proxy: {proxyType: 'direct'}}, 17 | {browserName: "firefox", version: '', platform: "MAC", proxy: {proxyType: 'direct'}} 18 | ] 19 | }, 20 | batches = makeSuite(conf); 21 | 22 | _.each(batches, function(batch, index) { 23 | vows.describe(conf.serviceName + ": Batch " + index ) 24 | .addBatch(batch) 25 | .export(module); 26 | }); 27 | 28 | -------------------------------------------------------------------------------- /test/test.css: -------------------------------------------------------------------------------- 1 | #container { 2 | margin: 0 auto; 3 | width: 800px; 4 | } 5 | .wrapper { 6 | border: solid 5px #000; 7 | height: 400px; 8 | width: 100%; 9 | overflow: hidden; 10 | } 11 | 12 | .kinetic-moving-up { 13 | border-top-color: green !important; 14 | } 15 | .kinetic-moving-down { 16 | border-bottom-color: green !important; 17 | } 18 | .kinetic-moving-left { 19 | border-left-color: green !important; 20 | } 21 | .kinetic-moving-right { 22 | border-right-color: green !important; 23 | } 24 | 25 | .kinetic-decelerating-up { 26 | border-top-color: red !important; 27 | } 28 | .kinetic-decelerating-down { 29 | border-bottom-color: red !important; 30 | } 31 | .kinetic-decelerating-left { 32 | border-left-color: red !important; 33 | } 34 | .kinetic-decelerating-right { 35 | border-right-color: red !important; 36 | } 37 | 38 | .inner { } 39 | .inner img { 40 | display: block; 41 | width: 2000px; 42 | } 43 | #left, #right { cursor: pointer; } 44 | 45 | -------------------------------------------------------------------------------- /test/specs/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jQuery.kinetic demos 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |
19 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.accordion.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI Accordion 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Accordion#theming 9 | */ 10 | /* IE/Win - Fix animation bug - #4615 */ 11 | .ui-accordion { width: 100%; } 12 | .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 13 | .ui-accordion .ui-accordion-li-fix { display: inline; } 14 | .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 15 | .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } 16 | .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 17 | .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 18 | .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } 19 | .ui-accordion .ui-accordion-content-active { display: block; } 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) <2011> 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is furnished 9 | to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 16 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 17 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 18 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 19 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 | 21 | -------------------------------------------------------------------------------- /lib/jquery.mousewheel.min.js: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net) 2 | * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 3 | * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. 4 | * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. 5 | * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. 6 | * 7 | * Version: 3.0.2 8 | * 9 | * Requires: 1.2.2+ 10 | */ 11 | (function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery); -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.slider.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI Slider 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Slider#theming 9 | */ 10 | /* 11 | .ui-slider { position: relative; text-align: left; } 12 | .ui-slider .ui-slider-handle { position: absolute; z-index: 2; } 13 | .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } 14 | 15 | .ui-slider-horizontal { height: .8em; } 16 | .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 17 | .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 18 | .ui-slider-horizontal .ui-slider-range-min { left: 0; } 19 | .ui-slider-horizontal .ui-slider-range-max { right: 0; } 20 | 21 | .ui-slider-vertical { width: .8em; height: 100px; } 22 | .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 23 | .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 24 | .ui-slider-vertical .ui-slider-range-min { bottom: 0; } 25 | .ui-slider-vertical .ui-slider-range-max { top: 0; }*/ -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.resizable.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI Resizable 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Resizable#theming 9 | */ 10 | .ui-resizable { position: relative;} 11 | .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } 12 | .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 13 | .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } 14 | .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } 15 | .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } 16 | .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } 17 | .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 18 | .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 19 | .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 20 | .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} -------------------------------------------------------------------------------- /test/selenium/sauce.vows.js: -------------------------------------------------------------------------------- 1 | /* 2 | Selenium Vows testing taken from 3 | https://github.com/jlipps/sauce-node-demo 4 | */ 5 | var vows = require('vows'), 6 | _ = require('underscore')._, 7 | makeSuite = require('./makeSuite.js').makeSuite; 8 | 9 | var conf = { 10 | host: "ondemand.saucelabs.com", 11 | port: 80, 12 | username: process.env.SAUCE_USERNAME, 13 | accessKey: process.env.SAUCE_ACCESS_KEY, 14 | processes: 2, 15 | maxTests: false, 16 | serviceName: 'sauce', 17 | caps: [ 18 | // pre-prep mobile stuff 19 | // {browserName: "ipad", version: '5.1', platform: "Mac 10.8", deviceOrientation: "landscape", proxy: {proxyType: 'direct'}}, 20 | // {browserName: "android", version: '4', platform: "linux", deviceType: "tablet", proxy: {proxyType: 'direct'}} 21 | 22 | // Standard browsers 23 | // {browserName: "internet explorer", version: '9', platform: "Windows 2008", proxy: {proxyType: 'direct'}} 24 | // {browserName: "chrome", version: '', platform: "VISTA", proxy: {proxyType: 'direct'}}, 25 | {browserName: "firefox", version: '17', platform: "Windows 2012", proxy: {proxyType: 'direct'}} 26 | ] 27 | }, 28 | batches = makeSuite(conf); 29 | 30 | _.each(batches, function(batch, index) { 31 | vows.describe(conf.serviceName + ": Batch " + index ) 32 | .addBatch(batch) 33 | .export(module); 34 | }); 35 | 36 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.dialog.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI Dialog 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Dialog#theming 9 | */ 10 | .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } 11 | .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } 12 | .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 13 | .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 14 | .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 15 | .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 16 | .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 17 | .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 18 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } 19 | .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } 20 | .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 21 | .ui-draggable .ui-dialog-titlebar { cursor: move; } 22 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.tabs.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI Tabs 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Tabs#theming 9 | */ 10 | .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 11 | .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } 12 | .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } 13 | .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } 14 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } 15 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 16 | .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 17 | .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } 18 | .ui-tabs .ui-tabs-hide { display: none !important; } 19 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.core.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI CSS Framework 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming/API 9 | */ 10 | 11 | /* Layout helpers 12 | ----------------------------------*/ 13 | .ui-helper-hidden { display: none; } 14 | .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } 15 | .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 16 | .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } 17 | .ui-helper-clearfix { display: inline-block; } 18 | /* required comment for clearfix to work in Opera \*/ 19 | * html .ui-helper-clearfix { height:1%; } 20 | .ui-helper-clearfix { display:block; } 21 | /* end clearfix */ 22 | .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 23 | 24 | 25 | /* Interaction Cues 26 | ----------------------------------*/ 27 | .ui-state-disabled { cursor: default !important; } 28 | 29 | 30 | /* Icons 31 | ----------------------------------*/ 32 | 33 | /* states and images */ 34 | .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 35 | 36 | 37 | /* Misc visuals 38 | ----------------------------------*/ 39 | 40 | /* Overlays */ 41 | .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 42 | -------------------------------------------------------------------------------- /test/specs/helpers.js: -------------------------------------------------------------------------------- 1 | /*global $ */ 2 | /** 3 | * Checks to see if the event listener is attached to the element 4 | * @param {[type]} $el The element to check on 5 | * @param {[type]} eventListener The listener function 6 | * @return {Boolean} 7 | */ 8 | function hasEventAttached($el, eventListener){ 9 | var events = $el.data('events'), 10 | found = false; 11 | if (events){ 12 | for (var key in events){ 13 | if (events.hasOwnProperty(key)){ 14 | $(events[key]).each(function(){ 15 | if (this === eventListener){ 16 | found = true; 17 | return false; 18 | } 19 | }); 20 | } 21 | } 22 | } 23 | return found; 24 | } 25 | 26 | function dragOver($el, target, from, to){ 27 | var mdEvent = $.Event('mousedown'), 28 | muEvent = $.Event('mouseup'), 29 | mmEvent = $.Event('mousemove'), 30 | tsEvent = $.Event('touchstart'), 31 | teEvent = $.Event('touchend'), 32 | tmEvent = $.Event('touchmove'); 33 | 34 | // mouse 35 | $.extend(mdEvent, { 36 | target: target, 37 | which: 1, 38 | clientX: from[0], 39 | clientY: from[1] 40 | }); 41 | $.extend(mmEvent, { 42 | target: target, 43 | which: 1, 44 | clientX: to[0], 45 | clientY: to[1] 46 | }); 47 | 48 | // touch 49 | $.extend(tsEvent, { 50 | target: target, 51 | originalEvent: { 52 | touches: [ 53 | { 54 | clientX: from[0], 55 | clientY: from[1] 56 | } 57 | ] 58 | } 59 | }); 60 | $.extend(tmEvent, { 61 | target: target, 62 | originalEvent: { 63 | touches: [ 64 | { 65 | clientX: to[0], 66 | clientY: to[0] 67 | } 68 | ] 69 | } 70 | }); 71 | 72 | if ($.support.touch){ 73 | $el 74 | .trigger(tsEvent) 75 | .trigger(tmEvent) 76 | .trigger(teEvent); 77 | } else { 78 | $el 79 | .trigger(mdEvent) 80 | .trigger(mmEvent) 81 | .trigger(muEvent); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /test/selenium/makeSuite.js: -------------------------------------------------------------------------------- 1 | var vows = require('vows'), 2 | _ = require('underscore')._, 3 | RawTests = require('./selenium.vows'); 4 | 5 | // makeSuite takes a configuration and makes a batch of tests, splitting 6 | // up tests according to 'conf.processes' 7 | exports.makeSuite = function(conf) { 8 | 9 | var getCapText = function(conf, cap) { 10 | return " (" + cap.browserName+"_"+cap.version+"_"+cap.platform+"_"+conf.serviceName+")"; 11 | }; 12 | 13 | // gets a version of the testbase relativized to a particular config 14 | // and capability request 15 | var getTestsForCap = function(cap) { 16 | var capText = getCapText(conf, cap); 17 | var allTests = RawTests.allTests(conf, cap, capText); 18 | var capTests = {}; 19 | // Replace the name of each test with a relativized name showing 20 | // which conf and caps we are using 21 | _.each(allTests, function(test, testName) { 22 | capTests[testName+capText] = test; 23 | }); 24 | return capTests; 25 | }; 26 | 27 | // Gather tests for all capabilities requests into one big dict 28 | var allTests = {}; 29 | _.each(conf.caps, function(cap) { 30 | var tests = getTestsForCap(cap); 31 | _.each(tests, function(test, testName) { 32 | allTests[testName] = test; 33 | }); 34 | }); 35 | 36 | // Split tests into batches according to how parallelized we want to be 37 | var numTests = _.size(allTests); 38 | if (conf.maxTests && conf.maxTests < numTests) { 39 | numTests = conf.maxTests; 40 | } 41 | var numBatches = Math.ceil(numTests / conf.processes); 42 | 43 | if (numBatches >= 1) { 44 | var batches = {}; 45 | var testsPerBatch = numBatches * conf.processes; 46 | var i = 0; 47 | var total = 0; 48 | _.each(allTests, function(test, testName) { 49 | if (!conf.maxTests || total < conf.maxTests) { 50 | if (typeof batches[i] === 'undefined') { 51 | batches[i] = {}; 52 | } 53 | batches[i][testName] = test; 54 | if (i < numBatches - 1) { 55 | i++; 56 | } else { 57 | i = 0; 58 | } 59 | total++; 60 | } 61 | }); 62 | return batches; 63 | } 64 | }; 65 | 66 | -------------------------------------------------------------------------------- /lib/jquery.mousewheel.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) 2 | * Licensed under the MIT License (LICENSE.txt). 3 | * 4 | * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. 5 | * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. 6 | * Thanks to: Seamus Leahy for adding deltaX and deltaY 7 | * 8 | * Version: 3.0.4 9 | * 10 | * Requires: 1.2.2+ 11 | */ 12 | 13 | (function($) { 14 | 15 | var types = ['DOMMouseScroll', 'mousewheel']; 16 | 17 | $.event.special.mousewheel = { 18 | setup: function() { 19 | if ( this.addEventListener ) { 20 | for ( var i=types.length; i; ) { 21 | this.addEventListener( types[--i], handler, false ); 22 | } 23 | } else { 24 | this.onmousewheel = handler; 25 | } 26 | }, 27 | 28 | teardown: function() { 29 | if ( this.removeEventListener ) { 30 | for ( var i=types.length; i; ) { 31 | this.removeEventListener( types[--i], handler, false ); 32 | } 33 | } else { 34 | this.onmousewheel = null; 35 | } 36 | } 37 | }; 38 | 39 | $.fn.extend({ 40 | mousewheel: function(fn) { 41 | return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); 42 | }, 43 | 44 | unmousewheel: function(fn) { 45 | return this.unbind("mousewheel", fn); 46 | } 47 | }); 48 | 49 | 50 | function handler(event) { 51 | var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; 52 | event = $.event.fix(orgEvent); 53 | event.type = "mousewheel"; 54 | 55 | // Old school scrollwheel delta 56 | if ( event.wheelDelta ) { delta = event.wheelDelta/120; } 57 | if ( event.detail ) { delta = -event.detail/3; } 58 | 59 | // New school multidimensional scroll (touchpads) deltas 60 | deltaY = delta; 61 | 62 | // Gecko 63 | if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { 64 | deltaY = 0; 65 | deltaX = -1*delta; 66 | } 67 | 68 | // Webkit 69 | if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; } 70 | if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; } 71 | 72 | // Add event and delta to the front of the arguments 73 | args.unshift(event, delta, deltaX, deltaY); 74 | 75 | return $.event.handle.apply(this, args); 76 | } 77 | 78 | })(jQuery); -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | /*global module:false*/ 2 | module.exports = function(grunt) { 3 | 4 | // Project configuration. 5 | grunt.initConfig({ 6 | pkg: grunt.file.readJSON('package.json'), 7 | server: { 8 | port: 8989, 9 | base: '.' 10 | }, 11 | qunit: { 12 | all: ['test/specs/**/*.html'] 13 | }, 14 | uglify: { 15 | dist: { 16 | files: { 17 | 'jquery.kinetic.min.js': ['jquery.kinetic.js'] 18 | }, 19 | options: { 20 | banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + 21 | '<%= grunt.template.today("yyyy-mm-dd") %> <%= pkg.homepage %> ' + 22 | '\n * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + 23 | ' Licensed <%= pkg.license %> */\n' 24 | } 25 | } 26 | }, 27 | watch: { 28 | all: { 29 | files: [ 30 | 'jquery.kinetic.js', 31 | 'test/specs/*.js' 32 | ], 33 | tasks: ['jshint', 'qunit'] 34 | } 35 | }, 36 | jshint: { 37 | files: ['grunt.js', 'jquery.kinetic.js'], 38 | options: { 39 | jshintrc: '.jshintrc' 40 | } 41 | }, 42 | vows: { 43 | local: { 44 | files: ["test/local.vows.js"], 45 | // String {spec|json|dot-matrix|xunit|tap} 46 | // defaults to "dot-matrix" 47 | reporter: "spec" 48 | }, 49 | sauce: { 50 | files: ["test/sauce.vows.js"], 51 | // String {spec|json|dot-matrix|xunit|tap} 52 | // defaults to "dot-matrix" 53 | reporter: "spec" 54 | } 55 | }, 56 | "string-replace": { 57 | version: { 58 | files: { 59 | "jquery.kinetic.js": "jquery.kinetic.js" 60 | }, 61 | options: { 62 | replacements: [{ 63 | pattern: /jQuery\.kinetic v\d\.\d\.\d/g, 64 | replacement: "jQuery.kinetic v<%= pkg.version %>" 65 | }] 66 | } 67 | } 68 | }, 69 | bump: { 70 | options: { 71 | push: false, 72 | tagName: '%VERSION%', 73 | commitFiles: ['.'] 74 | } 75 | } 76 | }); 77 | 78 | // Load tasks 79 | grunt.loadNpmTasks('grunt-contrib-watch'); 80 | grunt.loadNpmTasks('grunt-contrib-jshint'); 81 | grunt.loadNpmTasks('grunt-contrib-qunit'); 82 | grunt.loadNpmTasks('grunt-contrib-uglify'); 83 | grunt.loadNpmTasks('grunt-vows'); 84 | grunt.loadNpmTasks('grunt-bump'); 85 | grunt.loadNpmTasks('grunt-string-replace'); 86 | 87 | // Default task. 88 | grunt.registerTask('default', ['jshint', 'qunit']); 89 | grunt.registerTask('selenium', ['vows:local']); 90 | grunt.registerTask('sauce', ['vows:sauce']); 91 | grunt.registerTask('minor', ['bump:minor']); 92 | grunt.registerTask('patch', ['bump']); 93 | grunt.registerTask('release', ['default','string-replace:version','uglify']); 94 | 95 | }; 96 | -------------------------------------------------------------------------------- /test/selenium/selenium.vows.js: -------------------------------------------------------------------------------- 1 | /*jshint evil:true */ 2 | var assert = require('assert'), 3 | wd = require('wd'); 4 | 5 | var exports = module.exports = function RawTests() {}; 6 | 7 | exports.allTests = function(conf, cap, capText) { 8 | 9 | var site = 'http://localhost:9999', 10 | jquery = '/test/jquery.html'; 11 | 12 | var setUp = function(url, cb, name) { 13 | var driver = wd.remote(conf.host, conf.port, conf.username, conf.accessKey); 14 | if (typeof name !== 'undefined') { 15 | name = name.replace(capText, ''); 16 | cap.name = name; 17 | } 18 | driver.init(cap, function() { 19 | driver.setImplicitWaitTimeout(30, function() { 20 | driver.get(site + url, function() { 21 | cb(driver); 22 | }); 23 | }); 24 | }); 25 | }; 26 | 27 | function isActive(driver, elementId, cb){ 28 | driver.hasElementByCssSelector('#'+ elementId + '.kinetic-active', function(err){ 29 | cb(driver, err); 30 | }); 31 | } 32 | 33 | function dragOverElement(driver, elementId, cb){ 34 | driver.elementByIdOrNull(elementId, function(err, element){ 35 | driver.moveTo(element, 300, 300, function(err){ 36 | driver.buttonDown(function(){ 37 | driver.moveTo(element, 10, 10, function(err){ 38 | driver.buttonUp(function(err){ 39 | 40 | driver.eval('$("#'+ elementId +'").data("kinetic-settings").velocity', function(err, velocity){ 41 | cb(driver, err, velocity); 42 | }); 43 | // driver.waitForConditionInBrowser('$("#wrapper").data("kinetic-settings").velocity === 0', 10000, function(err, stopped){ 44 | // console.log(arguments); 45 | // }); 46 | }); 47 | }); 48 | }); 49 | }); 50 | }); 51 | } 52 | 53 | var allTests = { 54 | 55 | 'page has correct title': { 56 | topic: function() { 57 | var _this = this; 58 | setUp(jquery, function(driver) { 59 | driver.title(function(err, title) { 60 | driver.quit(function() { 61 | _this.callback(err, title); 62 | }); 63 | }); 64 | }, this.context.name); 65 | }, 66 | '': function(err, title) { 67 | assert.equal(title, "jQuery.kinetic demos"); 68 | } 69 | }, 70 | 71 | 'drag over image': { 72 | topic: function(){ 73 | var _topic = this; 74 | setUp(jquery, function(driver){ 75 | isActive(driver, 'wrapper', function(driver){ 76 | dragOverElement(driver, 'wrapper', function(driver, err, velocity){ 77 | driver.quit(function(err){ 78 | _topic.callback(err, velocity); 79 | }); 80 | }); 81 | }); 82 | }); 83 | }, 84 | 'shows a velocity':function(velocity){ 85 | assert.ok(velocity > 0); 86 | } 87 | }, 88 | 89 | 'drag over hardware accel image': { 90 | topic: function(){ 91 | var _topic = this; 92 | setUp(jquery, function(driver){ 93 | isActive(driver, 'wrapperHW', function(driver){ 94 | dragOverElement(driver, 'wrapperHW', function(driver, err, velocity){ 95 | driver.quit(function(err){ 96 | _topic.callback(err, velocity); 97 | }); 98 | }); 99 | }); 100 | }); 101 | }, 102 | 'shows velocity':function(velocity){ 103 | assert.notEqual(velocity, 0); 104 | } 105 | } 106 | 107 | 108 | 109 | 110 | 111 | }; 112 | 113 | return allTests; 114 | }; 115 | -------------------------------------------------------------------------------- /test/jquery.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic demos 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |

jQuery.kinetic tests

15 | 16 |

Test for tab index

17 |
18 | 19 |
20 | 21 |

Single image

22 |
23 |
24 | wembley stadium 25 |
26 |
27 |
28 | < left | 29 | right > 30 |
31 | 50 |

Forms

51 |
52 |
53 |
54 | 55 | 56 | 57 | 61 | 62 | 63 | 64 | 68 | 69 | 70 | 71 | 75 | 76 | 77 | 78 | 82 |
83 |
84 |
85 | 88 | 89 |

Trigger Hardware

90 |
91 |
92 | wembley stadium 93 |
94 |
95 | 100 |
101 | 102 | 103 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.datepicker.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI Datepicker 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Datepicker#theming 9 | */ 10 | .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } 11 | .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 12 | .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 13 | .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 14 | .ui-datepicker .ui-datepicker-prev { left:2px; } 15 | .ui-datepicker .ui-datepicker-next { right:2px; } 16 | .ui-datepicker .ui-datepicker-prev-hover { left:1px; } 17 | .ui-datepicker .ui-datepicker-next-hover { right:1px; } 18 | .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } 19 | .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 20 | .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } 21 | .ui-datepicker select.ui-datepicker-month-year {width: 100%;} 22 | .ui-datepicker select.ui-datepicker-month, 23 | .ui-datepicker select.ui-datepicker-year { width: 49%;} 24 | .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 25 | .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } 26 | .ui-datepicker td { border: 0; padding: 1px; } 27 | .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 28 | .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 29 | .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 30 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 31 | 32 | /* with multiple calendars */ 33 | .ui-datepicker.ui-datepicker-multi { width:auto; } 34 | .ui-datepicker-multi .ui-datepicker-group { float:left; } 35 | .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 36 | .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 37 | .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 38 | .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 39 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 40 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 41 | .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 42 | .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } 43 | 44 | /* RTL support */ 45 | .ui-datepicker-rtl { direction: rtl; } 46 | .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 47 | .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 48 | .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 49 | .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 50 | .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 51 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 52 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 53 | .ui-datepicker-rtl .ui-datepicker-group { float:right; } 54 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 55 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 56 | 57 | /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 58 | .ui-datepicker-cover { 59 | display: none; /*sorry for IE5*/ 60 | display/**/: block; /*sorry for IE5*/ 61 | position: absolute; /*must have*/ 62 | z-index: -1; /*must have*/ 63 | filter: mask(); /*must have*/ 64 | top: -4px; /*must have*/ 65 | left: -4px; /*must have*/ 66 | width: 200px; /*must have*/ 67 | height: 200px; /*must have*/ 68 | } -------------------------------------------------------------------------------- /test/nested.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic test nested elements 5 | 6 | 7 | 8 | 9 | 61 | 62 | 63 |
64 |

jQuery.kinetic demo with nested scrollers

65 |

66 | Demo of jQuery kinetic with nested scrollers 67 |

68 |
69 |
70 | wembley stadium 71 |
72 |
73 |
74 | stade de france 75 | inner link 76 |
77 |
78 |
79 |
80 | < left | 81 | right > 82 |    --    83 | end (decelerates) 84 | 85 |    --    86 | stop (stop immediately) 87 | 88 |    --    89 | detach 90 | 91 |    --    92 | attach 93 |
94 | 95 | 99 | 119 |
120 | 121 | 122 | -------------------------------------------------------------------------------- /demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic demos 5 | 6 | 7 | 8 | 9 | 72 | 73 | 74 |
75 |

76 | Drag a mouse or use touch gestures over the windows below to scroll 77 | the pane. If you let go with momentum the scrolling will slow 78 | gradually. 79 |

80 |
81 |
82 | wembley stadium 83 |
84 |
85 |
86 | < left | 87 | right > 88 |    --    89 | end (decelerates) 90 | 91 |    --    92 | stop (stop immediately) 93 | 94 |    --    95 | detach 96 | 97 |    --    98 | attach 99 |
100 | 122 | 123 |
124 | 125 | 126 | -------------------------------------------------------------------------------- /extra-methods/farRight/demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic demos 5 | 6 | 7 | 8 | 9 | 10 | 11 | 75 | 76 | 77 |
78 |

jQuery.kinetic demos

79 |

80 | Drag a mouse or use touch gestures over the windows below to scroll 81 | the pane. If you let go with momentum the scrolling will slow 82 | gradually. 83 |

84 |
85 |
86 | wembley stadium 87 |
88 |
89 |
90 | < left | 91 | right > 92 |    --    93 | end (decelerates) 94 | 95 |    --    96 | stop (stop immediately) 97 | 98 |    --    99 | detach 100 | 101 |    --    102 | attach 103 |
104 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /extra-methods/jumpTo/demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic demos 5 | 6 | 7 | 8 | 9 | 10 | 11 | 75 | 76 | 77 |
78 |

jQuery.kinetic demos

79 |

80 | Drag a mouse or use touch gestures over the windows below to scroll 81 | the pane. If you let go with momentum the scrolling will slow 82 | gradually. 83 |

84 |
85 |
86 | wembley stadium 87 |
88 |
89 |
90 | < left | 91 | right > 92 |    --    93 | end (decelerates) 94 | 95 |    --    96 | stop (stop immediately) 97 | 98 |    --    99 | detach 100 | 101 |    --    102 | attach 103 |
104 | 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /test/zepto.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic demos 5 | 6 | 7 | 8 | 9 | 55 | 56 | 57 |
58 |

jQuery.kinetic tests

59 | 60 |

Test for tab index

61 |
62 | 63 |
64 | 65 |

Single image

66 |
67 |
68 | wembley stadium 69 |
70 |
71 |
72 | < left | 73 | right > 74 |
75 | 94 |

Forms

95 |
96 |
97 |
98 | 99 | 100 | 101 | 105 | 106 | 107 | 108 | 112 | 113 | 114 | 115 | 119 | 120 | 121 | 122 | 126 |
127 |
128 |
129 | 132 | 133 |

Trigger Hardware

134 |
135 |
136 | wembley stadium 137 |
138 |
139 | 144 | 145 |
146 | 147 | 148 | -------------------------------------------------------------------------------- /lib/qunit.css: -------------------------------------------------------------------------------- 1 | /** 2 | * QUnit v1.10.0 - A JavaScript Unit Testing Framework 3 | * 4 | * http://qunitjs.com 5 | * 6 | * Copyright 2012 jQuery Foundation and other contributors 7 | * Released under the MIT license. 8 | * http://jquery.org/license 9 | */ 10 | 11 | /** Font Family and Sizes */ 12 | 13 | #qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { 14 | font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; 15 | } 16 | 17 | #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; } 18 | #qunit-tests { font-size: smaller; } 19 | 20 | 21 | /** Resets */ 22 | 23 | #qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter { 24 | margin: 0; 25 | padding: 0; 26 | } 27 | 28 | 29 | /** Header */ 30 | 31 | #qunit-header { 32 | padding: 0.5em 0 0.5em 1em; 33 | 34 | color: #8699a4; 35 | background-color: #0d3349; 36 | 37 | font-size: 1.5em; 38 | line-height: 1em; 39 | font-weight: normal; 40 | 41 | border-radius: 5px 5px 0 0; 42 | -moz-border-radius: 5px 5px 0 0; 43 | -webkit-border-top-right-radius: 5px; 44 | -webkit-border-top-left-radius: 5px; 45 | } 46 | 47 | #qunit-header a { 48 | text-decoration: none; 49 | color: #c2ccd1; 50 | } 51 | 52 | #qunit-header a:hover, 53 | #qunit-header a:focus { 54 | color: #fff; 55 | } 56 | 57 | #qunit-testrunner-toolbar label { 58 | display: inline-block; 59 | padding: 0 .5em 0 .1em; 60 | } 61 | 62 | #qunit-banner { 63 | height: 5px; 64 | } 65 | 66 | #qunit-testrunner-toolbar { 67 | padding: 0.5em 0 0.5em 2em; 68 | color: #5E740B; 69 | background-color: #eee; 70 | overflow: hidden; 71 | } 72 | 73 | #qunit-userAgent { 74 | padding: 0.5em 0 0.5em 2.5em; 75 | background-color: #2b81af; 76 | color: #fff; 77 | text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; 78 | } 79 | 80 | #qunit-modulefilter-container { 81 | float: right; 82 | } 83 | 84 | /** Tests: Pass/Fail */ 85 | 86 | #qunit-tests { 87 | list-style-position: inside; 88 | } 89 | 90 | #qunit-tests li { 91 | padding: 0.4em 0.5em 0.4em 2.5em; 92 | border-bottom: 1px solid #fff; 93 | list-style-position: inside; 94 | } 95 | 96 | #qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { 97 | display: none; 98 | } 99 | 100 | #qunit-tests li strong { 101 | cursor: pointer; 102 | } 103 | 104 | #qunit-tests li a { 105 | padding: 0.5em; 106 | color: #c2ccd1; 107 | text-decoration: none; 108 | } 109 | #qunit-tests li a:hover, 110 | #qunit-tests li a:focus { 111 | color: #000; 112 | } 113 | 114 | #qunit-tests ol { 115 | margin-top: 0.5em; 116 | padding: 0.5em; 117 | 118 | background-color: #fff; 119 | 120 | border-radius: 5px; 121 | -moz-border-radius: 5px; 122 | -webkit-border-radius: 5px; 123 | } 124 | 125 | #qunit-tests table { 126 | border-collapse: collapse; 127 | margin-top: .2em; 128 | } 129 | 130 | #qunit-tests th { 131 | text-align: right; 132 | vertical-align: top; 133 | padding: 0 .5em 0 0; 134 | } 135 | 136 | #qunit-tests td { 137 | vertical-align: top; 138 | } 139 | 140 | #qunit-tests pre { 141 | margin: 0; 142 | white-space: pre-wrap; 143 | word-wrap: break-word; 144 | } 145 | 146 | #qunit-tests del { 147 | background-color: #e0f2be; 148 | color: #374e0c; 149 | text-decoration: none; 150 | } 151 | 152 | #qunit-tests ins { 153 | background-color: #ffcaca; 154 | color: #500; 155 | text-decoration: none; 156 | } 157 | 158 | /*** Test Counts */ 159 | 160 | #qunit-tests b.counts { color: black; } 161 | #qunit-tests b.passed { color: #5E740B; } 162 | #qunit-tests b.failed { color: #710909; } 163 | 164 | #qunit-tests li li { 165 | padding: 5px; 166 | background-color: #fff; 167 | border-bottom: none; 168 | list-style-position: inside; 169 | } 170 | 171 | /*** Passing Styles */ 172 | 173 | #qunit-tests li li.pass { 174 | color: #3c510c; 175 | background-color: #fff; 176 | border-left: 10px solid #C6E746; 177 | } 178 | 179 | #qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; } 180 | #qunit-tests .pass .test-name { color: #366097; } 181 | 182 | #qunit-tests .pass .test-actual, 183 | #qunit-tests .pass .test-expected { color: #999999; } 184 | 185 | #qunit-banner.qunit-pass { background-color: #C6E746; } 186 | 187 | /*** Failing Styles */ 188 | 189 | #qunit-tests li li.fail { 190 | color: #710909; 191 | background-color: #fff; 192 | border-left: 10px solid #EE5757; 193 | white-space: pre; 194 | } 195 | 196 | #qunit-tests > li:last-child { 197 | border-radius: 0 0 5px 5px; 198 | -moz-border-radius: 0 0 5px 5px; 199 | -webkit-border-bottom-right-radius: 5px; 200 | -webkit-border-bottom-left-radius: 5px; 201 | } 202 | 203 | #qunit-tests .fail { color: #000000; background-color: #EE5757; } 204 | #qunit-tests .fail .test-name, 205 | #qunit-tests .fail .module-name { color: #000000; } 206 | 207 | #qunit-tests .fail .test-actual { color: #EE5757; } 208 | #qunit-tests .fail .test-expected { color: green; } 209 | 210 | #qunit-banner.qunit-fail { background-color: #EE5757; } 211 | 212 | 213 | /** Result */ 214 | 215 | #qunit-testresult { 216 | padding: 0.5em 0.5em 0.5em 2.5em; 217 | 218 | color: #2b81af; 219 | background-color: #D2E0E6; 220 | 221 | border-bottom: 1px solid white; 222 | } 223 | #qunit-testresult .module-name { 224 | font-weight: bold; 225 | } 226 | 227 | /** Fixture */ 228 | 229 | #qunit-fixture { 230 | position: absolute; 231 | top: -10000px; 232 | left: -10000px; 233 | width: 1000px; 234 | height: 1000px; 235 | } 236 | -------------------------------------------------------------------------------- /test/specs/basic.spec.js: -------------------------------------------------------------------------------- 1 | /*global $,module,test,asyncTest,start,ok,equal,dragOver,hasEventAttached */ 2 | var $fixture = $('#qunit-fixture'), 3 | html = $('#tmpl').text(); 4 | 5 | module('simple image', { 6 | setup: function(){ 7 | $fixture.append(html); 8 | } 9 | }); 10 | test('we can initialise kinetic', function(){ 11 | var $wrapper = $('#wrapper').kinetic(); 12 | ok($wrapper.hasClass('kinetic-active'), 'has active class'); 13 | }); 14 | test('drag the contents and see velocity', function(){ 15 | var $wrapper = $('#wrapper').kinetic(), 16 | img = $wrapper.find('img')[0]; 17 | dragOver($wrapper, img, [100,100], [10,10]); 18 | ok($wrapper.data().kinetic.velocity, 'there is velocity'); 19 | }); 20 | test('we can detach kinetic', function(){ 21 | var $wrapper = $('#wrapper').kinetic(); 22 | var settings = $wrapper.data().kinetic.settings; 23 | 24 | $wrapper.kinetic('detach'); 25 | equal($wrapper.hasClass('kinetic-active'), false, 'no active class'); 26 | equal(hasEventAttached($wrapper, settings.events.inputDown), false, 'inputDown not attached'); 27 | equal(hasEventAttached($wrapper, settings.events.inputEnd), false, 'inputEnd not attached'); 28 | equal(hasEventAttached($wrapper, settings.events.inputMove), false, 'inputMove not attached'); 29 | equal(hasEventAttached($wrapper, settings.events.inputClick), false, 'inputClick not attached'); 30 | equal(hasEventAttached($wrapper, settings.events.dragStart), false, 'dragStart not attached'); 31 | equal(hasEventAttached($wrapper, settings.events.touchStart), false, 'touchStart not attached'); 32 | equal(hasEventAttached($wrapper, settings.events.touchMove), false, 'touchMove not attached'); 33 | }); 34 | test('we can trigger hardware acceleration', function(){ 35 | var $wrapper = $('#wrapper').kinetic({ 36 | triggerHardware: true 37 | }), 38 | img = $wrapper.find('img')[0]; 39 | 40 | ok($wrapper.css('-webkit-transform'), 'includes transform'); 41 | dragOver($wrapper, img, [100,100], [10,10]); 42 | ok($wrapper.data().kinetic.velocity, 'there is velocity'); 43 | }); 44 | test('we can prevent drag with filterTarget', function(){ 45 | var $wrapper = $('#wrapper').kinetic({ 46 | filterTarget: function(){ return false; } 47 | }), 48 | img = $wrapper.find('img')[0]; 49 | 50 | dragOver($wrapper, img, [100,100], [10,10]); 51 | equal($wrapper.data().kinetic.velocity, 0, 'there should be no velocity'); 52 | }); 53 | test('filterTarget is passed both a target and event', function() { 54 | var targetValid = false; 55 | var eventValid = false; 56 | 57 | var $wrapper = $('#wrapper').kinetic({ 58 | filterTarget: function(target, event){ 59 | if (target) targetValid = true; 60 | if (event) eventValid = true; 61 | } 62 | }); 63 | 64 | var img = $wrapper.find('img')[0]; 65 | 66 | dragOver($wrapper, img, [100, 100], [10, 10]); 67 | equal(targetValid, true, 'there should be a target passed to filterTarget'); 68 | equal(eventValid, true, 'there should be a event passed to filterTarget'); 69 | 70 | }); 71 | test('we can listen for events', function(){ 72 | var $wrapper = $('#wrapper').kinetic({ 73 | moved: function(){ moved++; }, 74 | stopped: function(){ stopped++; } 75 | }), 76 | img = $wrapper.find('img')[0], 77 | moved = 0, 78 | stopped = 0; 79 | 80 | dragOver($wrapper, img, [100,100], [10,10]); 81 | $wrapper.kinetic('stop'); 82 | equal(moved, 2, 'moved event has fired'); 83 | equal(stopped, 1, 'stopped event has fired'); 84 | }); 85 | test('scroll event triggered on scroll', function(){ 86 | var $wrapper = $('#wrapper').scroll(function(){ 87 | moved++; 88 | }), 89 | moved = 0, 90 | stopped = 0, 91 | scrollEvent = $.Event('scroll'); 92 | 93 | $wrapper.trigger(scrollEvent); 94 | ok(moved, 'scroll triggered move event'); 95 | 96 | }); 97 | test('moved triggered on scroll (touch)', function(){ 98 | var $wrapper = $('#wrapper').kinetic({ 99 | moved: function(){ 100 | moved++; 101 | }, 102 | stopped: function(){ stopped++; } 103 | }), 104 | moved = 0, 105 | stopped = 0, 106 | scrollEvent = $.Event('scroll'); 107 | 108 | $wrapper.trigger(scrollEvent); 109 | ok(moved, 'scroll triggered move event'); 110 | 111 | }); 112 | test('we can customise the mouse cursor', function(){ 113 | var $wrapper = $('#wrapper').kinetic({ 114 | cursor: 'pointer' 115 | }); 116 | 117 | equal($wrapper.css('cursor'), 'pointer'); 118 | 119 | }); 120 | test('we can limit the velocity with maxvelocity', function(){ 121 | var $wrapper = $('#wrapper').kinetic({ 122 | maxvelocity: 10, 123 | moved: function(){ 124 | maxVelocity = this.velocity > maxVelocity ? this.velocity : maxVelocity; 125 | } 126 | }), 127 | img = $wrapper.find('img')[0], 128 | maxVelocity = 0; 129 | dragOver($wrapper, img, [200,200], [10,10]); 130 | equal(maxVelocity < 10, true); 131 | }); 132 | test('we can bind kinetic twice to the same element', function(){ 133 | var $wrapper = $('#wrapper').kinetic({ 134 | moved: function(settings){ 135 | count+=1; 136 | } 137 | }), 138 | img = $wrapper.find('img')[0], 139 | count = 0; 140 | 141 | // bind again should be ignored 142 | $wrapper.kinetic({ 143 | moved: function(){ 144 | count+=1; 145 | } 146 | }); 147 | dragOver($wrapper, img, [200,200], [10,10]); 148 | equal(count, 2); 149 | }); 150 | test('we can use our own call method', 3, function(){ 151 | 152 | $.Kinetic.prototype.do = function(options){ 153 | equal(this instanceof $.Kinetic, true); 154 | equal(this.velocity, 0); 155 | equal(options.what, 'something'); 156 | }; 157 | var $wrapper = $('#wrapper').kinetic(); 158 | $wrapper.kinetic('do', { what: 'something' }); 159 | 160 | }); 161 | 162 | 163 | -------------------------------------------------------------------------------- /test/mousewheel.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic demos 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 62 | 86 | 87 | 88 |
89 |

jQuery.kinetic tests

90 | 91 |

Test for tab index

92 |
93 | 94 |
95 | 96 |

Single image

97 |
98 |
99 | wembley stadium 100 |
101 |
102 |
103 | < left | 104 | right > 105 |
106 | 134 |

Forms

135 |
136 |
137 |
138 | 139 | 140 | 141 | 145 | 146 | 147 | 148 | 152 | 153 | 154 | 155 | 159 | 160 | 161 | 162 | 166 |
167 |
168 |
169 | 172 | 173 |
174 | 175 | 176 | -------------------------------------------------------------------------------- /test/lotsofelements.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic lots of elements 5 | 6 | 7 | 8 | 58 | 59 | 60 |
61 |

testing lots of elements

62 | 63 |

Test for tab index

64 |
65 | 66 |
67 | 68 |

Single image

69 |
70 |
71 | wembley stadium 72 | wembley stadium 73 | wembley stadium 74 | wembley stadium 75 | wembley stadium 76 | wembley stadium 77 | wembley stadium 78 | wembley stadium 79 | wembley stadium 80 | wembley stadium 81 | wembley stadium 82 | wembley stadium 83 | wembley stadium 84 | wembley stadium 85 | wembley stadium 86 | wembley stadium 87 | wembley stadium 88 | wembley stadium 89 | wembley stadium 90 | wembley stadium 91 | wembley stadium 92 | wembley stadium 93 | wembley stadium 94 | wembley stadium 95 | wembley stadium 96 | wembley stadium 97 | wembley stadium 98 | wembley stadium 99 | wembley stadium 100 | wembley stadium 101 | wembley stadium 102 | wembley stadium 103 | wembley stadium 104 | wembley stadium 105 | wembley stadium 106 | wembley stadium 107 | wembley stadium 108 | wembley stadium 109 | wembley stadium 110 | wembley stadium 111 | wembley stadium 112 | wembley stadium 113 | wembley stadium 114 | wembley stadium 115 | wembley stadium 116 | wembley stadium 117 | wembley stadium 118 | wembley stadium 119 | wembley stadium 120 | wembley stadium 121 | wembley stadium 122 |
123 |
124 |
125 | < left | 126 | right > 127 |
128 | 147 | 148 |
149 | 150 | 151 | -------------------------------------------------------------------------------- /jquery.kinetic.min.js: -------------------------------------------------------------------------------- 1 | /*! jquery.kinetic - v2.0.4 - 2014-10-07 http://the-taylors.org/jquery.kinetic 2 | * Copyright (c) 2014 Dave Taylor; Licensed MIT */ 3 | !function(a){"use strict";var b="kinetic-active";window.requestAnimationFrame||(window.requestAnimationFrame=function(){return window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}()),a.support=a.support||{},a.extend(a.support,{touch:"ontouchend"in document});var c=function(){return!1},d=function(b,c){return this.settings=c,this.el=b,this.$el=a(b),this._initElements(),this};d.DATA_KEY="kinetic",d.DEFAULTS={cursor:"move",decelerate:!0,triggerHardware:!1,y:!0,x:!0,slowdown:.9,maxvelocity:40,throttleFPS:60,movingClass:{up:"kinetic-moving-up",down:"kinetic-moving-down",left:"kinetic-moving-left",right:"kinetic-moving-right"},deceleratingClass:{up:"kinetic-decelerating-up",down:"kinetic-decelerating-down",left:"kinetic-decelerating-left",right:"kinetic-decelerating-right"}},d.prototype.start=function(b){this.settings=a.extend(this.settings,b),this.velocity=b.velocity||this.velocity,this.velocityY=b.velocityY||this.velocityY,this.settings.decelerate=!1,this._move()},d.prototype.end=function(){this.settings.decelerate=!0},d.prototype.stop=function(){this.velocity=0,this.velocityY=0,this.settings.decelerate=!0,a.isFunction(this.settings.stopped)&&this.settings.stopped.call(this)},d.prototype.detach=function(){this._detachListeners(),this.$el.removeClass(b).css("cursor","")},d.prototype.attach=function(){this.$el.hasClass(b)||(this._attachListeners(this.$el),this.$el.addClass(b).css("cursor",this.settings.cursor))},d.prototype._initElements=function(){this.$el.addClass(b),a.extend(this,{xpos:null,prevXPos:!1,ypos:null,prevYPos:!1,mouseDown:!1,throttleTimeout:1e3/this.settings.throttleFPS,lastMove:null,elementFocused:null}),this.velocity=0,this.velocityY=0,a(document).mouseup(a.proxy(this._resetMouse,this)).click(a.proxy(this._resetMouse,this)),this._initEvents(),this.$el.css("cursor",this.settings.cursor),this.settings.triggerHardware&&this.$el.css({"-webkit-transform":"translate3d(0,0,0)","-webkit-perspective":"1000","-webkit-backface-visibility":"hidden"})},d.prototype._initEvents=function(){var b=this;this.settings.events={touchStart:function(a){var c;b._useTarget(a.target,a)&&(c=a.originalEvent.touches[0],b._start(c.clientX,c.clientY),a.stopPropagation())},touchMove:function(a){var c;b.mouseDown&&(c=a.originalEvent.touches[0],b._inputmove(c.clientX,c.clientY),a.preventDefault&&a.preventDefault())},inputDown:function(a){b._useTarget(a.target,a)&&(b._start(a.clientX,a.clientY),b.elementFocused=a.target,"IMG"===a.target.nodeName&&a.preventDefault(),a.stopPropagation())},inputEnd:function(a){b._useTarget(a.target,a)&&(b._end(),b.elementFocused=null,a.preventDefault&&a.preventDefault())},inputMove:function(a){b.mouseDown&&(b._inputmove(a.clientX,a.clientY),a.preventDefault&&a.preventDefault())},scroll:function(c){a.isFunction(b.settings.moved)&&b.settings.moved.call(b,b.settings),c.preventDefault&&c.preventDefault()},inputClick:function(a){return Math.abs(b.velocity)>0?(a.preventDefault(),!1):void 0},dragStart:function(a){return b._useTarget(a.target,a)&&b.elementFocused?!1:void 0}},this._attachListeners(this.$el,this.settings)},d.prototype._inputmove=function(b,c){{var d=this.$el;this.el}if((!this.lastMove||new Date>new Date(this.lastMove.getTime()+this.throttleTimeout))&&(this.lastMove=new Date,this.mouseDown&&(this.xpos||this.ypos))){this.elementFocused&&(a(this.elementFocused).blur(),this.elementFocused=null,d.focus()),this.settings.decelerate=!1,this.velocity=this.velocityY=0;var e=this.scrollLeft(),f=this.scrollTop(),g=b-this.xpos,h=c-this.ypos;this.scrollLeft(this.settings.x?e-g:e),this.scrollTop(this.settings.y?f-h:f),this.prevXPos=this.xpos,this.prevYPos=this.ypos,this.xpos=b,this.ypos=c,this._calculateVelocities(),this._setMoveClasses(this.settings.movingClass),a.isFunction(this.settings.moved)&&this.settings.moved.call(d,this.settings)}},d.prototype._calculateVelocities=function(){this.velocity=this._capVelocity(this.prevXPos-this.xpos,this.settings.maxvelocity),this.velocityY=this._capVelocity(this.prevYPos-this.ypos,this.settings.maxvelocity)},d.prototype._end=function(){this.xpos&&this.prevXPos&&this.settings.decelerate===!1&&(this.settings.decelerate=!0,this._calculateVelocities(),this.xpos=this.prevXPos=this.mouseDown=!1,this._move())},d.prototype._useTarget=function(b,c){return a.isFunction(this.settings.filterTarget)?this.settings.filterTarget.call(this,b,c)!==!1:!0},d.prototype._start=function(a,b){this.mouseDown=!0,this.velocity=this.prevXPos=0,this.velocityY=this.prevYPos=0,this.xpos=a,this.ypos=b},d.prototype._resetMouse=function(){this.xpos=!1,this.ypos=!1,this.mouseDown=!1},d.prototype._decelerateVelocity=function(a,b){return 0===Math.floor(Math.abs(a))?0:a*b},d.prototype._capVelocity=function(a,b){var c=a;return a>0?a>b&&(c=b):0-b>a&&(c=0-b),c},d.prototype._setMoveClasses=function(a){var b=this.settings,c=this.$el;c.removeClass(b.movingClass.up).removeClass(b.movingClass.down).removeClass(b.movingClass.left).removeClass(b.movingClass.right).removeClass(b.deceleratingClass.up).removeClass(b.deceleratingClass.down).removeClass(b.deceleratingClass.left).removeClass(b.deceleratingClass.right),this.velocity>0&&c.addClass(a.right),this.velocity<0&&c.addClass(a.left),this.velocityY>0&&c.addClass(a.down),this.velocityY<0&&c.addClass(a.up)},d.prototype._move=function(){var b=(this.$el,this.el),c=this,d=c.settings;d.x&&b.scrollWidth>0?(this.scrollLeft(this.scrollLeft()+this.velocity),Math.abs(this.velocity)>0&&(this.velocity=d.decelerate?c._decelerateVelocity(this.velocity,d.slowdown):this.velocity)):this.velocity=0,d.y&&b.scrollHeight>0?(this.scrollTop(this.scrollTop()+this.velocityY),Math.abs(this.velocityY)>0&&(this.velocityY=d.decelerate?c._decelerateVelocity(this.velocityY,d.slowdown):this.velocityY)):this.velocityY=0,c._setMoveClasses(d.deceleratingClass),a.isFunction(d.moved)&&d.moved.call(this,d),Math.abs(this.velocity)>0||Math.abs(this.velocityY)>0?this.moving||(this.moving=!0,window.requestAnimationFrame(function(){c.moving=!1,c._move()})):c.stop()},d.prototype._getScroller=function(){var b=this.$el;return(this.$el.is("body")||this.$el.is("html"))&&(b=a(window)),b},d.prototype.scrollLeft=function(a){var b=this._getScroller();return"number"!=typeof a?b.scrollLeft():(b.scrollLeft(a),void(this.settings.scrollLeft=a))},d.prototype.scrollTop=function(a){var b=this._getScroller();return"number"!=typeof a?b.scrollTop():(b.scrollTop(a),void(this.settings.scrollTop=a))},d.prototype._attachListeners=function(){var b=this.$el,d=this.settings;a.support.touch?b.bind("touchstart",d.events.touchStart).bind("touchend",d.events.inputEnd).bind("touchmove",d.events.touchMove):b.mousedown(d.events.inputDown).mouseup(d.events.inputEnd).mousemove(d.events.inputMove),b.click(d.events.inputClick).scroll(d.events.scroll).bind("selectstart",c).bind("dragstart",d.events.dragStart)},d.prototype._detachListeners=function(){var b=this.$el,d=this.settings;a.support.touch?b.unbind("touchstart",d.events.touchStart).unbind("touchend",d.events.inputEnd).unbind("touchmove",d.events.touchMove):b.unbind("mousedown",d.events.inputDown).unbind("mouseup",d.events.inputEnd).unbind("mousemove",d.events.inputMove),b.unbind("click",d.events.inputClick).unbind("scroll",d.events.scroll).unbind("selectstart",c).unbind("dragstart",d.events.dragStart)},a.Kinetic=d,a.fn.kinetic=function(b,c){return this.each(function(){var e=a(this),f=e.data(d.DATA_KEY),g=a.extend({},d.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data(d.DATA_KEY,f=new d(this,g)),"string"==typeof b&&f[b](c)})}}(window.jQuery||window.Zepto); -------------------------------------------------------------------------------- /readme.mkd: -------------------------------------------------------------------------------- 1 | jQuery.kinetic 2 | ============== 3 | Dave Taylor 4 | The MIT License (MIT) 5 | 6 | > This code has been pretty stable for a while (with it's few restrictions) and so am not actively making changes. If you want to improve it in any way feel free to submit a pull request (with tests) and I will merge in any that make sense and don't add bloat to what is a simple plugin. 7 | 8 | Master: [![Build Status](https://secure.travis-ci.org/davetayls/jquery.kinetic.png?branch=master)](http://travis-ci.org/davetayls/jquery.kinetic) 9 | 10 | All branches: [![Build Status](https://secure.travis-ci.org/davetayls/jquery.kinetic.png)](http://travis-ci.org/davetayls/jquery.kinetic) 11 | 12 | jQuery.kinetic is a simple plugin which adds smooth drag scrolling with 13 | gradual deceleration to containers. 14 | 15 | ## Installation 16 | 17 | ### Bower 18 | 19 | $ bower install jquery.kinetic --save 20 | 21 | ### Script tag 22 | You can add the script to the page. 23 | 24 | 25 | 26 | ## Major new release 2.0 has BREAKING CHANGES 27 | 28 | See release history below for details. 29 | 30 | ## Compatibility 31 | 32 | This plugin works with [jQuery](http://jquery.com) and 33 | [Zepto](http://zeptojs.com/) 34 | 35 | ### Browsers ### 36 | 37 | - ie: 7,8,9 38 | - firefox: 3.6,4,5 39 | - chrome: 13 40 | - safari: 5 41 | - iOS Safari: 4 42 | 43 | ## Demos 44 | Take a look at a demo on . 45 | 46 | Filtering Clickable elements 47 | --- 48 | 49 | If you need to allow events to be passed through the wrapper. For example to allow clicking on a link or an input then you can use `filterTarget` like so. 50 | 51 | ```javascript 52 | $('#wrapper').kinetic({ 53 | filterTarget: function(target, e){ 54 | if (!/down|start/.test(e.type)){ 55 | return !(/area|a|input/i.test(target.tagName)); 56 | } 57 | } 58 | }); 59 | ``` 60 | 61 | ## Options 62 | 63 | cursor {string} default: move Specify the cursor to use on the wrapper 64 | slowdown {number} default: 0.9 This option affects the speed at which the scroll slows 65 | x {string} default: true Toggles movement along the x axis 66 | y {string} default: true Toggles movement along the y axis 67 | maxvelocity {number} default: 40 This option puts a cap on speed at which the container 68 | can scroll 69 | throttleFPS {number} default: 60 This adds throttling to the mouse move events to boost 70 | performance when scrolling 71 | triggerHardware {boolean} false This adds css to the wrapper which 72 | will trigger iOS to use hardware acceleration 73 | 74 | filterTarget {function(target)} Return false from this function to 75 | prevent capturing the scroll 76 | 77 | movingClass {object} 78 | up: {string} default: 'kinetic-moving-up' 79 | down: {string} default: 'kinetic-moving-down' 80 | left: {string} default: 'kinetic-moving-left' 81 | right: {string} default: 'kinetic-moving-right' 82 | 83 | deceleratingClass {object} 84 | up: {string} default: 'kinetic-decelerating-up' 85 | down: {string} default: 'kinetic-decelerating-down' 86 | left: {string} default: 'kinetic-decelerating-left' 87 | right: {string} default: 'kinetic-decelerating-right' 88 | 89 | Listeners: All listeners are called with: 90 | - this = the instance of the Kinetic class 91 | 92 | moved {function()} A function which is called on every move 93 | stopped {function()} A function which is called once all 94 | movement has stopped 95 | 96 | Methods: You can call methods by running the kinetic plugin 97 | on an element which has already been activated. 98 | 99 | eg $('#wrapper').kinetic(); // activate 100 | $('#wrapper').kinetic('methodname', options); 101 | 102 | start Start movement in the scroll container at a particular velocity. 103 | This velocity will not slow until the end method is called. 104 | 105 | The following line scrolls the container left. 106 | $('#wrapper#).kinetic('start', { velocity: -30 }); 107 | 108 | The following line scrolls the container right. 109 | $('#wrapper#).kinetic('start', { velocity: 30 }); 110 | 111 | The following line scrolls the container diagonally. 112 | $('#wrapper#).kinetic('start', { velocity: -30, velocityY: -10 }); 113 | 114 | end Begin slowdown of any scrolling velocity in the container. 115 | $('#wrapper#).kinetic('end'); 116 | 117 | stop Stop the scrolling immediately 118 | 119 | detach Detach listeners and functionality from the wrapper 120 | 121 | attach Re-attach listeners and functionality previously detached using 122 | the detach method 123 | 124 | Add your own methods 125 | -------------------- 126 | 127 | There are some example methods in the `extra-methods` folder. You can also add your own. 128 | 129 | $.Kinetic.prototype.do = function(options){ 130 | // this -> instance of Kinetic 131 | // this.settings -> get current settings 132 | // options -> options passed in from call 133 | }; 134 | 135 | // use the method 136 | $('#elem').kinetic('do', { options }); 137 | 138 | Hack the core 139 | ------------- 140 | 141 | You can now hook in to the core functionality to make changes. 142 | 143 | var _start = $.Kinetic.prototype.start; 144 | $.Kinetic.prototype.start = function(options){ 145 | // -> do something 146 | _start.apply(this, arguments); 147 | }; 148 | 149 | 150 | Running the tests 151 | ------- 152 | 153 | The test suite uses grunt's server and qunit functionality. The tests are being built up 154 | but currently cover the core functionality. This runs all qUnit Html specs in the 155 | `/test/specs` folder. 156 | 157 | - grunt `npm install -g grunt` 158 | - install devDependencies `npm install` from the root of the source 159 | 160 | Then run from the root of the source 161 | 162 | $ grunt 163 | 164 | ### Manual tests 165 | 166 | There are manual tests as html files within the `/test` folder. 167 | 168 | Changes 169 | ------- 170 | ### 2.0.5 171 | - Fix detach scroll event for touch devices (@Jaemu) 172 | 173 | ### 2.0.4 174 | - Fix the useTarget call to include the event as per the example in the readme for ignoring scroll events. (@mooreOn) 175 | 176 | ### 2.0.3 177 | - only prevent drag and drop if element is usable target (@andrew-pause) 178 | 179 | ### 2.0.1 180 | 181 | - changes to allow attaching to `` with `$('body').kinetic()` #61 182 | 183 | ### 2.0 184 | 185 | After several years, this plugin has had a major refactor. Big thanks to (@skovhus) for helping with this rewrite. Here's what has happened. 186 | 187 | - rewrite of plugin to an OO plugin 188 | - **BREAKING CHANGES** 189 | - call methods are now attached to the `$.Kinetic.prototype` and have 190 | slightly different arguments (see docs above) 191 | - no more $.kinetic namespace 192 | - `Kinetic` constructor is attached to $.Kinetic 193 | - `$('#wrapper').data('kinetic-settings')` has been removed in favour of 194 | `instance = $('#wrapper').data('kinetic'); settings = instance.settings` 195 | - All events `this` context is now the instance of `Kinetic`. 196 | To access the `$scroller` which was previously the context you can use `this.$el` 197 | 198 | ### 1.8.2 199 | - fix #34, #28, now will discard any subsequent attempts to bind `.kinetic()` 200 | 201 | ### 1.8.1 202 | - tweak to hardware trigger css (@edmelly) 203 | - upgrade to Grunt 0.4 204 | 205 | ### 1.8 206 | - add scroll listener to trigger move events (@dennipahmah) 207 | 208 | ### 1.7 209 | - add cursor option to change the default `move` cursor 210 | 211 | ### 1.6.1 212 | - bug fix release for unbinding touch events 213 | 214 | ### 1.6 215 | - use bind for touch events to fix issues on android 216 | 217 | ### 1.5 218 | - added ability to prevent capturing scroll depending on the target 219 | - fix for using alongside jQuery UI draggable #14 - thanks @sidoh, @NilsHolmstrom 220 | 221 | ### 1.4 222 | - added ability to nest containers thanks @cc-lam 223 | - added detach/attach methods 224 | - added triggerHardware option 225 | 226 | ### 1.3 227 | - IE bug fixes when dragging images 228 | - Adding extensibility for methods by attaching functions to jQuery. 229 | 230 | // add the method 231 | $.kinetic.callMethods.do = function(settings, options){ 232 | // method functionality 233 | }; 234 | 235 | // use the method 236 | $('#elem').kinetic('do', { ... }); 237 | 238 | - Added stop method 239 | - Fix bug with ignored axis triggering animation frames 240 | 241 | 242 | 243 | Notes 244 | ----- 245 | The scrollbar plugin is still very much an alpha version. 246 | 247 | 248 | -------------------------------------------------------------------------------- /test/ui-draggable.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Jquery UI draggable test 5 | 6 | 7 | 8 | 9 | 10 | 41 | 42 | 43 |

Jquery UI draggable test

44 |
45 |
this should be draggable
46 | 47 | 48 |
49 | 50 |
Draggable inside kinetic container
51 | 52 | 53 | 54 |

KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.KINETIC! Lorem ipsum dolor sit amet, consectetur adipisicing elitFork, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

55 | 56 |
57 | 58 | 62 | 63 |
64 | ​ 65 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /jquery.kinetic.js: -------------------------------------------------------------------------------- 1 | /** 2 | jQuery.kinetic v2.0.4 3 | Dave Taylor http://davetayls.me 4 | 5 | @license The MIT License (MIT) 6 | @preserve Copyright (c) 2012 Dave Taylor http://davetayls.me 7 | */ 8 | (function ($){ 9 | 'use strict'; 10 | 11 | var ACTIVE_CLASS = 'kinetic-active'; 12 | 13 | /** 14 | * Provides requestAnimationFrame in a cross browser way. 15 | * http://paulirish.com/2011/requestanimationframe-for-smart-animating/ 16 | */ 17 | if (!window.requestAnimationFrame){ 18 | 19 | window.requestAnimationFrame = ( function (){ 20 | 21 | return window.webkitRequestAnimationFrame || 22 | window.mozRequestAnimationFrame || 23 | window.oRequestAnimationFrame || 24 | window.msRequestAnimationFrame || 25 | function (/* function FrameRequestCallback */ callback, /* DOMElement Element */ element){ 26 | window.setTimeout(callback, 1000 / 60); 27 | }; 28 | 29 | }()); 30 | 31 | } 32 | 33 | // add touch checker to jQuery.support 34 | $.support = $.support || {}; 35 | $.extend($.support, { 36 | touch: 'ontouchend' in document 37 | }); 38 | var selectStart = function (){ 39 | return false; 40 | }; 41 | 42 | 43 | // KINETIC CLASS DEFINITION 44 | // ====================== 45 | 46 | var Kinetic = function (element, settings) { 47 | this.settings = settings; 48 | this.el = element; 49 | this.$el = $(element); 50 | 51 | this._initElements(); 52 | 53 | return this; 54 | }; 55 | 56 | Kinetic.DATA_KEY = 'kinetic'; 57 | Kinetic.DEFAULTS = { 58 | cursor: 'move', 59 | decelerate: true, 60 | triggerHardware: false, 61 | y: true, 62 | x: true, 63 | slowdown: 0.9, 64 | maxvelocity: 40, 65 | throttleFPS: 60, 66 | movingClass: { 67 | up: 'kinetic-moving-up', 68 | down: 'kinetic-moving-down', 69 | left: 'kinetic-moving-left', 70 | right: 'kinetic-moving-right' 71 | }, 72 | deceleratingClass: { 73 | up: 'kinetic-decelerating-up', 74 | down: 'kinetic-decelerating-down', 75 | left: 'kinetic-decelerating-left', 76 | right: 'kinetic-decelerating-right' 77 | } 78 | }; 79 | 80 | 81 | // Public functions 82 | 83 | Kinetic.prototype.start = function (options){ 84 | this.settings = $.extend(this.settings, options); 85 | this.velocity = options.velocity || this.velocity; 86 | this.velocityY = options.velocityY || this.velocityY; 87 | this.settings.decelerate = false; 88 | this._move(); 89 | }; 90 | 91 | Kinetic.prototype.end = function (){ 92 | this.settings.decelerate = true; 93 | }; 94 | 95 | Kinetic.prototype.stop = function (){ 96 | this.velocity = 0; 97 | this.velocityY = 0; 98 | this.settings.decelerate = true; 99 | if ($.isFunction(this.settings.stopped)){ 100 | this.settings.stopped.call(this); 101 | } 102 | }; 103 | 104 | Kinetic.prototype.detach = function (){ 105 | this._detachListeners(); 106 | this.$el 107 | .removeClass(ACTIVE_CLASS) 108 | .css('cursor', ''); 109 | }; 110 | 111 | Kinetic.prototype.attach = function (){ 112 | if (this.$el.hasClass(ACTIVE_CLASS)) { 113 | return; 114 | } 115 | this._attachListeners(this.$el); 116 | this.$el 117 | .addClass(ACTIVE_CLASS) 118 | .css('cursor', this.settings.cursor); 119 | }; 120 | 121 | 122 | // Internal functions 123 | 124 | Kinetic.prototype._initElements = function (){ 125 | this.$el.addClass(ACTIVE_CLASS); 126 | 127 | $.extend(this, { 128 | xpos: null, 129 | prevXPos: false, 130 | ypos: null, 131 | prevYPos: false, 132 | mouseDown: false, 133 | throttleTimeout: 1000 / this.settings.throttleFPS, 134 | lastMove: null, 135 | elementFocused: null 136 | }); 137 | 138 | this.velocity = 0; 139 | this.velocityY = 0; 140 | 141 | // make sure we reset everything when mouse up 142 | $(document) 143 | .mouseup($.proxy(this._resetMouse, this)) 144 | .click($.proxy(this._resetMouse, this)); 145 | 146 | this._initEvents(); 147 | 148 | this.$el.css('cursor', this.settings.cursor); 149 | 150 | if (this.settings.triggerHardware){ 151 | this.$el.css({ 152 | '-webkit-transform': 'translate3d(0,0,0)', 153 | '-webkit-perspective': '1000', 154 | '-webkit-backface-visibility': 'hidden' 155 | }); 156 | } 157 | }; 158 | 159 | Kinetic.prototype._initEvents = function(){ 160 | var self = this; 161 | this.settings.events = { 162 | touchStart: function (e){ 163 | var touch; 164 | if (self._useTarget(e.target, e)){ 165 | touch = e.originalEvent.touches[0]; 166 | self._start(touch.clientX, touch.clientY); 167 | e.stopPropagation(); 168 | } 169 | }, 170 | touchMove: function (e){ 171 | var touch; 172 | if (self.mouseDown){ 173 | touch = e.originalEvent.touches[0]; 174 | self._inputmove(touch.clientX, touch.clientY); 175 | if (e.preventDefault){ 176 | e.preventDefault(); 177 | } 178 | } 179 | }, 180 | inputDown: function (e){ 181 | if (self._useTarget(e.target, e)){ 182 | self._start(e.clientX, e.clientY); 183 | self.elementFocused = e.target; 184 | if (e.target.nodeName === 'IMG'){ 185 | e.preventDefault(); 186 | } 187 | e.stopPropagation(); 188 | } 189 | }, 190 | inputEnd: function (e){ 191 | if (self._useTarget(e.target, e)){ 192 | self._end(); 193 | self.elementFocused = null; 194 | if (e.preventDefault){ 195 | e.preventDefault(); 196 | } 197 | } 198 | }, 199 | inputMove: function (e){ 200 | if (self.mouseDown){ 201 | self._inputmove(e.clientX, e.clientY); 202 | if (e.preventDefault){ 203 | e.preventDefault(); 204 | } 205 | } 206 | }, 207 | scroll: function (e){ 208 | if ($.isFunction(self.settings.moved)){ 209 | self.settings.moved.call(self, self.settings); 210 | } 211 | if (e.preventDefault){ 212 | e.preventDefault(); 213 | } 214 | }, 215 | inputClick: function (e){ 216 | if (Math.abs(self.velocity) > 0){ 217 | e.preventDefault(); 218 | return false; 219 | } 220 | }, 221 | // prevent drag and drop images in ie 222 | dragStart: function (e){ 223 | if (self._useTarget(e.target, e) && self.elementFocused){ 224 | return false; 225 | } 226 | } 227 | }; 228 | 229 | this._attachListeners(this.$el, this.settings); 230 | 231 | }; 232 | 233 | Kinetic.prototype._inputmove = function (clientX, clientY){ 234 | var $this = this.$el; 235 | var el = this.el; 236 | 237 | if (!this.lastMove || new Date() > new Date(this.lastMove.getTime() + this.throttleTimeout)){ 238 | this.lastMove = new Date(); 239 | 240 | if (this.mouseDown && (this.xpos || this.ypos)){ 241 | if (this.elementFocused){ 242 | $(this.elementFocused).blur(); 243 | this.elementFocused = null; 244 | $this.focus(); 245 | } 246 | 247 | this.settings.decelerate = false; 248 | this.velocity = this.velocityY = 0; 249 | 250 | var scrollLeft = this.scrollLeft(); 251 | var scrollTop = this.scrollTop(); 252 | var movedX = (clientX - this.xpos); 253 | var movedY = (clientY - this.ypos); 254 | 255 | this.scrollLeft(this.settings.x ? scrollLeft - movedX : scrollLeft); 256 | this.scrollTop(this.settings.y ? scrollTop - movedY : scrollTop); 257 | 258 | this.prevXPos = this.xpos; 259 | this.prevYPos = this.ypos; 260 | this.xpos = clientX; 261 | this.ypos = clientY; 262 | 263 | this._calculateVelocities(); 264 | this._setMoveClasses(this.settings.movingClass); 265 | 266 | if ($.isFunction(this.settings.moved)){ 267 | this.settings.moved.call($this, this.settings); 268 | } 269 | } 270 | } 271 | }; 272 | 273 | Kinetic.prototype._calculateVelocities = function (){ 274 | this.velocity = this._capVelocity(this.prevXPos - this.xpos, this.settings.maxvelocity); 275 | this.velocityY = this._capVelocity(this.prevYPos - this.ypos, this.settings.maxvelocity); 276 | }; 277 | 278 | Kinetic.prototype._end = function (){ 279 | if (this.xpos && this.prevXPos && this.settings.decelerate === false){ 280 | this.settings.decelerate = true; 281 | this._calculateVelocities(); 282 | this.xpos = this.prevXPos = this.mouseDown = false; 283 | this._move(); 284 | } 285 | }; 286 | 287 | Kinetic.prototype._useTarget = function (target, event){ 288 | if ($.isFunction(this.settings.filterTarget)){ 289 | return this.settings.filterTarget.call(this, target, event) !== false; 290 | } 291 | return true; 292 | }; 293 | 294 | Kinetic.prototype._start = function (clientX, clientY){ 295 | this.mouseDown = true; 296 | this.velocity = this.prevXPos = 0; 297 | this.velocityY = this.prevYPos = 0; 298 | this.xpos = clientX; 299 | this.ypos = clientY; 300 | }; 301 | 302 | Kinetic.prototype._resetMouse = function (){ 303 | this.xpos = false; 304 | this.ypos = false; 305 | this.mouseDown = false; 306 | }; 307 | 308 | Kinetic.prototype._decelerateVelocity = function (velocity, slowdown){ 309 | return Math.floor(Math.abs(velocity)) === 0 ? 0 // is velocity less than 1? 310 | : velocity * slowdown; // reduce slowdown 311 | }; 312 | 313 | Kinetic.prototype._capVelocity = function (velocity, max){ 314 | var newVelocity = velocity; 315 | if (velocity > 0){ 316 | if (velocity > max){ 317 | newVelocity = max; 318 | } 319 | } else { 320 | if (velocity < (0 - max)){ 321 | newVelocity = (0 - max); 322 | } 323 | } 324 | return newVelocity; 325 | }; 326 | 327 | Kinetic.prototype._setMoveClasses = function (classes){ 328 | // FIXME: consider if we want to apply PL #44, this should not remove 329 | // classes we have not defined on the element! 330 | var settings = this.settings; 331 | var $this = this.$el; 332 | 333 | $this.removeClass(settings.movingClass.up) 334 | .removeClass(settings.movingClass.down) 335 | .removeClass(settings.movingClass.left) 336 | .removeClass(settings.movingClass.right) 337 | .removeClass(settings.deceleratingClass.up) 338 | .removeClass(settings.deceleratingClass.down) 339 | .removeClass(settings.deceleratingClass.left) 340 | .removeClass(settings.deceleratingClass.right); 341 | 342 | if (this.velocity > 0){ 343 | $this.addClass(classes.right); 344 | } 345 | if (this.velocity < 0){ 346 | $this.addClass(classes.left); 347 | } 348 | if (this.velocityY > 0){ 349 | $this.addClass(classes.down); 350 | } 351 | if (this.velocityY < 0){ 352 | $this.addClass(classes.up); 353 | } 354 | 355 | }; 356 | 357 | 358 | // do the actual kinetic movement 359 | Kinetic.prototype._move = function (){ 360 | var $scroller = this.$el; 361 | var scroller = this.el; 362 | var self = this; 363 | var settings = self.settings; 364 | 365 | // set scrollLeft 366 | if (settings.x && scroller.scrollWidth > 0){ 367 | this.scrollLeft(this.scrollLeft() + this.velocity); 368 | if (Math.abs(this.velocity) > 0){ 369 | this.velocity = settings.decelerate ? 370 | self._decelerateVelocity(this.velocity, settings.slowdown) : this.velocity; 371 | } 372 | } else { 373 | this.velocity = 0; 374 | } 375 | 376 | // set scrollTop 377 | if (settings.y && scroller.scrollHeight > 0){ 378 | this.scrollTop(this.scrollTop() + this.velocityY); 379 | if (Math.abs(this.velocityY) > 0){ 380 | this.velocityY = settings.decelerate ? 381 | self._decelerateVelocity(this.velocityY, settings.slowdown) : this.velocityY; 382 | } 383 | } else { 384 | this.velocityY = 0; 385 | } 386 | 387 | self._setMoveClasses(settings.deceleratingClass); 388 | 389 | if ($.isFunction(settings.moved)){ 390 | settings.moved.call(this, settings); 391 | } 392 | 393 | if (Math.abs(this.velocity) > 0 || Math.abs(this.velocityY) > 0){ 394 | if (!this.moving) { 395 | this.moving = true; 396 | // tick for next movement 397 | window.requestAnimationFrame(function (){ 398 | self.moving = false; 399 | self._move(); 400 | }); 401 | } 402 | } else { 403 | self.stop(); 404 | } 405 | }; 406 | 407 | // get current scroller to apply positioning to 408 | Kinetic.prototype._getScroller = function(){ 409 | var $scroller = this.$el; 410 | if (this.$el.is('body') || this.$el.is('html')){ 411 | $scroller = $(window); 412 | } 413 | return $scroller; 414 | }; 415 | 416 | // set the scroll position 417 | Kinetic.prototype.scrollLeft = function(left){ 418 | var $scroller = this._getScroller(); 419 | if (typeof left === 'number'){ 420 | $scroller.scrollLeft(left); 421 | this.settings.scrollLeft = left; 422 | } else { 423 | return $scroller.scrollLeft(); 424 | } 425 | }; 426 | Kinetic.prototype.scrollTop = function(top){ 427 | var $scroller = this._getScroller(); 428 | if (typeof top === 'number'){ 429 | $scroller.scrollTop(top); 430 | this.settings.scrollTop = top; 431 | } else { 432 | return $scroller.scrollTop(); 433 | } 434 | }; 435 | 436 | Kinetic.prototype._attachListeners = function (){ 437 | var $this = this.$el; 438 | var settings = this.settings; 439 | 440 | if ($.support.touch){ 441 | $this 442 | .bind('touchstart', settings.events.touchStart) 443 | .bind('touchend', settings.events.inputEnd) 444 | .bind('touchmove', settings.events.touchMove); 445 | } else { 446 | $this 447 | .mousedown(settings.events.inputDown) 448 | .mouseup(settings.events.inputEnd) 449 | .mousemove(settings.events.inputMove); 450 | } 451 | $this 452 | .click(settings.events.inputClick) 453 | .scroll(settings.events.scroll) 454 | .bind('selectstart', selectStart) // prevent selection when dragging 455 | .bind('dragstart', settings.events.dragStart); 456 | }; 457 | 458 | Kinetic.prototype._detachListeners = function (){ 459 | var $this = this.$el; 460 | var settings = this.settings; 461 | if ($.support.touch){ 462 | $this 463 | .unbind('touchstart', settings.events.touchStart) 464 | .unbind('touchend', settings.events.inputEnd) 465 | .unbind('touchmove', settings.events.touchMove); 466 | } else { 467 | $this 468 | .unbind('mousedown', settings.events.inputDown) 469 | .unbind('mouseup', settings.events.inputEnd) 470 | .unbind('mousemove', settings.events.inputMove); 471 | } 472 | $this 473 | .unbind('click', settings.events.inputClick) 474 | .unbind('scroll', settings.events.scroll) 475 | .unbind('selectstart', selectStart) // prevent selection when dragging 476 | .unbind('dragstart', settings.events.dragStart); 477 | }; 478 | 479 | 480 | // EXPOSE KINETIC CONSTRUCTOR 481 | // ========================== 482 | $.Kinetic = Kinetic; 483 | 484 | // KINETIC PLUGIN DEFINITION 485 | // ======================= 486 | 487 | $.fn.kinetic = function (option, callOptions) { 488 | return this.each(function () { 489 | var $this = $(this); 490 | var instance = $this.data(Kinetic.DATA_KEY); 491 | var options = $.extend({}, Kinetic.DEFAULTS, $this.data(), typeof option === 'object' && option); 492 | 493 | if (!instance) { 494 | $this.data(Kinetic.DATA_KEY, (instance = new Kinetic(this, options))); 495 | } 496 | 497 | if (typeof option === 'string') { 498 | instance[option](callOptions); 499 | } 500 | 501 | }); 502 | }; 503 | 504 | }(window.jQuery || window.Zepto)); 505 | 506 | -------------------------------------------------------------------------------- /demos/body-html/demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.kinetic demos 5 | 6 | 7 | 8 | 9 | 10 | 74 | 75 | 76 |
77 |

jQuery.kinetic demos

78 |

79 | Drag a mouse or use touch gestures over the windows below to scroll 80 | the pane. If you let go with momentum the scrolling will slow 81 | gradually. 82 |

83 |
84 |
85 | wembley stadium 86 |
87 |
88 |
89 | < left | 90 | right > 91 |    --    92 | end (decelerates) 93 | 94 |    --    95 | stop (stop immediately) 96 | 97 |    --    98 | detach 99 | 100 |    --    101 | attach 102 |
103 | 125 | 126 |

Options

127 |

128 | View Readme file 129 |

130 | 131 |
132 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean a laoreet ligula. Pellentesque dui risus, luctus vitae nunc in, faucibus aliquam mauris. Integer congue nisi mauris, a cursus nibh posuere nec. Proin at tristique lacus. Aenean enim ante, condimentum id accumsan in, vehicula nec purus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris egestas nibh quis ligula auctor, et sollicitudin mi aliquet. Aliquam pretium ligula a diam auctor, eu tincidunt sem tempus. Proin scelerisque vitae nisl nec placerat. Phasellus dictum suscipit magna ut luctus. Morbi diam mauris, elementum ut mattis eleifend, semper in ligula.

133 | 134 |

Etiam augue sem, imperdiet id metus ornare, eleifend egestas nulla. Ut vestibulum lorem turpis, ut sollicitudin turpis placerat a. Cras feugiat faucibus nibh, ac egestas est porta in. In cursus nulla ac rhoncus vestibulum. Nullam dignissim pulvinar mauris, gravida auctor quam sodales euismod. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc auctor fringilla augue eget ultricies. Sed laoreet magna id lobortis mollis. Nullam lacinia urna nisl, ac lacinia felis blandit in. Morbi luctus vitae enim ac ullamcorper. Praesent mollis aliquam mi sed condimentum. Donec in turpis ut enim posuere lobortis vel at quam. Donec velit risus, feugiat a rutrum tempus, porttitor sagittis enim.

135 | 136 |

Suspendisse eu urna nec odio interdum imperdiet in vel ipsum. Etiam iaculis volutpat lacus, vitae mollis sapien ullamcorper pellentesque. Vivamus massa felis, cursus in justo vel, iaculis ultrices felis. Proin risus risus, sodales at ullamcorper nec, ornare quis metus. Mauris ullamcorper eros eget mauris auctor tristique. Quisque quis gravida lectus. Mauris ut tincidunt est. Etiam euismod, nisl eget eleifend dictum, leo urna commodo ante, sed placerat turpis purus vitae augue. Fusce quis ligula ullamcorper, rutrum diam id, vestibulum felis. Aenean rutrum facilisis nibh at vestibulum.

137 | 138 |

Nulla ornare nisl vitae nisi interdum dapibus. Maecenas tempor elit a tempor pellentesque. Praesent mi ligula, faucibus eget faucibus scelerisque, feugiat sit amet neque. Nulla fermentum tristique mauris et condimentum. Integer nibh neque, sodales in mauris consectetur, gravida bibendum quam. Cras posuere cursus ante. Nunc eget mauris auctor, laoreet dui vel, consequat orci. Vestibulum nec tempus odio. Cras neque lectus, ultricies nec ultricies at, convallis viverra felis. Mauris quis erat quis erat ullamcorper venenatis nec eu risus. Proin risus elit, porta non tristique in, faucibus vel quam. Nullam luctus eros at tellus commodo imperdiet.

139 | 140 |

Proin aliquam orci nibh, at venenatis lectus ornare non. Ut congue mauris ligula, a lacinia tellus accumsan et. Cras ipsum ante, ullamcorper sed fringilla quis, fringilla adipiscing risus. Aenean dapibus orci non orci sodales, sit amet vulputate ligula placerat. Suspendisse id neque tempor, posuere lacus vitae, pulvinar mi. Phasellus dapibus magna odio, sed varius est cursus ut. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin at magna sapien. Aenean quis arcu dignissim, luctus lacus sit amet, pulvinar quam. Pellentesque sed libero sapien. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla velit odio, sodales eget est ut, tincidunt ullamcorper lorem. Maecenas eu sollicitudin ipsum. Nulla id lobortis nisl.

141 | 142 |

Nulla sed mi mi. Aliquam erat volutpat. Fusce bibendum consectetur elit sed pellentesque. Praesent leo erat, facilisis vitae turpis et, auctor sollicitudin dolor. Praesent ut neque venenatis, euismod nulla tincidunt, tincidunt libero. Fusce tincidunt euismod lacinia. Nunc vitae purus at dolor interdum tempus ornare at urna. Phasellus in rutrum nisi. Cras eu ullamcorper velit. Morbi ligula mauris, convallis vitae tellus in, rhoncus faucibus metus. Aenean eleifend dolor arcu, ac porttitor diam varius at. Nam nec quam mauris.

143 | 144 |

Nulla sed erat metus. Duis sodales mauris massa. Nunc leo nibh, tincidunt et nisi eget, pharetra ultricies lorem. Maecenas in ipsum hendrerit, tincidunt massa at, sagittis risus. Aenean sed velit pellentesque, hendrerit urna ac, commodo sapien. Pellentesque dictum ligula tincidunt porttitor ornare. Donec vitae dolor sodales, porta nibh quis, laoreet felis. Etiam fringilla consequat mattis.

145 | 146 |

Nunc blandit arcu euismod dictum ullamcorper. Nulla pharetra ornare risus, sed congue dui tempus non. Phasellus lobortis fermentum nisi, quis tristique urna cursus id. Curabitur lobortis at justo nec semper. Aenean mauris tellus, varius sit amet rutrum vitae, sollicitudin vel mauris. Sed sed tortor in ligula hendrerit tincidunt. Suspendisse potenti. In in augue in sem dapibus scelerisque sed ut ligula. Maecenas adipiscing urna at faucibus volutpat. Vestibulum ullamcorper varius laoreet. Quisque magna augue, consectetur nec laoreet ut, tincidunt nec augue. Ut fermentum quam mauris, at pharetra eros semper in. Curabitur hendrerit eros enim, ac pulvinar urna tempor in.

147 | 148 |

Proin ac ante placerat, molestie odio vitae, mattis tellus. Nullam viverra turpis eu nibh volutpat laoreet. Nullam porttitor lectus urna, vel suscipit nulla vestibulum at. Phasellus id nisi id erat imperdiet convallis. Vivamus ut nibh faucibus neque aliquam consequat. Quisque non lacus quis est aliquet condimentum eu ut mauris. Donec auctor erat orci, a imperdiet felis sollicitudin eu. Vivamus lacus nulla, aliquam a elit id, rutrum laoreet ligula. Maecenas dapibus eros posuere, eleifend nulla iaculis, convallis nulla. Nunc tristique risus ipsum, ac accumsan nulla suscipit non. Proin vulputate semper nunc ut varius. Proin erat lectus, vehicula vel tincidunt ut, volutpat non odio.

149 | 150 |

Donec a libero mi. Cras vitae quam sed urna consequat egestas. Donec eget lobortis turpis. Sed suscipit est quam, ut pharetra neque tincidunt eget. Phasellus imperdiet condimentum tristique. Donec bibendum, turpis sed vestibulum facilisis, odio sapien dictum ligula, sit amet iaculis purus felis vitae sapien. Integer velit turpis, sollicitudin vel ipsum at, viverra laoreet odio. Ut scelerisque fringilla quam, eu dictum metus semper vel.

151 | 152 |

Suspendisse sagittis rutrum tellus, eu ullamcorper neque facilisis vitae. Suspendisse nec hendrerit velit. Aliquam a velit blandit, rutrum arcu ac, volutpat lacus. Integer eu aliquam mi. Donec eget commodo sapien. Duis nec suscipit nulla, vitae luctus quam. Mauris at magna facilisis, bibendum leo at, sagittis neque. Donec pellentesque consectetur odio, vel hendrerit lacus varius ac. Maecenas volutpat elit quam, ut consequat nulla accumsan at.

153 | 154 |

Cras id condimentum nulla. Praesent ut dictum odio. Proin fermentum neque eu placerat aliquam. Maecenas orci purus, aliquet ac massa et, aliquet eleifend enim. Pellentesque accumsan lacus ut velit tincidunt euismod. Sed lobortis rhoncus gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam vulputate sit amet nunc quis rutrum. Aenean tincidunt augue eu odio gravida sollicitudin. Pellentesque sed sapien ut diam placerat eleifend vitae a leo. Vivamus rutrum, augue nec interdum interdum, diam sem vulputate elit, nec pharetra lacus tortor nec metus. Curabitur aliquet dui ipsum, non vehicula purus tincidunt tincidunt. Aenean malesuada dignissim dolor eu dapibus. Morbi libero odio, mollis sit amet sagittis vel, tempus ut nisi.

155 | 156 |

Donec diam enim, consequat ut mi a, volutpat luctus nulla. Sed sed eros in erat gravida gravida. Donec dignissim lacus ut quam varius, a consequat mauris vulputate. Aliquam placerat augue nec suscipit vehicula. Cras sit amet neque non mi gravida tincidunt. Nulla condimentum ac velit at ullamcorper. Cras nec lacinia lectus, eget cursus odio. Proin ullamcorper ultrices lacus, eu hendrerit leo volutpat at. Proin eget convallis quam, ac scelerisque diam.

157 | 158 |

Quisque rutrum justo erat, id semper odio semper eu. Suspendisse imperdiet tristique dolor, a tincidunt nibh sollicitudin eu. Sed dignissim eros non felis tincidunt gravida. Duis egestas augue sed lorem facilisis, eget sollicitudin velit placerat. Aliquam eget placerat dolor. Etiam et neque erat. In rhoncus pellentesque fringilla. Fusce aliquam pellentesque urna, ac tincidunt dui pulvinar a. In hac habitasse platea dictumst. Fusce dapibus justo id condimentum condimentum.

159 | 160 |

Duis eu augue rutrum, ultrices elit in, vulputate nibh. Morbi venenatis nulla quis volutpat tempus. Praesent enim odio, ultricies et vulputate ut, facilisis consectetur quam. Donec nec tincidunt felis. Cras arcu odio, blandit quis nisl et, ultricies pulvinar felis. Donec ut viverra orci. Praesent aliquet fringilla elementum. Duis lobortis erat non mauris adipiscing, et tempor odio egestas.

161 | 162 |

In hac habitasse platea dictumst. Pellentesque feugiat nunc at enim tempus, id suscipit ligula rhoncus. Pellentesque egestas vestibulum justo vitae condimentum. Curabitur vitae metus luctus, egestas mauris ut, tempor odio. Nullam sed ante ultricies, pulvinar tellus mollis, luctus ipsum. Etiam porta pharetra enim at condimentum. Curabitur ornare diam quis massa accumsan, in accumsan ante sagittis. Sed dapibus metus urna, eu hendrerit odio dictum sit amet. Suspendisse porta ligula libero, in elementum arcu ullamcorper et. Nam convallis cursus erat sed mollis. Integer vel tristique ligula. Sed auctor rhoncus varius.

163 | 164 |

Vivamus lacinia tempus nunc id gravida. Praesent dictum libero non pellentesque pretium. Suspendisse sodales, ligula non dictum rutrum, tortor libero convallis felis, vitae sollicitudin ligula ligula in nisi. Nunc malesuada, quam in dapibus egestas, orci purus luctus erat, sit amet condimentum erat quam aliquet enim. Duis facilisis varius dui, vitae feugiat urna suscipit eget. Fusce ut odio eu sem commodo tincidunt. Aenean ultricies felis ac neque volutpat, ut pharetra dolor placerat. Nulla viverra suscipit tortor sit amet fringilla. Sed rutrum tortor sed varius sagittis. Sed pretium mollis felis, tincidunt molestie orci scelerisque et.

165 | 166 |

Nulla ut ligula fermentum, euismod urna eu, faucibus quam. Duis fermentum tortor ut eros faucibus, bibendum fringilla urna lacinia. Nunc euismod massa ac lectus volutpat, sed dapibus justo volutpat. Praesent in lacinia augue. Etiam ligula eros, ultricies sed imperdiet ut, placerat sed magna. Morbi pretium nibh a justo condimentum lacinia. Nulla ut nisi vel justo dignissim iaculis. Etiam nec ullamcorper risus, a dapibus lectus. Vivamus mollis nisl eget orci pellentesque varius. In vitae malesuada sem, ut iaculis diam. Ut pharetra nulla id ante feugiat, nec dictum lorem facilisis. Morbi id lorem ultrices, consectetur ante a, tincidunt sem. Duis est libero, consectetur et tortor eget, commodo mollis mauris.

167 | 168 |

Maecenas at augue non risus auctor mattis. Duis quis ultrices lectus. Nam nec lorem eget felis gravida adipiscing. In facilisis enim at enim ultrices tristique. Nulla ullamcorper risus ac placerat rhoncus. Integer aliquam mauris nec quam molestie, eu luctus purus luctus. Ut consectetur nisl eget mauris accumsan, eu auctor quam rhoncus. Nullam rutrum velit eget lobortis porta. Duis luctus odio facilisis, molestie est et, ultricies risus. Quisque dui magna, sollicitudin et lacus vel, dignissim ultricies nisi. Integer faucibus sollicitudin lorem eget pretium. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.

169 | 170 |

Nunc imperdiet consequat arcu quis faucibus. Curabitur fermentum congue mattis. Nunc tristique dapibus nibh, sit amet tincidunt magna volutpat a. Maecenas elit felis, venenatis sit amet sem ac, malesuada suscipit elit. Aenean luctus mattis felis. Praesent auctor eu diam vel interdum. Vestibulum vel mattis tellus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur vel risus in tellus porta molestie. Donec hendrerit ac diam ac condimentum. Suspendisse condimentum fermentum purus sed consequat

171 | 172 |
173 | 174 | 175 |
176 | 177 | 178 | -------------------------------------------------------------------------------- /lib/jquery-ui/themes/base/jquery.ui.theme.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI CSS Framework 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming/API 9 | * 10 | * To view and modify this theme, visit http://jqueryui.com/themeroller/ 11 | */ 12 | 13 | 14 | /* Component containers 15 | ----------------------------------*/ 16 | .ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } 17 | .ui-widget .ui-widget { font-size: 1em; } 18 | .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } 19 | .ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } 20 | .ui-widget-content a { color: #222222/*{fcContent}*/; } 21 | .ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } 22 | .ui-widget-header a { color: #222222/*{fcHeader}*/; } 23 | 24 | /* Interaction states 25 | ----------------------------------*/ 26 | .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } 27 | .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } 28 | .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } 29 | .ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } 30 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } 31 | .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } 32 | .ui-widget :active { outline: none; } 33 | 34 | /* Interaction Cues 35 | ----------------------------------*/ 36 | .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } 37 | .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } 38 | .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } 39 | .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } 40 | .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } 41 | .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } 42 | .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 43 | .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 44 | 45 | /* Icons 46 | ----------------------------------*/ 47 | 48 | /* states and images */ 49 | .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 50 | .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 51 | .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } 52 | .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } 53 | .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } 54 | .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } 55 | .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } 56 | .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } 57 | 58 | /* positioning */ 59 | .ui-icon-carat-1-n { background-position: 0 0; } 60 | .ui-icon-carat-1-ne { background-position: -16px 0; } 61 | .ui-icon-carat-1-e { background-position: -32px 0; } 62 | .ui-icon-carat-1-se { background-position: -48px 0; } 63 | .ui-icon-carat-1-s { background-position: -64px 0; } 64 | .ui-icon-carat-1-sw { background-position: -80px 0; } 65 | .ui-icon-carat-1-w { background-position: -96px 0; } 66 | .ui-icon-carat-1-nw { background-position: -112px 0; } 67 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 68 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 69 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 70 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 71 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 72 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 73 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 74 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 75 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 76 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 77 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 78 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 79 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 80 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 81 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 82 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 83 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 84 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 85 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 86 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 87 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 88 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 89 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 90 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 91 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 92 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 93 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 94 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 95 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 96 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 97 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 98 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 99 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 100 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 101 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 102 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 103 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 104 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 105 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 106 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 107 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 108 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 109 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 110 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 111 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 112 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 113 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 114 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 115 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 116 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 117 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 118 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 119 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 120 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 121 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 122 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 123 | .ui-icon-arrow-4 { background-position: 0 -80px; } 124 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 125 | .ui-icon-extlink { background-position: -32px -80px; } 126 | .ui-icon-newwin { background-position: -48px -80px; } 127 | .ui-icon-refresh { background-position: -64px -80px; } 128 | .ui-icon-shuffle { background-position: -80px -80px; } 129 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 130 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 131 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 132 | .ui-icon-folder-open { background-position: -16px -96px; } 133 | .ui-icon-document { background-position: -32px -96px; } 134 | .ui-icon-document-b { background-position: -48px -96px; } 135 | .ui-icon-note { background-position: -64px -96px; } 136 | .ui-icon-mail-closed { background-position: -80px -96px; } 137 | .ui-icon-mail-open { background-position: -96px -96px; } 138 | .ui-icon-suitcase { background-position: -112px -96px; } 139 | .ui-icon-comment { background-position: -128px -96px; } 140 | .ui-icon-person { background-position: -144px -96px; } 141 | .ui-icon-print { background-position: -160px -96px; } 142 | .ui-icon-trash { background-position: -176px -96px; } 143 | .ui-icon-locked { background-position: -192px -96px; } 144 | .ui-icon-unlocked { background-position: -208px -96px; } 145 | .ui-icon-bookmark { background-position: -224px -96px; } 146 | .ui-icon-tag { background-position: -240px -96px; } 147 | .ui-icon-home { background-position: 0 -112px; } 148 | .ui-icon-flag { background-position: -16px -112px; } 149 | .ui-icon-calendar { background-position: -32px -112px; } 150 | .ui-icon-cart { background-position: -48px -112px; } 151 | .ui-icon-pencil { background-position: -64px -112px; } 152 | .ui-icon-clock { background-position: -80px -112px; } 153 | .ui-icon-disk { background-position: -96px -112px; } 154 | .ui-icon-calculator { background-position: -112px -112px; } 155 | .ui-icon-zoomin { background-position: -128px -112px; } 156 | .ui-icon-zoomout { background-position: -144px -112px; } 157 | .ui-icon-search { background-position: -160px -112px; } 158 | .ui-icon-wrench { background-position: -176px -112px; } 159 | .ui-icon-gear { background-position: -192px -112px; } 160 | .ui-icon-heart { background-position: -208px -112px; } 161 | .ui-icon-star { background-position: -224px -112px; } 162 | .ui-icon-link { background-position: -240px -112px; } 163 | .ui-icon-cancel { background-position: 0 -128px; } 164 | .ui-icon-plus { background-position: -16px -128px; } 165 | .ui-icon-plusthick { background-position: -32px -128px; } 166 | .ui-icon-minus { background-position: -48px -128px; } 167 | .ui-icon-minusthick { background-position: -64px -128px; } 168 | .ui-icon-close { background-position: -80px -128px; } 169 | .ui-icon-closethick { background-position: -96px -128px; } 170 | .ui-icon-key { background-position: -112px -128px; } 171 | .ui-icon-lightbulb { background-position: -128px -128px; } 172 | .ui-icon-scissors { background-position: -144px -128px; } 173 | .ui-icon-clipboard { background-position: -160px -128px; } 174 | .ui-icon-copy { background-position: -176px -128px; } 175 | .ui-icon-contact { background-position: -192px -128px; } 176 | .ui-icon-image { background-position: -208px -128px; } 177 | .ui-icon-video { background-position: -224px -128px; } 178 | .ui-icon-script { background-position: -240px -128px; } 179 | .ui-icon-alert { background-position: 0 -144px; } 180 | .ui-icon-info { background-position: -16px -144px; } 181 | .ui-icon-notice { background-position: -32px -144px; } 182 | .ui-icon-help { background-position: -48px -144px; } 183 | .ui-icon-check { background-position: -64px -144px; } 184 | .ui-icon-bullet { background-position: -80px -144px; } 185 | .ui-icon-radio-off { background-position: -96px -144px; } 186 | .ui-icon-radio-on { background-position: -112px -144px; } 187 | .ui-icon-pin-w { background-position: -128px -144px; } 188 | .ui-icon-pin-s { background-position: -144px -144px; } 189 | .ui-icon-play { background-position: 0 -160px; } 190 | .ui-icon-pause { background-position: -16px -160px; } 191 | .ui-icon-seek-next { background-position: -32px -160px; } 192 | .ui-icon-seek-prev { background-position: -48px -160px; } 193 | .ui-icon-seek-end { background-position: -64px -160px; } 194 | .ui-icon-seek-start { background-position: -80px -160px; } 195 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 196 | .ui-icon-seek-first { background-position: -80px -160px; } 197 | .ui-icon-stop { background-position: -96px -160px; } 198 | .ui-icon-eject { background-position: -112px -160px; } 199 | .ui-icon-volume-off { background-position: -128px -160px; } 200 | .ui-icon-volume-on { background-position: -144px -160px; } 201 | .ui-icon-power { background-position: 0 -176px; } 202 | .ui-icon-signal-diag { background-position: -16px -176px; } 203 | .ui-icon-signal { background-position: -32px -176px; } 204 | .ui-icon-battery-0 { background-position: -48px -176px; } 205 | .ui-icon-battery-1 { background-position: -64px -176px; } 206 | .ui-icon-battery-2 { background-position: -80px -176px; } 207 | .ui-icon-battery-3 { background-position: -96px -176px; } 208 | .ui-icon-circle-plus { background-position: 0 -192px; } 209 | .ui-icon-circle-minus { background-position: -16px -192px; } 210 | .ui-icon-circle-close { background-position: -32px -192px; } 211 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 212 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 213 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 214 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 215 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 216 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 217 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 218 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 219 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 220 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 221 | .ui-icon-circle-check { background-position: -208px -192px; } 222 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 223 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 224 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 225 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 226 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 227 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 228 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 229 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 230 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 231 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 232 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 233 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 234 | 235 | 236 | /* Misc visuals 237 | ----------------------------------*/ 238 | 239 | /* Corner radius */ 240 | .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } 241 | .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } 242 | .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } 243 | .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 244 | 245 | /* Overlays */ 246 | .ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } 247 | .ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } -------------------------------------------------------------------------------- /lib/jquery-ui/themes/ui-lightness/jquery-ui-1.8.16.custom.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI CSS Framework 1.8.16 3 | * 4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 5 | * Dual licensed under the MIT or GPL Version 2 licenses. 6 | * http://jquery.org/license 7 | * 8 | * http://docs.jquery.com/UI/Theming/API 9 | */ 10 | 11 | /* Layout helpers 12 | ----------------------------------*/ 13 | .ui-helper-hidden { display: none; } 14 | .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } 15 | .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 16 | .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } 17 | .ui-helper-clearfix { display: inline-block; } 18 | /* required comment for clearfix to work in Opera \*/ 19 | * html .ui-helper-clearfix { height:1%; } 20 | .ui-helper-clearfix { display:block; } 21 | /* end clearfix */ 22 | .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 23 | 24 | 25 | /* Interaction Cues 26 | ----------------------------------*/ 27 | .ui-state-disabled { cursor: default !important; } 28 | 29 | 30 | /* Icons 31 | ----------------------------------*/ 32 | 33 | /* states and images */ 34 | .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 35 | 36 | 37 | /* Misc visuals 38 | ----------------------------------*/ 39 | 40 | /* Overlays */ 41 | .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 42 | 43 | 44 | /* 45 | * jQuery UI CSS Framework 1.8.16 46 | * 47 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 48 | * Dual licensed under the MIT or GPL Version 2 licenses. 49 | * http://jquery.org/license 50 | * 51 | * http://docs.jquery.com/UI/Theming/API 52 | * 53 | * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px 54 | */ 55 | 56 | 57 | /* Component containers 58 | ----------------------------------*/ 59 | .ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } 60 | .ui-widget .ui-widget { font-size: 1em; } 61 | .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } 62 | .ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } 63 | .ui-widget-content a { color: #333333; } 64 | .ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } 65 | .ui-widget-header a { color: #ffffff; } 66 | 67 | /* Interaction states 68 | ----------------------------------*/ 69 | .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } 70 | .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } 71 | .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } 72 | .ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } 73 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } 74 | .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } 75 | .ui-widget :active { outline: none; } 76 | 77 | /* Interaction Cues 78 | ----------------------------------*/ 79 | .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } 80 | .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } 81 | .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } 82 | .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } 83 | .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } 84 | .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } 85 | .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 86 | .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 87 | 88 | /* Icons 89 | ----------------------------------*/ 90 | 91 | /* states and images */ 92 | .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } 93 | .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } 94 | .ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } 95 | .ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } 96 | .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } 97 | .ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } 98 | .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } 99 | .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } 100 | 101 | /* positioning */ 102 | .ui-icon-carat-1-n { background-position: 0 0; } 103 | .ui-icon-carat-1-ne { background-position: -16px 0; } 104 | .ui-icon-carat-1-e { background-position: -32px 0; } 105 | .ui-icon-carat-1-se { background-position: -48px 0; } 106 | .ui-icon-carat-1-s { background-position: -64px 0; } 107 | .ui-icon-carat-1-sw { background-position: -80px 0; } 108 | .ui-icon-carat-1-w { background-position: -96px 0; } 109 | .ui-icon-carat-1-nw { background-position: -112px 0; } 110 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 111 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 112 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 113 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 114 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 115 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 116 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 117 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 118 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 119 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 120 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 121 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 122 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 123 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 124 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 125 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 126 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 127 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 128 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 129 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 130 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 131 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 132 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 133 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 134 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 135 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 136 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 137 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 138 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 139 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 140 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 141 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 142 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 143 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 144 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 145 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 146 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 147 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 148 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 149 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 150 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 151 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 152 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 153 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 154 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 155 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 156 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 157 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 158 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 159 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 160 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 161 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 162 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 163 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 164 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 165 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 166 | .ui-icon-arrow-4 { background-position: 0 -80px; } 167 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 168 | .ui-icon-extlink { background-position: -32px -80px; } 169 | .ui-icon-newwin { background-position: -48px -80px; } 170 | .ui-icon-refresh { background-position: -64px -80px; } 171 | .ui-icon-shuffle { background-position: -80px -80px; } 172 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 173 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 174 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 175 | .ui-icon-folder-open { background-position: -16px -96px; } 176 | .ui-icon-document { background-position: -32px -96px; } 177 | .ui-icon-document-b { background-position: -48px -96px; } 178 | .ui-icon-note { background-position: -64px -96px; } 179 | .ui-icon-mail-closed { background-position: -80px -96px; } 180 | .ui-icon-mail-open { background-position: -96px -96px; } 181 | .ui-icon-suitcase { background-position: -112px -96px; } 182 | .ui-icon-comment { background-position: -128px -96px; } 183 | .ui-icon-person { background-position: -144px -96px; } 184 | .ui-icon-print { background-position: -160px -96px; } 185 | .ui-icon-trash { background-position: -176px -96px; } 186 | .ui-icon-locked { background-position: -192px -96px; } 187 | .ui-icon-unlocked { background-position: -208px -96px; } 188 | .ui-icon-bookmark { background-position: -224px -96px; } 189 | .ui-icon-tag { background-position: -240px -96px; } 190 | .ui-icon-home { background-position: 0 -112px; } 191 | .ui-icon-flag { background-position: -16px -112px; } 192 | .ui-icon-calendar { background-position: -32px -112px; } 193 | .ui-icon-cart { background-position: -48px -112px; } 194 | .ui-icon-pencil { background-position: -64px -112px; } 195 | .ui-icon-clock { background-position: -80px -112px; } 196 | .ui-icon-disk { background-position: -96px -112px; } 197 | .ui-icon-calculator { background-position: -112px -112px; } 198 | .ui-icon-zoomin { background-position: -128px -112px; } 199 | .ui-icon-zoomout { background-position: -144px -112px; } 200 | .ui-icon-search { background-position: -160px -112px; } 201 | .ui-icon-wrench { background-position: -176px -112px; } 202 | .ui-icon-gear { background-position: -192px -112px; } 203 | .ui-icon-heart { background-position: -208px -112px; } 204 | .ui-icon-star { background-position: -224px -112px; } 205 | .ui-icon-link { background-position: -240px -112px; } 206 | .ui-icon-cancel { background-position: 0 -128px; } 207 | .ui-icon-plus { background-position: -16px -128px; } 208 | .ui-icon-plusthick { background-position: -32px -128px; } 209 | .ui-icon-minus { background-position: -48px -128px; } 210 | .ui-icon-minusthick { background-position: -64px -128px; } 211 | .ui-icon-close { background-position: -80px -128px; } 212 | .ui-icon-closethick { background-position: -96px -128px; } 213 | .ui-icon-key { background-position: -112px -128px; } 214 | .ui-icon-lightbulb { background-position: -128px -128px; } 215 | .ui-icon-scissors { background-position: -144px -128px; } 216 | .ui-icon-clipboard { background-position: -160px -128px; } 217 | .ui-icon-copy { background-position: -176px -128px; } 218 | .ui-icon-contact { background-position: -192px -128px; } 219 | .ui-icon-image { background-position: -208px -128px; } 220 | .ui-icon-video { background-position: -224px -128px; } 221 | .ui-icon-script { background-position: -240px -128px; } 222 | .ui-icon-alert { background-position: 0 -144px; } 223 | .ui-icon-info { background-position: -16px -144px; } 224 | .ui-icon-notice { background-position: -32px -144px; } 225 | .ui-icon-help { background-position: -48px -144px; } 226 | .ui-icon-check { background-position: -64px -144px; } 227 | .ui-icon-bullet { background-position: -80px -144px; } 228 | .ui-icon-radio-off { background-position: -96px -144px; } 229 | .ui-icon-radio-on { background-position: -112px -144px; } 230 | .ui-icon-pin-w { background-position: -128px -144px; } 231 | .ui-icon-pin-s { background-position: -144px -144px; } 232 | .ui-icon-play { background-position: 0 -160px; } 233 | .ui-icon-pause { background-position: -16px -160px; } 234 | .ui-icon-seek-next { background-position: -32px -160px; } 235 | .ui-icon-seek-prev { background-position: -48px -160px; } 236 | .ui-icon-seek-end { background-position: -64px -160px; } 237 | .ui-icon-seek-start { background-position: -80px -160px; } 238 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 239 | .ui-icon-seek-first { background-position: -80px -160px; } 240 | .ui-icon-stop { background-position: -96px -160px; } 241 | .ui-icon-eject { background-position: -112px -160px; } 242 | .ui-icon-volume-off { background-position: -128px -160px; } 243 | .ui-icon-volume-on { background-position: -144px -160px; } 244 | .ui-icon-power { background-position: 0 -176px; } 245 | .ui-icon-signal-diag { background-position: -16px -176px; } 246 | .ui-icon-signal { background-position: -32px -176px; } 247 | .ui-icon-battery-0 { background-position: -48px -176px; } 248 | .ui-icon-battery-1 { background-position: -64px -176px; } 249 | .ui-icon-battery-2 { background-position: -80px -176px; } 250 | .ui-icon-battery-3 { background-position: -96px -176px; } 251 | .ui-icon-circle-plus { background-position: 0 -192px; } 252 | .ui-icon-circle-minus { background-position: -16px -192px; } 253 | .ui-icon-circle-close { background-position: -32px -192px; } 254 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 255 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 256 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 257 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 258 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 259 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 260 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 261 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 262 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 263 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 264 | .ui-icon-circle-check { background-position: -208px -192px; } 265 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 266 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 267 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 268 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 269 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 270 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 271 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 272 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 273 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 274 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 275 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 276 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 277 | 278 | 279 | /* Misc visuals 280 | ----------------------------------*/ 281 | 282 | /* Corner radius */ 283 | .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } 284 | .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } 285 | .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } 286 | .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } 287 | 288 | /* Overlays */ 289 | .ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } 290 | .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* 291 | * jQuery UI Resizable 1.8.16 292 | * 293 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 294 | * Dual licensed under the MIT or GPL Version 2 licenses. 295 | * http://jquery.org/license 296 | * 297 | * http://docs.jquery.com/UI/Resizable#theming 298 | */ 299 | .ui-resizable { position: relative;} 300 | .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } 301 | .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 302 | .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } 303 | .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } 304 | .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } 305 | .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } 306 | .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 307 | .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 308 | .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 309 | .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* 310 | * jQuery UI Selectable 1.8.16 311 | * 312 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 313 | * Dual licensed under the MIT or GPL Version 2 licenses. 314 | * http://jquery.org/license 315 | * 316 | * http://docs.jquery.com/UI/Selectable#theming 317 | */ 318 | .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } 319 | /* 320 | * jQuery UI Accordion 1.8.16 321 | * 322 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 323 | * Dual licensed under the MIT or GPL Version 2 licenses. 324 | * http://jquery.org/license 325 | * 326 | * http://docs.jquery.com/UI/Accordion#theming 327 | */ 328 | /* IE/Win - Fix animation bug - #4615 */ 329 | .ui-accordion { width: 100%; } 330 | .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 331 | .ui-accordion .ui-accordion-li-fix { display: inline; } 332 | .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 333 | .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } 334 | .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 335 | .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 336 | .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } 337 | .ui-accordion .ui-accordion-content-active { display: block; } 338 | /* 339 | * jQuery UI Dialog 1.8.16 340 | * 341 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 342 | * Dual licensed under the MIT or GPL Version 2 licenses. 343 | * http://jquery.org/license 344 | * 345 | * http://docs.jquery.com/UI/Dialog#theming 346 | */ 347 | .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } 348 | .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } 349 | .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 350 | .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 351 | .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 352 | .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 353 | .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 354 | .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 355 | .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } 356 | .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } 357 | .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 358 | .ui-draggable .ui-dialog-titlebar { cursor: move; } 359 | /* 360 | * jQuery UI Slider 1.8.16 361 | * 362 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 363 | * Dual licensed under the MIT or GPL Version 2 licenses. 364 | * http://jquery.org/license 365 | * 366 | * http://docs.jquery.com/UI/Slider#theming 367 | */ 368 | .ui-slider { position: relative; text-align: left; } 369 | .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } 370 | .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } 371 | 372 | .ui-slider-horizontal { height: .8em; } 373 | .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 374 | .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 375 | .ui-slider-horizontal .ui-slider-range-min { left: 0; } 376 | .ui-slider-horizontal .ui-slider-range-max { right: 0; } 377 | 378 | .ui-slider-vertical { width: .8em; height: 100px; } 379 | .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 380 | .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 381 | .ui-slider-vertical .ui-slider-range-min { bottom: 0; } 382 | .ui-slider-vertical .ui-slider-range-max { top: 0; }/* 383 | * jQuery UI Tabs 1.8.16 384 | * 385 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 386 | * Dual licensed under the MIT or GPL Version 2 licenses. 387 | * http://jquery.org/license 388 | * 389 | * http://docs.jquery.com/UI/Tabs#theming 390 | */ 391 | .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 392 | .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } 393 | .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } 394 | .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } 395 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } 396 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 397 | .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 398 | .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } 399 | .ui-tabs .ui-tabs-hide { display: none !important; } 400 | /* 401 | * jQuery UI Datepicker 1.8.16 402 | * 403 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 404 | * Dual licensed under the MIT or GPL Version 2 licenses. 405 | * http://jquery.org/license 406 | * 407 | * http://docs.jquery.com/UI/Datepicker#theming 408 | */ 409 | .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } 410 | .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 411 | .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 412 | .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 413 | .ui-datepicker .ui-datepicker-prev { left:2px; } 414 | .ui-datepicker .ui-datepicker-next { right:2px; } 415 | .ui-datepicker .ui-datepicker-prev-hover { left:1px; } 416 | .ui-datepicker .ui-datepicker-next-hover { right:1px; } 417 | .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } 418 | .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 419 | .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } 420 | .ui-datepicker select.ui-datepicker-month-year {width: 100%;} 421 | .ui-datepicker select.ui-datepicker-month, 422 | .ui-datepicker select.ui-datepicker-year { width: 49%;} 423 | .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 424 | .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } 425 | .ui-datepicker td { border: 0; padding: 1px; } 426 | .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 427 | .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 428 | .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 429 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 430 | 431 | /* with multiple calendars */ 432 | .ui-datepicker.ui-datepicker-multi { width:auto; } 433 | .ui-datepicker-multi .ui-datepicker-group { float:left; } 434 | .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 435 | .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 436 | .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 437 | .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 438 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 439 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 440 | .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 441 | .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } 442 | 443 | /* RTL support */ 444 | .ui-datepicker-rtl { direction: rtl; } 445 | .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 446 | .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 447 | .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 448 | .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 449 | .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 450 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 451 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 452 | .ui-datepicker-rtl .ui-datepicker-group { float:right; } 453 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 454 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 455 | 456 | /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 457 | .ui-datepicker-cover { 458 | display: none; /*sorry for IE5*/ 459 | display/**/: block; /*sorry for IE5*/ 460 | position: absolute; /*must have*/ 461 | z-index: -1; /*must have*/ 462 | filter: mask(); /*must have*/ 463 | top: -4px; /*must have*/ 464 | left: -4px; /*must have*/ 465 | width: 200px; /*must have*/ 466 | height: 200px; /*must have*/ 467 | }/* 468 | * jQuery UI Progressbar 1.8.16 469 | * 470 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 471 | * Dual licensed under the MIT or GPL Version 2 licenses. 472 | * http://jquery.org/license 473 | * 474 | * http://docs.jquery.com/UI/Progressbar#theming 475 | */ 476 | .ui-progressbar { height:2em; text-align: left; } 477 | .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } --------------------------------------------------------------------------------