diff --git a/build/build.xml b/build/build.xml index 0f4131b0e..cdd5aff11 100644 --- a/build/build.xml +++ b/build/build.xml @@ -22,24 +22,26 @@ + - + + - + - + @@ -49,7 +51,6 @@ - @@ -57,7 +58,7 @@ - + @@ -66,9 +67,33 @@ - + + + + + @@ -108,45 +133,44 @@ - - - - + + + + - + - + + + + + + - - + + - + - + - - - - - + + + - - - - - + @@ -257,5 +281,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${relativepath} + + + + + + + + diff --git a/demos/autocomplete/combobox.html b/demos/autocomplete/combobox.html index 4c6b656a1..3001f7d17 100644 --- a/demos/autocomplete/combobox.html +++ b/demos/autocomplete/combobox.html @@ -30,24 +30,23 @@ var matcher = new RegExp(request.term, "i"); response(select.children("option").map(function() { var text = $(this).text(); - if (!request.term || matcher.test(text)) + if (this.value && (!request.term || matcher.test(text))) return { - id: $(this).val(), + id: this.value, label: text.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1"), value: text }; })); }, delay: 0, - select: function(e, ui) { + change: function(event, ui) { if (!ui.item) { // remove invalid value, as it didn't match anything $(this).val(""); return false; } - $(this).focus(); select.val(ui.item.id); - self._trigger("selected", null, { + self._trigger("selected", event, { item: select.find("[value='" + ui.item.id + "']") }); @@ -56,6 +55,7 @@ }) .addClass("ui-widget ui-widget-content ui-corner-left"); $("") + .attr("tabIndex", -1) .attr("title", "Show All Items") .insertAfter(input) .button({ @@ -81,7 +81,10 @@ })(jQuery); $(function() { - $("select").combobox(); + $("#combobox").combobox(); + $("#toggle").click(function() { + $("#combobox").toggle(); + }); }); @@ -91,7 +94,8 @@
- + @@ -107,6 +111,7 @@
+ diff --git a/demos/autocomplete/index.html b/demos/autocomplete/index.html index 9389b076d..42f13dc4b 100644 --- a/demos/autocomplete/index.html +++ b/demos/autocomplete/index.html @@ -16,6 +16,7 @@
  • Combobox
  • Custom data and display
  • XML data parsed once
  • +
  • Categories
  • diff --git a/demos/button/splitbutton.html b/demos/button/splitbutton.html index b42fe520a..7e4d66038 100644 --- a/demos/button/splitbutton.html +++ b/demos/button/splitbutton.html @@ -11,21 +11,23 @@ + + + +
    + +
    +

    Products

    +
    +

    T-Shirts

    +
    +
      +
    • Lolcat Shirt
    • +
    • Cheezeburger Shirt
    • +
    • Buckit Shirt
    • +
    +
    +

    Bags

    +
    +
      +
    • Zebra Striped
    • +
    • Black Leather
    • +
    • Alligator Leather
    • +
    +
    +

    Gadgets

    +
    +
      +
    • iPhone
    • +
    • iPod
    • +
    • iPad
    • +
    +
    +
    +
    + +
    +

    Shopping Cart

    +
    +
      +
    1. Add your items here
    2. +
    +
    +
    + +
    + +
    + +

    Demonstrate how to use an accordion to structure products into a catalog and make use drag and drop for adding +them to a shopping cart, where they are sortable.

    + +
    + + diff --git a/demos/index.html b/demos/index.html index c9f690921..db3e2bf83 100644 --- a/demos/index.html +++ b/demos/index.html @@ -25,7 +25,6 @@ - @@ -269,7 +268,6 @@
    Progressbar
    Slider
    Tabs
    -
    Tooltip
    Effects
    Color Animation
    Toggle Class
    diff --git a/demos/tabs/cookie.html b/demos/tabs/cookie.html new file mode 100644 index 000000000..638ee37f2 --- /dev/null +++ b/demos/tabs/cookie.html @@ -0,0 +1,57 @@ + + + + + jQuery UI Tabs - Default functionality + + + + + + + + + + + +
    + +
    + +
    +

    Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.

    +
    +
    +

    Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.

    +
    +
    +

    Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.

    +

    Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.

    +
    +
    + +
    + +
    + +

    Looks the same as the default demo, but uses cookie to store the selected tab, and restore it when the page (re)loads. + +The cookie is stored for a day, so tabs will be restored even after closing the browser. Use cookie: {} for using cookies with default options.

    + +
    + + + diff --git a/demos/tabs/index.html b/demos/tabs/index.html index 48b3636c3..8fc417a4f 100644 --- a/demos/tabs/index.html +++ b/demos/tabs/index.html @@ -17,6 +17,7 @@
  • Sortable
  • Simple manipulation
  • Tabs below content
  • +
  • Cookie persistence
  • diff --git a/demos/tooltip/default.html b/demos/tooltip/default.html deleted file mode 100644 index 22dac4f90..000000000 --- a/demos/tooltip/default.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - jQuery UI Tooltip - Default demo - - - - - - - - - - - - -
    - -

    Tooltips can be attached to any element. When you hover - the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip. -

    -

    But as it's not a native tooltip, it can be styled. Any themes built with - ThemeRoller - will also style tooltip's accordingly.

    -

    Tooltip's are also useful for form elements, to show some additional information in the context of each field.

    -

    -

    Click the field to see the tooltip; when you tab out of the field, it gets hidden.

    - -
    - - - -
    - -

    Hover the links above or use the tab key to cycle the focus on each element.

    - -
    - - - - - diff --git a/demos/tooltip/forms.html b/demos/tooltip/forms.html deleted file mode 100644 index 626161d6e..000000000 --- a/demos/tooltip/forms.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - jQuery UI Tooltip - Default demo - - - - - - - - - - - - - -
    - -
    -
    -
    - - - ? -
    -
    - - - ? -
    -
    - - - ? -
    -
    -
    - -
    - - - -
    - -

    Hover the questionmark-buttons or use the button below to display the help texts all at once. Click again to hide them.

    - -
    - - - - - diff --git a/demos/tooltip/index.html b/demos/tooltip/index.html deleted file mode 100644 index ed5cd10e5..000000000 --- a/demos/tooltip/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - jQuery UI Tooltip Demos - - - - -
    -

    Examples

    - -
    - - - diff --git a/demos/tooltip/tracking.html b/demos/tooltip/tracking.html deleted file mode 100644 index 9af4d0d09..000000000 --- a/demos/tooltip/tracking.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - jQuery UI Tooltip - Default demo - - - - - - - - - - - - -
    - -

    Tooltips can be attached to any element. When you hover - the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip. -

    -

    But as it's not a native tooltip, it can be styled. Any themes built with - ThemeRoller - will also style tooltip's accordingly.

    -

    Tooltip's are also useful for form elements, to show some additional information in the context of each field.

    -

    -

    Click the field to see the tooltip; when you tab out of the field, it gets hidden.

    - -
    - - - -
    - -

    Here the tooltips are positioned relative to the mouse, and follow the mouse while it moves above the element.

    - -
    - - - - - diff --git a/external/qunit.js b/external/qunit.js index 0dd315530..9ef5f8d6f 100644 --- a/external/qunit.js +++ b/external/qunit.js @@ -953,16 +953,14 @@ QUnit.jsDump = (function() { type = "date"; } else if (QUnit.is("Function", obj)) { type = "function"; - } else if (QUnit.is("Array", obj)) { - type = "array"; - } else if (QUnit.is("Window", obj) || QUnit.is("global", obj)) { + } else if (obj.setInterval && obj.document && !obj.nodeType) { type = "window"; - } else if (QUnit.is("HTMLDocument", obj)) { + } else if (obj.nodeType === 9) { type = "document"; - } else if (QUnit.is("HTMLCollection", obj) || QUnit.is("NodeList", obj)) { - type = "nodelist"; - } else if (/^\[object HTML/.test(Object.prototype.toString.call( obj ))) { + } else if (obj.nodeType) { type = "node"; + } else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) { + type = "array"; } else { type = typeof obj; } diff --git a/tests/unit/accordion/accordion.html b/tests/unit/accordion/accordion.html index df0979803..3badebda9 100644 --- a/tests/unit/accordion/accordion.html +++ b/tests/unit/accordion/accordion.html @@ -16,6 +16,20 @@ + @@ -25,7 +39,7 @@ @@ -41,7 +55,7 @@
    There is one obvious advantage: -
    +

    You've seen it coming!
    @@ -51,7 +65,7 @@

    Now that you've got... -
    +

    your bear, you have to admit it!
    @@ -62,7 +76,7 @@

    Rent one bear, ... -
    +

    get two for three beer.

    diff --git a/tests/unit/accordion/accordion_core.js b/tests/unit/accordion/accordion_core.js index 47d2509e6..2bef43149 100644 --- a/tests/unit/accordion/accordion_core.js +++ b/tests/unit/accordion/accordion_core.js @@ -5,17 +5,6 @@ (function($) { -$.ui.accordion.prototype.options.animated = false; - -function state(accordion) { - var args = $.makeArray(arguments).slice(1); - var result = []; - $.each(args, function(i, n) { - result.push( accordion.find(".ui-accordion-content").eq(i).is(":visible") ? 1 : 0 ); - }); - same(args, result) -} - module("accordion: core"); test("handle click on header-descendant", function() { diff --git a/tests/unit/accordion/accordion_methods.js b/tests/unit/accordion/accordion_methods.js index d15a0b710..894d1f30c 100644 --- a/tests/unit/accordion/accordion_methods.js +++ b/tests/unit/accordion/accordion_methods.js @@ -3,15 +3,6 @@ */ (function($) { -function state(accordion) { - var expected = $.makeArray(arguments).slice(1); - var actual = []; - $.each(expected, function(i, n) { - actual.push( accordion.find(".ui-accordion-content").eq(i).is(":visible") ? 1 : 0 ); - }); - same(actual, expected) -} - module("accordion: methods"); test("init", function() { @@ -112,8 +103,7 @@ test("activate, string expression", function() { ac.accordion("activate", ":last"); state(ac, 0, 0, 1); }); -//[ 0, 1, 1 ] result: [ 0, 0, 1 ] -//[ 0, 1, 1] result: [ 0, 0, 1] + test("activate, jQuery or DOM element", function() { var ac = $('#list1').accordion({ active: $("#list1 a:last") }); state(ac, 0, 0, 1); @@ -124,7 +114,9 @@ test("activate, jQuery or DOM element", function() { }); test("resize", function() { - var expected = $('#list1').accordion(); + var expected = $('#list1').parent().height(300).end().accordion({ + fillSpace: true + }); var sizes = []; expected.find(".ui-accordion-content").each(function() { @@ -138,10 +130,15 @@ test("resize", function() { expected.find(".ui-accordion-content").each(function() { sizes2.push($(this).outerHeight()); }); - same(sizes, sizes2); + same(sizes, [246, 246, 246]); - expected.find(".ui-accordion-content:first").height(500) - var sizes3 = []; + expected.parent().height(500); + expected.accordion("resize"); + var sizes2 = []; + expected.find(".ui-accordion-content").each(function() { + sizes2.push($(this).outerHeight()); + }); + same(sizes2, [446, 446, 446]); }); })(jQuery); diff --git a/tests/unit/accordion/accordion_options.js b/tests/unit/accordion/accordion_options.js index cc7fc0369..e46795993 100644 --- a/tests/unit/accordion/accordion_options.js +++ b/tests/unit/accordion/accordion_options.js @@ -3,16 +3,6 @@ */ (function($) { -function state(accordion) { - var expected = $.makeArray(arguments).slice(1); - var actual = []; - $.each(expected, function(i, n) { - actual.push( accordion.find(".ui-accordion-content").eq(i).is(":visible") ? 1 : 0 ); - }); - same(actual, expected) -} - - module("accordion: options"); test("{ active: first child }, default", function() { diff --git a/tests/unit/autocomplete/autocomplete_events.js b/tests/unit/autocomplete/autocomplete_events.js index ccbe66c1b..28a72145e 100644 --- a/tests/unit/autocomplete/autocomplete_events.js +++ b/tests/unit/autocomplete/autocomplete_events.js @@ -12,7 +12,7 @@ module("autocomplete: events", { var data = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "perl"]; test("all events", function() { - expect(11); + expect(12); var ac = $("#autocomplete").autocomplete({ delay: 0, source: data, @@ -34,21 +34,38 @@ test("all events", function() { same(event.type, "autocompleteselect"); same(ui.item, {label:"java", value:"java"}); }, - change: function(event) { + change: function(event, ui) { same(event.type, "autocompletechange"); + same(ui.item, {label:"java", value:"java"}); same( $(".ui-menu:visible").length, 0 ); + start(); } }); stop(); - ac.val("ja").keydown(); + ac.focus().val("ja").keydown(); setTimeout(function() { same( $(".ui-menu:visible").length, 1 ); ac.simulate("keydown", { keyCode: $.ui.keyCode.DOWN }); ac.simulate("keydown", { keyCode: $.ui.keyCode.ENTER }); - start(); + ac.blur(); }, 50); }); +test("change without selection", function() { + expect(2); + stop(); + var ac = $("#autocomplete").autocomplete({ + delay: 0, + source: data, + change: function(event, ui) { + same(event.type, "autocompletechange"); + same(ui.item, null); + start(); + } + }); + ac.focus().val("ja").blur(); +}); + test("cancel search", function() { expect(6); var first = true; diff --git a/tests/unit/autocomplete/autocomplete_options.js b/tests/unit/autocomplete/autocomplete_options.js index 6639e9014..c5aa7c961 100644 --- a/tests/unit/autocomplete/autocomplete_options.js +++ b/tests/unit/autocomplete/autocomplete_options.js @@ -120,7 +120,7 @@ function source_test(source, async) { } if (async) { stop(); - setTimeout(result, 100); + $(document).one("ajaxStop", result); } else { result(); } diff --git a/tests/unit/draggable/draggable.html b/tests/unit/draggable/draggable.html index a48f3c092..050d37704 100644 --- a/tests/unit/draggable/draggable.html +++ b/tests/unit/draggable/draggable.html @@ -15,12 +15,15 @@ + + diff --git a/tests/unit/droppable/droppable.html b/tests/unit/droppable/droppable.html index 9f2c14a1d..bc9a9d416 100644 --- a/tests/unit/droppable/droppable.html +++ b/tests/unit/droppable/droppable.html @@ -16,12 +16,15 @@ + + diff --git a/tests/unit/resizable/resizable.html b/tests/unit/resizable/resizable.html index fe100d2aa..08c4c8798 100644 --- a/tests/unit/resizable/resizable.html +++ b/tests/unit/resizable/resizable.html @@ -17,12 +17,15 @@ + + diff --git a/tests/unit/selectable/selectable.html b/tests/unit/selectable/selectable.html index 74a10584a..e71d20e22 100644 --- a/tests/unit/selectable/selectable.html +++ b/tests/unit/selectable/selectable.html @@ -15,12 +15,15 @@ + + diff --git a/tests/unit/slider/slider_options.js b/tests/unit/slider/slider_options.js index cc36923b3..b9a766539 100644 --- a/tests/unit/slider/slider_options.js +++ b/tests/unit/slider/slider_options.js @@ -88,17 +88,50 @@ test("range", function() { ok(false, "missing test - untested code is broken code."); }); +//spec: http://wiki.jqueryui.com/Slider#specs +// value option/method: the value option is not restricted by min/max/step. +// What is returned by the value method is restricted by min (>=), max (<=), and step (even multiple) test("step", function() { var el = $('
    ').slider({ - step: 10 + min: 0, + value: 0, + step: 10, + max: 100, }); - equals( el.slider("value"), 0 ) + equals( el.slider("value"), 0 ); + el.slider("value", 1); + equals( el.slider("value"), 0 ); + + el.slider("value", 9); equals( el.slider("value"), 10 ); - el.slider("value", 10); - equals( el.slider("value"), 10 ); + el.slider("value", 11); + equals( el.slider("value"), 10 ); + + el.slider("value", 19); equals( el.slider("value"), 20 ); + +el = $('
    ').slider({ + min: 0, + value: 0, + step: 20, + max: 100, + }); + el.slider("value", 0); + + el.slider("option", "value", 1); + equals( el.slider("value"), 0 ); + + el.slider("option", "value", 9); + equals( el.slider("value"), 0 ); + + el.slider("option", "value", 11); + equals( el.slider("value"), 20 ); + + el.slider("option", "value", 19); + equals( el.slider("value"), 20 ); + el.slider('destroy'); }); diff --git a/tests/unit/sortable/sortable.html b/tests/unit/sortable/sortable.html index 2a50f85a1..f956d6df0 100644 --- a/tests/unit/sortable/sortable.html +++ b/tests/unit/sortable/sortable.html @@ -15,12 +15,15 @@ + + diff --git a/tests/unit/tabs/tabs_core.js b/tests/unit/tabs/tabs_core.js index 20ab2b1fd..652788bba 100644 --- a/tests/unit/tabs/tabs_core.js +++ b/tests/unit/tabs/tabs_core.js @@ -35,19 +35,21 @@ test('ajax', function() { selected: 2, load: function() { // spinner: default spinner - equals($('li:eq(2) > a > span', el).length, 1, "should restore tab markup after spinner is removed"); - equals($('li:eq(2) > a > span', el).html(), '3', "should restore tab label after spinner is removed"); - el.tabs('destroy'); - el.tabs({ - selected: 2, - spinner: '', - load: function() { - // spinner: image - equals($('li:eq(2) > a > span', el).length, 1, "should restore tab markup after spinner is removed"); - equals($('li:eq(2) > a > span', el).html(), '3', "should restore tab label after spinner is removed"); - start(); - } - }); + setTimeout(function() { + equals($('li:eq(2) > a > span', el).length, 1, "should restore tab markup after spinner is removed"); + equals($('li:eq(2) > a > span', el).html(), '3', "should restore tab label after spinner is removed"); + el.tabs('destroy'); + el.tabs({ + selected: 2, + spinner: '', + load: function() { + // spinner: image + equals($('li:eq(2) > a > span', el).length, 1, "should restore tab markup after spinner is removed"); + equals($('li:eq(2) > a > span', el).html(), '3', "should restore tab label after spinner is removed"); + start(); + } + }); + }, 1); } }); diff --git a/tests/visual/button/button_performance.html b/tests/visual/button/button_performance.html new file mode 100644 index 000000000..2d31c2f27 --- /dev/null +++ b/tests/visual/button/button_performance.html @@ -0,0 +1,552 @@ + + + + + Button Visual push: Default + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/visual/compound/tabs_tooltips.html b/tests/visual/compound/tabs_tooltips.html deleted file mode 100644 index 00046fe0d..000000000 --- a/tests/visual/compound/tabs_tooltips.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - Compound Visual Test : Tabs in Tabs - - - - - - - - - - - - -
    - -
    - label -
    - -
    - - - diff --git a/tests/visual/compound/widgets_in_dialog.html b/tests/visual/compound/widgets_in_dialog.html index e2eb366b4..7551efd8d 100644 --- a/tests/visual/compound/widgets_in_dialog.html +++ b/tests/visual/compound/widgets_in_dialog.html @@ -20,11 +20,8 @@ - @@ -79,11 +76,11 @@
    - +
    -
    +
    @@ -44,7 +43,6 @@
  • Progressbar
  • Slider
  • Tabs
  • -
  • Tooltip
  • diff --git a/tests/visual/tooltip/ajaxcontent.php b/tests/visual/tooltip/ajaxcontent.php deleted file mode 100644 index a689a734d..000000000 --- a/tests/visual/tooltip/ajaxcontent.php +++ /dev/null @@ -1,2 +0,0 @@ - -Hello world! \ No newline at end of file diff --git a/tests/visual/tooltip/callout.html b/tests/visual/tooltip/callout.html deleted file mode 100644 index 3ef694987..000000000 --- a/tests/visual/tooltip/callout.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - Tooltip Visual Test: Default - - - - - - - - - - - - - -
    - - -
    - collision detection should kick in around here -
    - - - -
    - right aligned with custom position -
    - -
    - gets its content via ajax -
    - -
    - span -
    - div - nested span -
    -
    - -
    -
    - - -
    -
    - - -
    -
    - -
    This is the footnote, including other elements
    - - - -
    - - - - diff --git a/tests/visual/tooltip/tooltip.html b/tests/visual/tooltip/tooltip.html deleted file mode 100644 index 3f1ae3878..000000000 --- a/tests/visual/tooltip/tooltip.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - Tooltip Visual Test: Default - - - - - - - - - - - - - -
    - - -
    - collision detection should kick in around here -
    - - - -
    - right aligned with custom position -
    - -
    - gets its content via ajax -
    - -
    - span -
    - div - nested span -
    -
    - -
    - Text in bold. -
    - -
    -
    - - -
    -
    - - -
    -
    - - - - - -
    This is the footnote, including other elements
    - - - -
    - - - - diff --git a/themes/base/jquery.ui.autocomplete.css b/themes/base/jquery.ui.autocomplete.css index 9c9ca7584..f99006243 100644 --- a/themes/base/jquery.ui.autocomplete.css +++ b/themes/base/jquery.ui.autocomplete.css @@ -34,5 +34,6 @@ } .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; margin: -1px; } diff --git a/themes/base/jquery.ui.base.css b/themes/base/jquery.ui.base.css index b6a74984b..eed06a277 100644 --- a/themes/base/jquery.ui.base.css +++ b/themes/base/jquery.ui.base.css @@ -9,4 +9,3 @@ @import url("jquery.ui.resizable.css"); @import url("jquery.ui.slider.css"); @import url("jquery.ui.tabs.css"); -@import url("jquery.ui.tooltip.css"); diff --git a/themes/base/jquery.ui.tabs.css b/themes/base/jquery.ui.tabs.css index 729758fec..99e16dbdb 100644 --- a/themes/base/jquery.ui.tabs.css +++ b/themes/base/jquery.ui.tabs.css @@ -7,5 +7,5 @@ .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } .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; } .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... */ -.ui-tabs .ui-tabs-panel { display: block; border: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/themes/base/jquery.ui.tooltip.css b/themes/base/jquery.ui.tooltip.css deleted file mode 100644 index 6d8e988bd..000000000 --- a/themes/base/jquery.ui.tooltip.css +++ /dev/null @@ -1,14 +0,0 @@ -/* Tooltip -----------------------------------*/ -.ui-tooltip { - padding:8px; width:100px; position:absolute; z-index:9999; - -o-box-shadow: 0 0 5px #aaa; - -moz-box-shadow: 0 0 5px #aaa; - -webkit-box-shadow: 0 0 5px #aaa; - box-shadow: 0 0 5px #aaa; -} -/* Fades and background-images don't work well together in IE6, drop the image */ -* html .ui-tooltip { - background-image: none; -} -body .ui-tooltip { border-width:2px; } diff --git a/ui/i18n/jquery.ui.datepicker-pl.js b/ui/i18n/jquery.ui.datepicker-pl.js index 2d2d4d765..d315bf523 100644 --- a/ui/i18n/jquery.ui.datepicker-pl.js +++ b/ui/i18n/jquery.ui.datepicker-pl.js @@ -10,7 +10,7 @@ jQuery(function($){ 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', 'Lip','Sie','Wrz','Pa','Lis','Gru'], - dayNames: ['Niedziela','Poniedzialek','Wtorek','Środa','Czwartek','Piątek','Sobota'], + dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], weekHeader: 'Tydz', diff --git a/ui/jquery.ui.accordion.js b/ui/jquery.ui.accordion.js index bce78231b..0ac478b73 100644 --- a/ui/jquery.ui.accordion.js +++ b/ui/jquery.ui.accordion.js @@ -140,9 +140,9 @@ $.widget("ui.accordion", { this.headers .unbind(".accordion") .removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top") - .removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex"); + .removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex"); - this.headers.find("a").removeAttr("tabindex"); + this.headers.find("a").removeAttr("tabIndex"); this._destroyIcons(); var contents = this.headers.next().css("display", "").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active"); if (o.autoHeight || o.fillHeight) { diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js index a1d798c59..14a19e4b2 100644 --- a/ui/jquery.ui.autocomplete.js +++ b/ui/jquery.ui.autocomplete.js @@ -83,6 +83,7 @@ $.widget( "ui.autocomplete", { } }) .bind( "focus.autocomplete", function() { + self.selectedItem = null; self.previous = self.element.val(); }) .bind( "blur.autocomplete", function( event ) { @@ -91,6 +92,7 @@ $.widget( "ui.autocomplete", { // TODO try to implement this without a timeout, see clearTimeout in search() self.closing = setTimeout(function() { self.close( event ); + self._change( event ); }, 150 ); }); this._initSource(); @@ -116,11 +118,13 @@ $.widget( "ui.autocomplete", { self.element.val( item.value ); } self.close( event ); - self.previous = self.element.val(); // only trigger when focus was lost (click on menu) + var previous = self.previous; if ( self.element[0] !== doc.activeElement ) { self.element.focus(); + self.previous = previous; } + self.selectedItem = item; }, blur: function( event, ui ) { if ( self.menu.element.is(":visible") ) { @@ -219,8 +223,11 @@ $.widget( "ui.autocomplete", { this.menu.element.hide(); this.menu.deactivate(); } + }, + + _change: function( event ) { if ( this.previous !== this.element.val() ) { - this._trigger( "change", event ); + this._trigger( "change", event, { item: this.selectedItem } ); } }, diff --git a/ui/jquery.ui.core.js b/ui/jquery.ui.core.js index 197a1aba9..c0eab46b4 100644 --- a/ui/jquery.ui.core.js +++ b/ui/jquery.ui.core.js @@ -118,15 +118,13 @@ $.fn.extend({ enableSelection: function() { return this .attr('unselectable', 'off') - .css('MozUserSelect', '') - .unbind('selectstart.ui'); + .css('MozUserSelect', ''); }, disableSelection: function() { return this .attr('unselectable', 'on') - .css('MozUserSelect', 'none') - .bind('selectstart.ui', function() { return false; }); + .css('MozUserSelect', 'none'); }, scrollParent: function() { diff --git a/ui/jquery.ui.slider.js b/ui/jquery.ui.slider.js index 185fe809c..440e75635 100644 --- a/ui/jquery.ui.slider.js +++ b/ui/jquery.ui.slider.js @@ -13,28 +13,32 @@ * jquery.ui.widget.js */ -(function($) { +(function( $ ) { // number of pages in a slider // (how many times can you page up/down to go through the whole range) var numPages = 5; -$.widget("ui.slider", $.ui.mouse, { +$.widget( "ui.slider", $.ui.mouse, { + widgetEventPrefix: "slide", + options: { animate: false, distance: 0, max: 100, min: 0, - orientation: 'horizontal', + orientation: "horizontal", range: false, step: 1, value: 0, values: null }, - _create: function() { - var self = this, o = this.options; + _create: function() { + var self = this, + o = this.options; + this._keySliding = false; this._mouseSliding = false; this._animateOff = true; @@ -43,197 +47,218 @@ $.widget("ui.slider", $.ui.mouse, { this._mouseInit(); this.element - .addClass("ui-slider" - + " ui-slider-" + this.orientation - + " ui-widget" - + " ui-widget-content" - + " ui-corner-all"); + .addClass( "ui-slider" + + " ui-slider-" + this.orientation + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ); - if (o.disabled) { - this.element.addClass('ui-slider-disabled ui-disabled'); + if ( o.disabled ) { + this.element.addClass( "ui-slider-disabled ui-disabled" ); } this.range = $([]); - if (o.range) { - - if (o.range === true) { - this.range = $('
    '); - if (!o.values) o.values = [this._valueMin(), this._valueMin()]; - if (o.values.length && o.values.length != 2) { - o.values = [o.values[0], o.values[0]]; + if ( o.range ) { + if ( o.range === true ) { + this.range = $( "
    " ); + if ( !o.values ) { + o.values = [ this._valueMin(), this._valueMin() ]; + } + if ( o.values.length && o.values.length !== 2 ) { + o.values = [ o.values[0], o.values[0] ]; } } else { - this.range = $('
    '); + this.range = $( "
    " ); } this.range - .appendTo(this.element) - .addClass("ui-slider-range"); + .appendTo( this.element ) + .addClass( "ui-slider-range" ); - if (o.range == "min" || o.range == "max") { - this.range.addClass("ui-slider-range-" + o.range); + if ( o.range === "min" || o.range === "max" ) { + this.range.addClass( "ui-slider-range-" + o.range ); } // note: this isn't the most fittingly semantic framework class for this element, // but worked best visually with a variety of themes - this.range.addClass("ui-widget-header"); - + this.range.addClass( "ui-widget-header" ); } - if ($(".ui-slider-handle", this.element).length == 0) - $('') - .appendTo(this.element) - .addClass("ui-slider-handle"); - - if (o.values && o.values.length) { - while ($(".ui-slider-handle", this.element).length < o.values.length) - $('') - .appendTo(this.element) - .addClass("ui-slider-handle"); + if ( $( ".ui-slider-handle", this.element ).length === 0 ) { + $( "" ) + .appendTo( this.element ) + .addClass( "ui-slider-handle" ); } - this.handles = $(".ui-slider-handle", this.element) - .addClass("ui-state-default" - + " ui-corner-all"); + if ( o.values && o.values.length ) { + while ( $(".ui-slider-handle", this.element).length < o.values.length ) { + $( "" ) + .appendTo( this.element ) + .addClass( "ui-slider-handle" ); + } + } - this.handle = this.handles.eq(0); + this.handles = $( ".ui-slider-handle", this.element ) + .addClass( "ui-state-default" + + " ui-corner-all" ); - this.handles.add(this.range).filter("a") - .click(function(event) { + this.handle = this.handles.eq( 0 ); + + this.handles.add( this.range ).filter( "a" ) + .click(function( event ) { event.preventDefault(); }) .hover(function() { - if (!o.disabled) { - $(this).addClass('ui-state-hover'); + if ( !o.disabled ) { + $( this ).addClass( "ui-state-hover" ); } }, function() { - $(this).removeClass('ui-state-hover'); + $( this ).removeClass( "ui-state-hover" ); }) .focus(function() { - if (!o.disabled) { - $(".ui-slider .ui-state-focus").removeClass('ui-state-focus'); $(this).addClass('ui-state-focus'); + if ( !o.disabled ) { + $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); + $( this ).addClass( "ui-state-focus" ); } else { - $(this).blur(); + $( this ).blur(); } }) .blur(function() { - $(this).removeClass('ui-state-focus'); + $( this ).removeClass( "ui-state-focus" ); }); - this.handles.each(function(i) { - $(this).data("index.ui-slider-handle", i); + this.handles.each(function( i ) { + $( this ).data( "index.ui-slider-handle", i ); }); - this.handles.keydown(function(event) { - - var ret = true; - - var index = $(this).data("index.ui-slider-handle"); - - if (self.options.disabled) - return; - - switch (event.keyCode) { - case $.ui.keyCode.HOME: - case $.ui.keyCode.END: - case $.ui.keyCode.PAGE_UP: - case $.ui.keyCode.PAGE_DOWN: - case $.ui.keyCode.UP: - case $.ui.keyCode.RIGHT: - case $.ui.keyCode.DOWN: - case $.ui.keyCode.LEFT: - ret = false; - if (!self._keySliding) { - self._keySliding = true; - $(this).addClass("ui-state-active"); - self._start(event, index); - } - break; - } - - var curVal, newVal, step = self.options.step; - if (self.options.values && self.options.values.length) { - curVal = newVal = self.values(index); - } else { - curVal = newVal = self.value(); - } - - switch (event.keyCode) { - case $.ui.keyCode.HOME: - newVal = self._valueMin(); - break; - case $.ui.keyCode.END: - newVal = self._valueMax(); - break; - case $.ui.keyCode.PAGE_UP: - newVal = curVal + ((self._valueMax() - self._valueMin()) / numPages); - break; - case $.ui.keyCode.PAGE_DOWN: - newVal = curVal - ((self._valueMax() - self._valueMin()) / numPages); - break; - case $.ui.keyCode.UP: - case $.ui.keyCode.RIGHT: - if(curVal == self._valueMax()) return; - newVal = curVal + step; - break; - case $.ui.keyCode.DOWN: - case $.ui.keyCode.LEFT: - if(curVal == self._valueMin()) return; - newVal = curVal - step; - break; - } - - self._slide(event, index, newVal); - - return ret; - - }).keyup(function(event) { - - var index = $(this).data("index.ui-slider-handle"); - - if (self._keySliding) { - self._keySliding = false; - self._stop(event, index); - self._change(event, index); - $(this).removeClass("ui-state-active"); - } - - }); + this.handles + .keydown(function( event ) { + var ret = true, + index = $( this ).data( "index.ui-slider-handle" ), + allowed, + curVal, + newVal, + step; + + if ( self.options.disabled ) { + return; + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_UP: + case $.ui.keyCode.PAGE_DOWN: + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + ret = false; + if ( !self._keySliding ) { + self._keySliding = true; + $( this ).addClass( "ui-state-active" ); + allowed = self._start( event, index ); + if ( allowed === false ) { + return; + } + } + break; + } + + step = self.options.step; + if ( self.options.values && self.options.values.length ) { + curVal = newVal = self.values( index ); + } else { + curVal = newVal = self.value(); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + newVal = self._valueMin(); + break; + case $.ui.keyCode.END: + newVal = self._valueMax(); + break; + case $.ui.keyCode.PAGE_UP: + newVal = curVal + ( (self._valueMax() - self._valueMin()) / numPages ); + break; + case $.ui.keyCode.PAGE_DOWN: + newVal = curVal - ( (self._valueMax() - self._valueMin()) / numPages ); + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + if ( curVal === self._valueMax() ) { + return; + } + newVal = curVal + step; + break; + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + if ( curVal === self._valueMin() ) { + return; + } + newVal = curVal - step; + break; + } + + self._slide( event, index, newVal ); + + return ret; + + }) + .keyup(function( event ) { + var index = $( this ).data( "index.ui-slider-handle" ); + + if ( self._keySliding ) { + self._keySliding = false; + self._stop( event, index ); + self._change( event, index ); + $( this ).removeClass( "ui-state-active" ); + } + + }); this._refreshValue(); this._animateOff = false; - }, destroy: function() { - this.handles.remove(); this.range.remove(); this.element - .removeClass("ui-slider" - + " ui-slider-horizontal" - + " ui-slider-vertical" - + " ui-slider-disabled" - + " ui-widget" - + " ui-widget-content" - + " ui-corner-all") - .removeData("slider") - .unbind(".slider"); + .removeClass( "ui-slider" + + " ui-slider-horizontal" + + " ui-slider-vertical" + + " ui-slider-disabled" + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ) + .removeData( "slider" ) + .unbind( ".slider" ); this._mouseDestroy(); return this; }, - _mouseCapture: function(event) { + _mouseCapture: function( event ) { + var o = this.options, + position, + normValue, + distance, + closestHandle, + self, + index, + allowed, + offset, + mouseOverHandle; - var o = this.options; - - if (o.disabled) + if ( o.disabled ) { return false; + } this.elementSize = { width: this.element.outerWidth(), @@ -241,16 +266,15 @@ $.widget("ui.slider", $.ui.mouse, { }; this.elementOffset = this.element.offset(); - var position = { x: event.pageX, y: event.pageY }; - var normValue = this._normValueFromMouse(position); - - var distance = this._valueMax() - this._valueMin() + 1, closestHandle; - var self = this, index; - this.handles.each(function(i) { - var thisDistance = Math.abs(normValue - self.values(i)); - if (distance > thisDistance) { + position = { x: event.pageX, y: event.pageY }; + normValue = this._normValueFromMouse( position ); + distance = this._valueMax() - this._valueMin() + 1; + self = this; + this.handles.each(function( i ) { + var thisDistance = Math.abs( normValue - self.values(i) ); + if ( distance > thisDistance ) { distance = thisDistance; - closestHandle = $(this); + closestHandle = $( this ); index = i; } }); @@ -258,216 +282,218 @@ $.widget("ui.slider", $.ui.mouse, { // workaround for bug #3736 (if both handles of a range are at 0, // the first is always used as the one with least distance, // and moving it is obviously prevented by preventing negative ranges) - if(o.range == true && this.values(1) == o.min) { - closestHandle = $(this.handles[++index]); + if( o.range === true && this.values(1) === o.min ) { + index += 1; + closestHandle = $( this.handles[index] ); } - this._start(event, index); + allowed = this._start( event, index ); + if ( allowed === false ) { + return false; + } this._mouseSliding = true; self._handleIndex = index; closestHandle - .addClass("ui-state-active") + .addClass( "ui-state-active" ) .focus(); - var offset = closestHandle.offset(); - var mouseOverHandle = !$(event.target).parents().andSelf().is('.ui-slider-handle'); + offset = closestHandle.offset(); + mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { - left: event.pageX - offset.left - (closestHandle.width() / 2), - top: event.pageY - offset.top - - (closestHandle.height() / 2) - - (parseInt(closestHandle.css('borderTopWidth'),10) || 0) - - (parseInt(closestHandle.css('borderBottomWidth'),10) || 0) - + (parseInt(closestHandle.css('marginTop'),10) || 0) + left: event.pageX - offset.left - ( closestHandle.width() / 2 ), + top: event.pageY - offset.top - + ( closestHandle.height() / 2 ) - + ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - + ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) }; - normValue = this._normValueFromMouse(position); - this._slide(event, index, normValue); + normValue = this._normValueFromMouse( position ); + this._slide( event, index, normValue ); this._animateOff = true; return true; - }, - _mouseStart: function(event) { + _mouseStart: function( event ) { return true; }, - _mouseDrag: function(event) { - - var position = { x: event.pageX, y: event.pageY }; - var normValue = this._normValueFromMouse(position); + _mouseDrag: function( event ) { + var position = { x: event.pageX, y: event.pageY }, + normValue = this._normValueFromMouse( position ); - this._slide(event, this._handleIndex, normValue); + this._slide( event, this._handleIndex, normValue ); return false; - }, - _mouseStop: function(event) { - - this.handles.removeClass("ui-state-active"); + _mouseStop: function( event ) { + this.handles.removeClass( "ui-state-active" ); this._mouseSliding = false; - this._stop(event, this._handleIndex); - this._change(event, this._handleIndex); + + this._stop( event, this._handleIndex ); + this._change( event, this._handleIndex ); + this._handleIndex = null; this._clickOffset = null; - this._animateOff = false; - return false; + return false; }, _detectOrientation: function() { - this.orientation = this.options.orientation == 'vertical' ? 'vertical' : 'horizontal'; + this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; }, - _normValueFromMouse: function(position) { + _normValueFromMouse: function( position ) { + var pixelTotal, + pixelMouse, + percentMouse, + valueTotal, + valueMouse; - var pixelTotal, pixelMouse; - if ('horizontal' == this.orientation) { + if ( this.orientation === "horizontal" ) { pixelTotal = this.elementSize.width; - pixelMouse = position.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0); + pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); } else { pixelTotal = this.elementSize.height; - pixelMouse = position.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0); + pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); } - var percentMouse = (pixelMouse / pixelTotal); - if (percentMouse > 1) percentMouse = 1; - if (percentMouse < 0) percentMouse = 0; - if ('vertical' == this.orientation) + percentMouse = ( pixelMouse / pixelTotal ); + if ( percentMouse > 1 ) { + percentMouse = 1; + } + if ( percentMouse < 0 ) { + percentMouse = 0; + } + if ( this.orientation === "vertical" ) { percentMouse = 1 - percentMouse; + } - var valueTotal = this._valueMax() - this._valueMin(), - valueMouse = percentMouse * valueTotal, - valueMouseModStep = valueMouse % this.options.step, - normValue = this._valueMin() + valueMouse - valueMouseModStep; - - if (valueMouseModStep > (this.options.step / 2)) - normValue += this.options.step; - - // Since JavaScript has problems with large floats, round - // the final value to 5 digits after the decimal point (see #4124) - return parseFloat(normValue.toFixed(5)); + valueTotal = this._valueMax() - this._valueMin(); + valueMouse = this._valueMin() + percentMouse * valueTotal; + return this._trimAlignValue( valueMouse ); }, - _start: function(event, index) { + _start: function( event, index ) { var uiHash = { - handle: this.handles[index], + handle: this.handles[ index ], value: this.value() }; - if (this.options.values && this.options.values.length) { - uiHash.value = this.values(index); + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); uiHash.values = this.values(); } - this._trigger("start", event, uiHash); + return this._trigger( "start", event, uiHash ); }, - _slide: function(event, index, newVal) { + _slide: function( event, index, newVal ) { + var otherVal, + newValues, + allowed; - var handle = this.handles[index]; + if ( this.options.values && this.options.values.length ) { + otherVal = this.values( index ? 0 : 1 ); - if (this.options.values && this.options.values.length) { - - var otherVal = this.values(index ? 0 : 1); - - if ((this.options.values.length == 2 && this.options.range === true) && - ((index == 0 && newVal > otherVal) || (index == 1 && newVal < otherVal))){ - newVal = otherVal; + if ( ( this.options.values.length === 2 && this.options.range === true ) && + ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) + ) { + newVal = otherVal; } - if (newVal != this.values(index)) { - var newValues = this.values(); - newValues[index] = newVal; + if ( newVal !== this.values( index ) ) { + newValues = this.values(); + newValues[ index ] = newVal; // A slide can be canceled by returning false from the slide callback - var allowed = this._trigger("slide", event, { - handle: this.handles[index], + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], value: newVal, values: newValues - }); - var otherVal = this.values(index ? 0 : 1); - if (allowed !== false) { - this.values(index, newVal, true); + } ); + otherVal = this.values( index ? 0 : 1 ); + if ( allowed !== false ) { + this.values( index, newVal, true ); } } - } else { - - if (newVal != this.value()) { + if ( newVal !== this.value() ) { // A slide can be canceled by returning false from the slide callback - var allowed = this._trigger("slide", event, { - handle: this.handles[index], + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], value: newVal - }); - if (allowed !== false) { - this.value(newVal); + } ); + if ( allowed !== false ) { + this.value( newVal ); } - } - } - }, - _stop: function(event, index) { + _stop: function( event, index ) { var uiHash = { - handle: this.handles[index], + handle: this.handles[ index ], value: this.value() }; - if (this.options.values && this.options.values.length) { - uiHash.value = this.values(index); + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); uiHash.values = this.values(); } - this._trigger("stop", event, uiHash); + + this._trigger( "stop", event, uiHash ); }, - _change: function(event, index) { - if (!this._keySliding && !this._mouseSliding) { + _change: function( event, index ) { + if ( !this._keySliding && !this._mouseSliding ) { var uiHash = { - handle: this.handles[index], + handle: this.handles[ index ], value: this.value() }; - if (this.options.values && this.options.values.length) { - uiHash.value = this.values(index); + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); uiHash.values = this.values(); } - this._trigger("change", event, uiHash); + + this._trigger( "change", event, uiHash ); } }, - value: function(newValue) { - - if (arguments.length) { - this.options.value = this._trimValue(newValue); + value: function( newValue ) { + if ( arguments.length ) { + this.options.value = this._trimAlignValue( newValue ); this._refreshValue(); - this._change(null, 0); + this._change( null, 0 ); } return this._value(); - }, - values: function(index, newValue) { + values: function( index, newValue ) { + var vals, + newValues, + i; - if (arguments.length > 1) { - this.options.values[index] = this._trimValue(newValue); + if ( arguments.length > 1 ) { + this.options.values[ index ] = this._trimAlignValue( newValue ); this._refreshValue(); - this._change(null, index); + this._change( null, index ); } - if (arguments.length) { - if ($.isArray(arguments[0])) { - var vals = this.options.values, newValues = arguments[0]; - for (var i = 0, l = vals.length; i < l; i++) { - vals[i] = this._trimValue(newValues[i]); - this._change(null, i); + if ( arguments.length ) { + if ( $.isArray( arguments[ 0 ] ) ) { + vals = this.options.values; + newValues = arguments[ 0 ]; + for ( i = 0; i < vals.length; i += 1 ) { + vals[ i ] = this._trimAlignValue( newValues[ i ] ); + this._change( null, i ); } this._refreshValue(); } else { - if (this.options.values && this.options.values.length) { - return this._values(index); + if ( this.options.values && this.options.values.length ) { + return this._values( index ); } else { return this.value(); } @@ -475,97 +501,107 @@ $.widget("ui.slider", $.ui.mouse, { } else { return this._values(); } - }, - _setOption: function(key, value) { - + _setOption: function( key, value ) { var i, valsLength = 0; - if ( jQuery.isArray(this.options.values) ) { + + if ( $.isArray( this.options.values ) ) { valsLength = this.options.values.length; - }; + } - $.Widget.prototype._setOption.apply(this, arguments); + $.Widget.prototype._setOption.apply( this, arguments ); - switch (key) { - case 'disabled': - if (value) { - this.handles.filter(".ui-state-focus").blur(); - this.handles.removeClass("ui-state-hover"); - this.handles.attr("disabled", "disabled"); - this.element.addClass("ui-disabled"); + switch ( key ) { + case "disabled": + if ( value ) { + this.handles.filter( ".ui-state-focus" ).blur(); + this.handles.removeClass( "ui-state-hover" ); + this.handles.attr( "disabled", "disabled" ); + this.element.addClass( "ui-disabled" ); } else { - this.handles.removeAttr("disabled"); - this.element.removeClass("ui-disabled"); + this.handles.removeAttr( "disabled" ); + this.element.removeClass( "ui-disabled" ); } - case 'orientation': - + break; + case "orientation": this._detectOrientation(); - this.element - .removeClass("ui-slider-horizontal ui-slider-vertical") - .addClass("ui-slider-" + this.orientation); + .removeClass( "ui-slider-horizontal ui-slider-vertical" ) + .addClass( "ui-slider-" + this.orientation ); this._refreshValue(); break; - case 'value': + case "value": this._animateOff = true; this._refreshValue(); - this._change(null, 0); + this._change( null, 0 ); this._animateOff = false; break; - case 'values': + case "values": this._animateOff = true; this._refreshValue(); - for (i = 0; i < valsLength; i++) { - this._change(null, i); + for ( i = 0; i < valsLength; i += 1 ) { + this._change( null, i ); } this._animateOff = false; break; } - }, + //internal value getter + // _value() returns value trimmed by min and max, aligned by step _value: function() { - //internal value getter - // _value() returns value trimmed by min and max var val = this.options.value; - val = this._trimValue(val); + val = this._trimAlignValue( val ); return val; }, - _values: function(index) { - //internal values getter - // _values() returns array of values trimmed by min and max - // _values(index) returns single value trimmed by min and max + //internal values getter + // _values() returns array of values trimmed by min and max, aligned by step + // _values( index ) returns single value trimmed by min and max, aligned by step + _values: function( index ) { + var val, + vals, + i; - if (arguments.length) { - var val = this.options.values[index]; - val = this._trimValue(val); + if ( arguments.length ) { + val = this.options.values[ index ]; + val = this._trimAlignValue( val ); return val; } else { // .slice() creates a copy of the array // this copy gets trimmed by min and max and then returned - var vals = this.options.values.slice(); - for (var i = 0, l = vals.length; i < l; i++) { - vals[i] = this._trimValue(vals[i]); + vals = this.options.values.slice(); + for ( i = 0; i < vals.length; i+= 1) { + vals[ i ] = this._trimAlignValue( vals[ i ] ); } return vals; } - }, - _trimValue: function(val) { - if (val < this._valueMin()) { + // returns the step-aligned value that val is closest to, between (inclusive) min and max + _trimAlignValue: function( val ) { + if ( val < this._valueMin() ) { return this._valueMin(); } - if (val > this._valueMax()) { + if ( val > this._valueMax() ) { return this._valueMax(); } - return val; + var step = this.options.step, + valModStep = val % step, + alignValue = val - valModStep; + + if ( valModStep >= ( step / 2 ) ) { + alignValue += step; + } + + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see #4124) + return parseFloat( alignValue.toFixed(5) ); }, _valueMin: function() { @@ -577,49 +613,70 @@ $.widget("ui.slider", $.ui.mouse, { }, _refreshValue: function() { + var oRange = this.options.range, + o = this.options, + self = this, + animate = ( !this._animateOff ) ? o.animate : false, + valPercent, + _set = {}, + lastValPercent, + value, + valueMin, + valueMax; - var oRange = this.options.range, o = this.options, self = this; - var animate = (!this._animateOff) ? o.animate : false; - - if (this.options.values && this.options.values.length) { - var vp0, vp1; - this.handles.each(function(i, j) { - var valPercent = (self.values(i) - self._valueMin()) / (self._valueMax() - self._valueMin()) * 100; - var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%'; - $(this).stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate); - if (self.options.range === true) { - if (self.orientation == 'horizontal') { - (i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ left: valPercent + '%' }, o.animate); - (i == 1) && self.range[animate ? 'animate' : 'css']({ width: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate }); + if ( this.options.values && this.options.values.length ) { + this.handles.each(function( i, j ) { + valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + if ( self.options.range === true ) { + if ( self.orientation === "horizontal" ) { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } } else { - (i == 0) && self.range.stop(1,1)[animate ? 'animate' : 'css']({ bottom: (valPercent) + '%' }, o.animate); - (i == 1) && self.range[animate ? 'animate' : 'css']({ height: (valPercent - lastValPercent) + '%' }, { queue: false, duration: o.animate }); + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } } } lastValPercent = valPercent; }); } else { - var value = this.value(), - valueMin = this._valueMin(), - valueMax = this._valueMax(), - valPercent = valueMax != valueMin - ? (value - valueMin) / (valueMax - valueMin) * 100 - : 0; - var _set = {}; _set[self.orientation == 'horizontal' ? 'left' : 'bottom'] = valPercent + '%'; - this.handle.stop(1,1)[animate ? 'animate' : 'css'](_set, o.animate); + value = this.value(); + valueMin = this._valueMin(); + valueMax = this._valueMax(); + valPercent = ( valueMax !== valueMin ) ? + ( value - valueMin ) / ( valueMax - valueMin ) * 100 : + 0; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); - (oRange == "min") && (this.orientation == "horizontal") && this.range.stop(1,1)[animate ? 'animate' : 'css']({ width: valPercent + '%' }, o.animate); - (oRange == "max") && (this.orientation == "horizontal") && this.range[animate ? 'animate' : 'css']({ width: (100 - valPercent) + '%' }, { queue: false, duration: o.animate }); - (oRange == "min") && (this.orientation == "vertical") && this.range.stop(1,1)[animate ? 'animate' : 'css']({ height: valPercent + '%' }, o.animate); - (oRange == "max") && (this.orientation == "vertical") && this.range[animate ? 'animate' : 'css']({ height: (100 - valPercent) + '%' }, { queue: false, duration: o.animate }); + if ( oRange === "min" && this.orientation === "horizontal" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "horizontal" ) { + this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + if ( oRange === "min" && this.orientation === "vertical" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "vertical" ) { + this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } } - } - + }); -$.extend($.ui.slider, { +$.extend( $.ui.slider, { version: "@VERSION" }); -})(jQuery); +}(jQuery)); diff --git a/ui/jquery.ui.tooltip.js b/ui/jquery.ui.tooltip.js deleted file mode 100644 index 166bff407..000000000 --- a/ui/jquery.ui.tooltip.js +++ /dev/null @@ -1,145 +0,0 @@ -/* - * jQuery UI Tooltip @VERSION - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Tooltip - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.position.js - */ -(function($) { - -// role=application on body required for screenreaders to correctly interpret aria attributes -if( !$(document.body).is('[role]') ){ - $(document.body).attr('role','application'); -} - -var increments = 0; - -$.widget("ui.tooltip", { - options: { - tooltipClass: "ui-widget-content", - content: function() { - return $(this).attr("title"); - }, - position: { - my: "left center", - at: "right center", - offset: "15 0" - } - }, - _init: function() { - var self = this; - this.tooltip = $("
    ") - .attr("id", "ui-tooltip-" + increments++) - .attr("role", "tooltip") - .attr("aria-hidden", "true") - .addClass("ui-tooltip ui-widget ui-corner-all") - .addClass(this.options.tooltipClass) - .appendTo(document.body) - .hide(); - this.tooltipContent = $("
    ") - .addClass("ui-tooltip-content") - .appendTo(this.tooltip); - this.opacity = this.tooltip.css("opacity"); - this.element - .bind("focus.tooltip mouseenter.tooltip", function(event) { - self.open(); - }) - .bind("blur.tooltip mouseleave.tooltip", function(event) { - self.close(); - }); - }, - - enable: function() { - this.options.disabled = false; - }, - - disable: function() { - this.options.disabled = true; - }, - - destroy: function() { - this.tooltip.remove(); - $.Widget.prototype.destroy.apply(this, arguments); - }, - - widget: function() { - return this.tooltip; - }, - - open: function() { - var target = this.element; - // already visible? possible when both focus and mouseover events occur - if (this.current && this.current[0] == target[0]) - return; - var self = this; - this.current = target; - this.currentTitle = target.attr("title"); - var content = this.options.content.call(target[0], function(response) { - // ignore async responses that come in after the tooltip is already hidden - if (self.current == target) - self._show(target, response); - }); - if (content) { - self._show(target, content); - } - }, - - _show: function(target, content) { - if (!content) - return; - - target.attr("title", ""); - - if (this.options.disabled) - return; - - this.tooltipContent.html(content); - this.tooltip.css({ - top: 0, - left: 0 - }).position($.extend(this.options.position, { - of: target - })); - - this.tooltip.attr("aria-hidden", "false"); - target.attr("aria-describedby", this.tooltip.attr("id")); - - if (this.tooltip.is(":animated")) - this.tooltip.stop().show().fadeTo("normal", this.opacity); - else - this.tooltip.is(':visible') ? this.tooltip.fadeTo("normal", this.opacity) : this.tooltip.fadeIn(); - - this._trigger( "open" ); - }, - - close: function() { - if (!this.current) - return; - - var current = this.current.attr("title", this.currentTitle); - this.current = null; - - if (this.options.disabled) - return; - - current.removeAttr("aria-describedby"); - this.tooltip.attr("aria-hidden", "true"); - - if (this.tooltip.is(':animated')) - this.tooltip.stop().fadeTo("normal", 0); - else - this.tooltip.stop().fadeOut(); - - this._trigger( "close" ); - } - -}); - -})(jQuery); \ No newline at end of file diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index 49067449d..a9829d2e5 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -155,7 +155,7 @@ $.Widget.prototype = { .removeAttr( "aria-disabled" ) .removeClass( this.widgetBaseClass + "-disabled " + - this.namespace + "-state-disabled" ); + "ui-state-disabled" ); }, widget: function() { @@ -192,7 +192,7 @@ $.Widget.prototype = { this.widget() [ value ? "addClass" : "removeClass"]( this.widgetBaseClass + "-disabled" + " " + - this.namespace + "-state-disabled" ) + "ui-state-disabled" ) .attr( "aria-disabled", value ); }